为什么FFmpeg默认使用libvorbis?

为什么FFmpeg默认使用libvorbis?

尽管已经使用了多年,但我最近才了解到(或者可能是重新了解到)FFmpeg 即使没有要求也会默认进行编码,除非明确传递流-c copy

这让我开始用ffprobe最少的参数检查我最近编码的视频的编解码器,现在我意识到视频是用 编码的x264,音频是用 编码的libvorbis

x264这并不奇怪,因为它是当前的视频标准,但libvorbis让我感到惊讶的是FFmpeg 维基其排名低于libopuslibfdk_aac

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 版本同时有libopuslibfdk_aac,那么音频在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

为什么是 libvorbis?它是在 中首先列出的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,

为什么是 libvorbis?2011 年,它从 mp2 更改为 libvorbis,matroskaenc:更合理的默认编解码器。那时候 libvorbis 还不错。

为什么 10 年后才有 libvorbis?

  • 当情况发生变化时,一些用户会抱怨。
  • 当事情发生变化时,一些开发人员会抱怨。
  • 也许没有人提交补丁来改变它。
  • 还有更重要或更有趣的事情要做。
  • libopus 仍然比较新。
  • libfdk_aac 永远不会成为默认设置,因为它不是免费的。

有没有办法改变这些默认值以确保 FFmpeg 始终使用 libfdk_aac(除非另有说明)?

  • 只需使用-c:a libfdk_aac
  • 或者修改源代码并重新编译
  • 或者提交补丁来更改默认设置

相关内容