我有一个 .ogg 文件(包含语音),质量为 192kbps,我想将其降低到 32kbps(以节省空间)
我怎样才能做到这一点?
到目前为止我已经尝试过这个:
ffmpeg -i filename.ogg -ab 32k -f ogg new-filename.ogg
但我收到此错误:
[libvorbis @ 0x56157365ab60] encoder setup failed
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
我是不是用错了命令?有没有更好的方法来节省空间?请注意,我只能访问 192kbps 文件(不是原始文件)
非常感谢您的帮助!
答案1
这里有两个很好的选择:
- 调整 FFmpeg 命令行以生成较小的 Ogg Vorbis 文件
- 使用 FFmpeg 使用 libopus 创建小文件
两者的详情如下:
1. 调整您的 FFmpeg 命令行...
关键问题是 FFmpeg 不会自动地更改音频采样率以适当匹配您选择的比特率。但我猜 FFmpeg 通常不会做很多手动操作!
请记住,音频 CD 的采样率通常为 44100 Hz,而简单电话的采样率通常略高于 8000 Hz。因此,您可以选择最适合 32k Ogg Vorbis 音频的采样率。以下是一些指导原则:
- 44100 赫兹:典型的音频 CD 采样率。FFmpeg 拒绝了 32k 文件。
- 32000赫兹:适用于语音,也适用于需要较小文件大小且预计质量损失较小的其他音频文件。FFmpeg 拒绝了 32k 文件。
- 22050赫兹:适用于语音并可用于其他音频,但音频质量可能会有所损失。被 FFmpeg 接受为 32k 文件。
- 11025 赫兹:音质很差。被 FFmpeg 接受为 32k 文件。
- 8000赫兹:采样率比现代电话系统略低,不推荐用于大多数录音任务。被 FFmpeg 接受为 32k 文件。
考虑到这一点,我自己的测试表明你最好使用 22050 Hz 的采样率,请注意,这应该是完全足够用于语音,因此你的命令行应该是:
ffmpeg -i filename.ogg -c:a libvorbis -ab 32k -ar 22050 new-filename.ogg
这在我的设置上产生了相当合理的结果......
2. 使用 FFmpeg 使用 libopus 创建小文件……
如果您可能不太想使用 Ogg Vorbis,那么一个很好的选择是使用 Opus,在我的测试中,与 Ogg Vorbis 32k 编码相比,它为每个文件节省了相当多的千字节。尝试以下为您的语音文件量身定制的方法:
ffmpeg -i filename.ogg \
-c:a libopus -b:a 16k -ar 16000 -ac 1 -application voip \
new-filename.ogg
您将对输出文件的大小和音频质量感到惊喜。我在“参考资料”中提供了一个很棒的 HydrogenAudio 资源的链接,该资源应该可以指导您使用更好的 Opus 命令行...
参考:
答案2
文件的默认采样率不支持此低比特率。您必须先指定较低的采样率,然后才能降低比特率。添加选项 -ar 8000,以使选项 -b:a 32k 被接受。