我对 FFmpeg 有点陌生,但我已经了解了很多基础知识。我试图了解如何使用 Opus 编码音频。我对音频、比特率、采样率和赫兹的了解有点薄弱。
我的 MP4 输入文件(音乐视频)使用 AAC 音频进行编码,并具有以下 FFprobe 音频参数:
[sample_rate] => 44100
[channels] => 2
[channel_layout] => stereo
[bit_rate] => 127999
我使用以下 FFmpeg 命令将此 MP4 文件转换为 WEBM:
ffmpeg -i input.mp4 -map 0:s? -map 0:v -map 0:a? -vf scale=-2:720 -movflags +faststart -c:v libvpx-vp9 -crf 32 -b:v 1024k -c:a libopus output.webm
当我运行 shell 命令时,我收到以下警告:
[libopus @ 0x55ccad7dc440] No bit rate set. Defaulting to 96000 bps.
据我了解,Opus 应该默认启用可变比特率(VBR),并且应该检测并匹配输入音频比特率。然而,opus 似乎与原始的 127,999 bps 不匹配。
这是否意味着 Opus 正在降低音频质量?输出中的音乐实际上对我来说听起来不错,但我有听力问题。根据我的阅读,很多人都可以感受到比特率高达 256kbps 的音频质量差异,这些音乐视频是供观众观看的,而不仅仅是我自己。音乐质量对于这些来说至关重要。
我也不想设置恒定的比特率-b:a 256k
,因为输入可能没有那么高,这只会浪费磁盘空间来尝试升级。我希望 opus 能够-vbr
最大限度地提高音频质量,至少与原始输入质量一样好!但如果 96k 与 Opus 一样高-vbr
,这意味着如果输入具有更高的保真比特率,我们就会损失很多音频质量,对吗?我假设输入文件的更高比特率相当于更高的音频质量?
帮助我理解。您会在 Opus 的 FFmpeg 命令中使用哪些标志来最大限度地提高音频质量?
libopus 编码器不支持基于质量的编码。
默认比特率基于通道数。您必须设置一些手动比特率。它可以高达
256k * # of channels
。VBR 默认情况下处于启用状态,这意味着并非所有音频帧都将被限制为固定比特率。它将徘徊在目标比特率附近。