Почему 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
  • или измените исходный код и перекомпилируйте
  • или отправьте патч, чтобы изменить настройки по умолчанию
Другие вопросы по тегам