Какие другие варианты сборки существуют для компиляции самой превосходной конфигурации FFmpeg?
Согласно документации FFmpeg, лучшим AAC-кодером, который может использовать FFmpeg, является кодировщик Fraunhofer FDK AAC от Fraunhofer Society, и, похоже, в этом нет никаких разногласий.
Однако для соответствия GPL FFmpeg по умолчанию не включает кодировщик в свои двоичные файлы, и единственный способ установить его - это скомпилировать FFmpeg из исходного кода с помощью --enable-libfdk-aac
вариант сборки.
Это заставило меня задуматься о том, с какими другими подобными опциями можно скомпилировать FFmpeg, чтобы дать мне лучшую сборку для создания наиболее эффективного (то есть самого высокого качества при минимальной скорости передачи) звука.
Например, какие преимущества делает компиляция с --enable-nonfree
(или не компилируется с --enable-gpl
) предлагает? Мне кажется странным, что все эти варианты улучшения программного обеспечения существуют, но не существует централизованного места, где они документируются и объясняются.
2 ответа
Прежде всего, чтобы увидеть полный список параметров конфигурации, обратитесь к ./configure --help
,
Согласно документации FFmpeg...
На самом деле это не документация, а вики, которую могут редактировать все, поэтому, как и на любой вики, вы можете самостоятельно проверить любые претензии.
Это заставило меня задуматься о том, с какими другими подобными опциями можно скомпилировать FFmpeg, чтобы дать мне лучшую сборку для создания наиболее эффективного (то есть самого высокого качества при минимальной скорости передачи) звука.
Это в настоящее время Opus Audio. Включить его с --enable-libopus
и используйте последнюю версию libopus, если вы хотите воспользоваться преимуществами недавней деятельности по разработке.
Есть претензии, что аудио ресэмплер Sox лучше, чем встроенный ресэмплер в FFmpeg. Я сам не много пробовал. Включить его с --enable-libsoxr
,
Какие преимущества делает компиляция с
--enable-nonfree
предлагает?
Этот вариант сам по себе не дает никаких преимуществ. Это требуется для некоторых внешних библиотек, которые считаются несвободными. Вы можете посмотреть, какие библиотеки требуют этого в исходном коде configure
файл: обратитесь к EXTERNAL_LIBRARY_NONFREE_LIST
(а также HWACCEL_LIBRARY_NONFREE_LIST
). Начиная с этого ответа они включают: decklink, libndi_newtek, libfdk_aac, openssl, libtls (и cuda_nvcc, cuda_sdk, libnpp).
Недостаток использования --enable-nonfree
заключается в том, что полученная сборка будет несвободной и, следовательно, не подлежит распространению.
Какие преимущества не компилируются с
--enable-gpl
предлагает?
Чуть быстрее скомпилировать. Несколько меньший размер результирующего исполняемого файла. Лицензия LGPL 2.1 вместо GPL 2. Однако это может вас не беспокоить.
Увидеть LICENSE.md
включены в исходный код для полного списка того, что требует --enable-gpl
,
Спасибо llogan за указание на то, что полный список параметров конфигурации можно найти, выполнив ./configure --help
в каталоге, содержащем источники FFmpeg. К сожалению, эта информация не документирована нигде, поэтому, чтобы сделать ее доступной без необходимости загрузки исходных файлов FFmpeg, я воспроизвел их ниже.
Обратите внимание, что я воспроизвел только те параметры конфигурации, которые включают / отключают поддержку определенной внешней библиотеки или функции аппаратного ускорения - общие параметры конфигурации программы или параметры отладки были опущены. Каждый параметр сопровождается описанием в квадратных скобках того, включен ли этот параметр по умолчанию в FFmpeg или определяется ли его поддержка автоматически:
Licensing options:
--enable-gpl allow use of GPL code, the resulting libs and binaries will be under GPL [no]
--enable-version3 upgrade (L)GPL to version 3 [no]
--enable-nonfree allow use of nonfree code, the resulting libs and binaries will be unredistributable [no]
External library support:
Using any of the following switches will allow FFmpeg to link to the
corresponding external library. All the components depending on that library
will become enabled, if all their other dependencies are met and they are not
explicitly disabled. E.g. --enable-libwavpack will enable linking to
libwavpack and allow the libwavpack encoder to be built, unless it is
specifically disabled with --disable-encoder=libwavpack.
Note that only the system libraries are auto-detected. All the other external
libraries must be explicitly enabled.
Also note that the following help text describes the purpose of the libraries
themselves, not all their features will necessarily be usable by FFmpeg.
--disable-alsa disable ALSA support [autodetect]
--disable-appkit disable Apple AppKit framework [autodetect]
--disable-avfoundation disable Apple AVFoundation framework [autodetect]
--enable-avisynth enable reading of AviSynth script files [no]
--disable-bzlib disable bzlib [autodetect]
--disable-coreimage disable Apple CoreImage framework [autodetect]
--enable-chromaprint enable audio fingerprinting with chromaprint [no]
--enable-frei0r enable frei0r video filtering [no]
--enable-gcrypt enable gcrypt, needed for rtmp(t)e support if openssl, librtmp or gmp is not used [no]
--enable-gmp enable gmp, needed for rtmp(t)e support if openssl or librtmp is not used [no]
--enable-gnutls enable gnutls, needed for https support if openssl, libtls or mbedtls is not used [no]
--disable-iconv disable iconv [autodetect]
--enable-jni enable JNI support [no]
--enable-ladspa enable LADSPA audio filtering [no]
--enable-libaom enable AV1 video encoding/decoding via libaom [no]
--enable-libaribb24 enable ARIB text and caption decoding via libaribb24 [no]
--enable-libass enable libass subtitles rendering, needed for subtitles and ass filter [no]
--enable-libbluray enable BluRay reading using libbluray [no]
--enable-libbs2b enable bs2b DSP library [no]
--enable-libcaca enable textual display using libcaca [no]
--enable-libcelt enable CELT decoding via libcelt [no]
--enable-libcdio enable audio CD grabbing with libcdio [no]
--enable-libcodec2 enable codec2 en/decoding using libcodec2 [no]
--enable-libdav1d enable AV1 decoding via libdav1d [no]
--enable-libdavs2 enable AVS2 decoding via libdavs2 [no]
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no]
--enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
--enable-libflite enable flite (voice synthesis) support via libflite [no]
--enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
--enable-libfreetype enable libfreetype, needed for drawtext filter [no]
--enable-libfribidi enable libfribidi, improves drawtext filter [no]
--enable-libgme enable Game Music Emu via libgme [no]
--enable-libgsm enable GSM de/encoding via libgsm [no]
--enable-libiec61883 enable iec61883 via libiec61883 [no]
--enable-libilbc enable iLBC de/encoding via libilbc [no]
--enable-libjack enable JACK audio sound server [no]
--enable-libklvanc enable Kernel Labs VANC processing [no]
--enable-libkvazaar enable HEVC encoding via libkvazaar [no]
--enable-liblensfun enable lensfun lens correction [no]
--enable-libmodplug enable ModPlug via libmodplug [no]
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
--enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libopencv enable video filtering via libopencv [no]
--enable-libopenh264 enable H.264 encoding via OpenH264 [no]
--enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
--enable-libopenmpt enable decoding tracked files via libopenmpt [no]
--enable-libopus enable Opus de/encoding via libopus [no]
--enable-libpulse enable Pulseaudio input via libpulse [no]
--enable-librsvg enable SVG rasterization via librsvg [no]
--enable-librubberband enable rubberband needed for rubberband filter [no]
--enable-librtmp enable RTMP[E] support via librtmp [no]
--enable-libshine enable fixed-point MP3 encoding via libshine [no]
--enable-libsmbclient enable Samba protocol via libsmbclient [no]
--enable-libsnappy enable Snappy compression, needed for hap encoding [no]
--enable-libsoxr enable Include libsoxr resampling [no]
--enable-libspeex enable Speex de/encoding via libspeex [no]
--enable-libsrt enable Haivision SRT protocol via libsrt [no]
--enable-libssh enable SFTP protocol via libssh [no]
--enable-libtensorflow enable TensorFlow as a DNN module backend for DNN based filters like sr [no]
--enable-libtesseract enable Tesseract, needed for ocr filter [no]
--enable-libtheora enable Theora encoding via libtheora [no]
--enable-libtls enable LibreSSL (via libtls), needed for https support if openssl, gnutls or mbedtls is not used [no]
--enable-libtwolame enable MP2 encoding via libtwolame [no]
--enable-libv4l2 enable libv4l2/v4l-utils [no]
--enable-libvidstab enable video stabilization using vid.stab [no]
--enable-libvmaf enable vmaf filter via libvmaf [no]
--enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
--enable-libvorbis enable Vorbis en/decoding via libvorbis, native implementation exists [no]
--enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
--enable-libwavpack enable wavpack encoding via libwavpack [no]
--enable-libwebp enable WebP encoding via libwebp [no]
--enable-libx264 enable H.264 encoding via x264 [no]
--enable-libx265 enable HEVC encoding via x265 [no]
--enable-libxavs enable AVS encoding via xavs [no]
--enable-libxavs2 enable AVS2 encoding via xavs2 [no]
--enable-libxcb enable X11 grabbing using XCB [autodetect]
--enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
--enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
--enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
--enable-libxvid enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no]
--enable-libxml2 enable XML parsing using the C library libxml2, needed for dash demuxing support [no]
--enable-libzimg enable z.lib, needed for zscale filter [no]
--enable-libzmq enable message passing via libzmq [no]
--enable-libzvbi enable teletext support via libzvbi [no]
--enable-lv2 enable LV2 audio filtering [no]
--disable-lzma disable lzma [autodetect]
--enable-decklink enable Blackmagic DeckLink I/O support [no]
--enable-mbedtls enable mbedTLS, needed for https support if openssl, gnutls or libtls is not used [no]
--enable-mediacodec enable Android MediaCodec support [no]
--enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
--enable-openal enable OpenAL 1.1 capture support [no]
--enable-opencl enable OpenCL processing [no]
--enable-opengl enable OpenGL rendering [no]
--enable-openssl enable openssl, needed for https support if gnutls, libtls or mbedtls is not used [no]
--disable-sndio disable sndio support [autodetect]
--disable-schannel disable SChannel SSP, needed for TLS support on Windows if openssl and gnutls are not used [autodetect]
--disable-sdl2 disable sdl2 [autodetect]
--disable-securetransport disable Secure Transport, needed for TLS support on OSX if openssl and gnutls are not used [autodetect]
--enable-vapoursynth enable VapourSynth demuxer [no]
--disable-xlib disable xlib [autodetect]
--disable-zlib disable zlib [autodetect]
The following libraries provide various hardware acceleration features:
--disable-amf disable AMF video encoding code [autodetect]
--disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
--enable-cuda-nvcc enable Nvidia CUDA compiler [no]
--disable-cuvid disable Nvidia CUVID support [autodetect]
--disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
--disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
--disable-ffnvcodec disable dynamically linked Nvidia code [autodetect]
--enable-libdrm enable DRM code (Linux) [no]
--enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
--enable-libnpp enable Nvidia Performance Primitives-based code [no]
--enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
--disable-nvdec disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
--disable-nvenc disable Nvidia video encoding code [autodetect]
--enable-omx enable OpenMAX IL code [no]
--enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
--enable-rkmpp enable Rockchip Media Process Platform code [no]
--disable-v4l2-m2m disable V4L2 mem2mem code [autodetect]
--disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
--disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
--disable-videotoolbox disable VideoToolbox code [autodetect]
Также обратите внимание, что некоторые вышеперечисленные кодеки, такие как Xvid и Vorbis, уже имеют собственные кодеры FFmpeg и не требуют, чтобы были включены какие-либо дополнительные кодеры.
Дополнительную информацию о вариантах лицензирования можно найти на этом снимке экрана Media Auto Build Suite, который, как я обнаружил, содержит лучшее объяснение, с которым я когда-либо сталкивался, о том, что означают варианты лицензирования и каковы их последствия: