Как скомпилировать ffmpeg, чтобы получить поддержку только mp3 и mp4 - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю приложение Electron и использую ffmpeg для преобразования файлов m4a или webm в mp3, а также для объединения видео только mp4 с аудиофайлом m4a в mp4.

Я могу добиться этого с помощью [media-autobuild-suite] (https://github.com/jb-alvarado/media-autobuild_suite), с использованием опции легкой сборки, но размер статических файлов составляет около 20 МБ, и я хотел бы уменьшить его немного больше. Я скомпилировал ffmpeg и ffprobe с этой конфигурацией.

--disable-libaom
--disable-version3
# Full
--disable-chromaprint
--disable-cuda-sdk
--disable-decklink
--disable-frei0r
--disable-libbs2b
--disable-libcaca
--disable-libcdio
--disable-libfdk-aac
--disable-libflite
--disable-libfribidi
--disable-libgme
--disable-libgsm
--disable-libilbc
--disable-libkvazaar
--disable-libmodplug
--disable-libnpp
--disable-libopenh264
--disable-libopenmpt
--disable-librtmp
--disable-librubberband
--disable-libssh
--disable-libtesseract
--disable-libxavs
--disable-libzmq
--disable-libzvbi
--disable-opencl
--disable-opengl
--disable-libvmaf
--disable-libcodec2
--disable-libsrt
--disable-ladspa
--disable-ffplay
#--enable-vapoursynth
#--enable-liblensfun
--disable-libndi_newtek

--enable-demuxer=mp3
--enable-demuxer=mov
--enable-demuxer=opus

--enable-parser=ac3
--enable-parser=mpegaudio
--enable-parser=h264
--enable-parser=opus

--enable-protocol=file
--enable-protocol=pipe

--enable-decoder=mp3
--enable-decoder=mp4
--enable-decoder=opus

--enable-encoder=mp3
--enable-encoder=mp4
--enable-encoder=opus

С этой конфигурацией я получаю статический файл ffmpeg arround 2mb и статический файл ffprobe arround 2mb, но с этой ошибкой.

C:\Users\Admin\Desktop\ffmpeg compilations\2mb\local64>ffmpeg -i simple.m4a simple.mp3 
ffmpeg version N-93147-g9326117bf6 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.2.1 (Rev1, Built by MSYS2 project) 20181214
configuration:  .... //here comes configuration as described above
libavutil      56. 26.100 / 56. 26.100
libavcodec     58. 47.102 / 58. 47.102
libavformat    58. 26.101 / 58. 26.101
libavdevice    58.  6.101 / 58.  6.101
libavfilter     7. 48.100 /  7. 48.100
libswscale      5.  4.100 /  5.  4.100
libswresample   3.  4.100 /  3.  4.100
libpostproc    55.  4.100 / 55.  4.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'simple.m4a':
Metadata:
  major_brand     : dash
  minor_version   : 0
  compatible_brands: iso6mp41
  creation_time   : 2018-10-31T19:47:32.000000Z
Duration: 00:02:38.92, start: 0.000000, bitrate: 127 kb/s
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, 7 kb/s (default)
Metadata:
  creation_time   : 2018-10-31T19:47:32.000000Z
  handler_name    : SoundHandler
[NULL @ 0000000000486200] Unable to find a suitable output format for 'simple.mp3' 
simple.mp3: Invalid argument

Любые идеи, что еще следует включить вэто статический файл?

1 Ответ

0 голосов
/ 19 февраля 2019

Не нужно отключать вещи по частям: просто используйте --disable-everything, затем включите то, что вам нужно.

Вот пример, который вы можете начать с:

./configure
--disable-everything
--disable-network
--disable-autodetect
--enable-small
--enable-decoder=aac*,ac3*,opus,vorbis
--enable-demuxer=mov,m4v,matroska
--enable-muxer=mp3,mp4
--enable-protocol=file
--enable-libshine
--enable-encoder=libshine
--enable-filter=aresample
  • Конечный двоичный файлразмер будет около 2-3 МБ.
  • Нет необходимости включать какие-либо синтаксические анализаторы: выбранные декодеры автоматически выберут то, что требуется.
  • FFmpeg не имеет встроенного кодировщика MP3, поэтому вы 'Вам нужно будет использовать внешнюю библиотеку, такую ​​как libmp3lame или libshine.Поскольку вы упомянули Android, я предположил, что вам понадобится libshine вместо libmp3lame для кодирования MP3.
  • Тщательно протестируйте.Я, наверное, что-то забыл.
  • Если вы действительно хотите сходить с ума, тогда используйте --disable-all вместо --disable-everything, и вам дополнительно придется вручную включать нужные библиотеки FFmpeg, но это больше работы и большеголовная боль от небольшого возврата.

Это позволит вам кодировать MP3-звук с большинства входов M4A и Webm:

ffmpeg -i input.webm output.mp3

, а также позволит повторно мультиплексировать MP4 / M4V.+ M4A в MP4:

ffmpeg -i video.m4v -i audio.m4a -map 0:v -map 0:a -c copy output.mp4
...