![ffmpeg:如何在 mp3 中设置“联合立体声”模式?](https://linux22.com/image/1407949/ffmpeg%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%20mp3%20%E4%B8%AD%E8%AE%BE%E7%BD%AE%E2%80%9C%E8%81%94%E5%90%88%E7%AB%8B%E4%BD%93%E5%A3%B0%E2%80%9D%E6%A8%A1%E5%BC%8F%EF%BC%9F.png)
在从 flac 转换为 mp3 格式时,如何在 ffmpeg 中设置联合立体声模式?
我通常使用此命令,但它会产生“立体声”模式。我需要“联合立体声”。
ffmpeg -i input.flac -vn -ac 2 -ar 44100 -ab 320k -f mp3 output.mp3
我正在使用适用于 Windows x64 的最新 ffmpeg。
答案1
根据我看过的所有参考资料,我很确定它应该已经默认为联合立体声模式。但我成功测试了使用该joint_stereo
标志打开和关闭联合立体声模式。应该将1
其设置为启用或0
禁用它。
例子:
ffmpeg -i 输入.flac -vn -ac 2 -ar 44100 -ab 320k -f mp3 -joint_stereo 1 输出.mp3
这是根据我找到的文档这里
答案2
更新:此处更正了我的原始帖子(为清晰起见,保留原始文本,并在下方添加评论)。在 ffmpeg 中选择此编码选项时,文件编码为联合立体声。但是,标头信息不正确,显示的是立体声而不是联合立体声。因此,虽然 ffmpeg 中确实存在错误,但幸运的是,它仅限于标头中的元数据。ffmpeg 确实正确处理了重要部分,灵敏的 MP3 播放器应该仍能正常工作(联合立体声是最广泛支持的 MP3 格式)。
恐怕 James P 搞错了,至少在最近的 ffmpeg 3.4.2 中是这样,但这是一个常见的误解。不幸的是,这是 ffmpeg 使用 libmp3lame 方式的一个长期错误。它将标题设置为联合立体声,但实际上并没有以联合立体声进行编码。需要联合立体声的 MP3 播放器将无法播放这些文件。-joint_stereo 1 选项在 ffmpeg 中不作为参数工作。请参阅未解决的错误报告:https://trac.ffmpeg.org/ticket/4954
在使用 ffmpeg 进行其他更改后,我使用 lame 或 sox 将 MP3 文件设置为立体声。我希望这不是必要的,尤其是在处理有损 MP3 文件时,对文件的每个操作都会使文件质量下降一点,但这还不算太糟。
例如,在 Windows 中(这在 CMD 中有效,而不是在 PS 中),这是我经常使用的命令,用于通过 ffmpeg 将 WAV 文件批量转换和标准化为 MP3,然后使用 SoX 设置为联合立体声(其默认输出)。在 Windows 中,检查联合立体声或立体声最简单的方法之一是 Mp3tag,并确保显示“模式”列,其中只会显示单声道、立体声或联合立体声。这也是确认 ffmpeg 无法正确输出联合立体声的最简单方法。
对于 ("*.wav") 中的 %x 执行 (ffmpeg -i "%x" -ab 320k -f mp3 -af dynaudnorm -id3v2_version 3 "int_%x.mp3" & sox --norm=-2.75 "int_%x.mp3" -c 2 -C 192 "ready-%x.mp3")
我对中间文件使用的比特率高于最终输出(在本例中为 320 对 192),以最大限度地减少音频质量下降。
请注意,这会使中间文件(int*)与原始文件和最终文件(ready*)保留在同一目录中。