Почему FFmpeg по умолчанию использует libvorbis?
Несмотря на то, что я использовал его в течение многих лет, совсем недавно я узнал (или, возможно, заново узнал), что FFmpeg кодирует по умолчанию, даже когда об этом не просят, если только потоки не передаются явно с помощью-c copy
.
Это побудило меня использоватьffprobe
чтобы проверить кодек видео, которое я недавно закодировал с использованием минимальных параметров, и теперь понимаю, что видео было закодировано с помощью .
x264
это неудивительно, поскольку это текущий стандарт видео, но меня удивляет, учитывая, что вики FFmpeg оценивает его ниже, чем и :
libopus – usable range ≥ 32Kbps. Recommended range ≥ 64Kbps
libfdk_aac default AAC LC profile – recommended range ≥ 128Kbps; see AAC Encoding Guide.
libfdk_aac -profile:a aac_he_v2 – usable range ≤ 48Kbps CBR. Transparency: Does not reach transparency. Use AAC LC instead to achieve transparency
libfdk_aac -profile:a aac_he – usable range ≥ 48Kbps and ≤ 80Kbps CBR. Transparency: Does not reach transparency. Use AAC LC instead to achieve transparency
libvorbis – usable range ≥ 96Kbps. Recommended range -aq 4 (≥ 128Kbps)
libmp3lame – usable range ≥ 128Kbps. Recommended range -aq 2 (≥ 192Kbps)
ac3 or eac3 – usable range ≥ 160Kbps. Recommended range ≥ 160Kbps
libtwolame – usable range ≥ 192Kbps. Recommended range ≥ 256Kbps
mp2 – usable range ≥ 320Kbps. Recommended range ≥ 320Kbps
Я скомпилировал свою сборку FFmpeg с обоимиlibopus
и есть ли причина, по которой звук по умолчанию установлен наlibvorbis
здесь?
И есть ли способ изменить эти значения по умолчанию, чтобы гарантировать, что FFmpeg всегда будет использоватьlibfdk_aac
(если не указано иное)?
1 ответ
Почему FFmpeg по умолчанию использует libvorbis?
Я предполагаю, что вы выводите данные в Matroska (.mkv
). Вы можете увидеть значения по умолчанию с помощью:
ffmpeg -h muxer=matroska
Muxer matroska [Matroska]:
Common extensions: mkv.
Mime type: video/x-matroska.
Default video codec: h264.
Default audio codec: vorbis.
Default subtitle codec: ass.
Если вы не знаете точного названия вашего мультиплексора, см.ffmpeg -h muxers
.
Почему либворбис? Это то, что указано первым вlibavformat/matroskaenc.c
:
AVOutputFormat ff_matroska_muxer = {
.name = "matroska",
.long_name = NULL_IF_CONFIG_SMALL("Matroska"),
.mime_type = "video/x-matroska",
.extensions = "mkv",
.priv_data_size = sizeof(MatroskaMuxContext),
.audio_codec = CONFIG_LIBVORBIS_ENCODER ?
AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3,
.video_codec = CONFIG_LIBX264_ENCODER ?
AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4,
Почему либворбис? В 2011 году он был изменен на libvorbis с mp2 с помощью кодеков по умолчанию matroskaenc: saner . Тогда libvorbis был довольно хорош.
Почему libvorbis 10 лет спустя?
- Некоторые пользователи жалуются, когда что-то меняется.
- Некоторые разработчики жалуются, когда что-то меняется.
- Возможно, никто не представил патч, чтобы изменить это.
- Есть более важные и интересные дела, над которыми стоит поработать.
- libopus все еще в новинку.
- libfdk_aac никогда не будет использоваться по умолчанию, поскольку он несвободный.
И есть ли способ изменить эти значения по умолчанию, чтобы гарантировать, что FFmpeg всегда будет использовать libfdk_aac (если не указано иное)?
- Просто используйте
-c:a libfdk_aac
- или измените исходный код и перекомпилируйте
- или отправьте патч, чтобы изменить настройки по умолчанию