如何使用FFmpeg将高比特率的MP3转换为低比特率

27

我们想将320kbps的mp3文件转换为128kbps的mp3,目前我们正在使用下面的ffmpeg命令,但它不起作用。

ffmpeg -i input.mp3 -codec:a libmp3lame -qscale:a 5 output.mp3

结果:- 输出比特率与输入mp3相同。

我们遵循FFmpeg编码指南,链接在这里: https://trac.ffmpeg.org/wiki/Encode/MP3

因此,请提出任何解决方案。


你有使用的(Android)FFmpeg构建的链接或名称吗? - VC.One
多年使用FFmpeg后,我傲慢地认为不需要检查如何设置音频比特率 - 我可以告诉你...阅读了您的链接后,我现在明白您正在查看可变比特率(VBR)设置,其中-qscale:a 5旨在实现平均比特率约为130kbps。无论如何,您的问题听起来像是您真正想要128kbps的恒定比特率(CBR)。PS:我想知道您的FFmpeg版本,因为您不能使用-qscale:a 5设置输入320kbps并获得完全相同的320kbps输出。这有什么问题吗?我想检查一下... - VC.One
1
这似乎与Android无关,而是关于ffmpeg的一般性问题。建议删除“android”标签并更新标题。 - Jake
3个回答

35

我尝试了您展示的命令(在Windows / 命令行上测试):

ffmpeg -i input.mp3 -codec:a libmp3lame -qscale:a 5 output.mp3

结果:对我有效。然而,-qscale:a 5 会让FFmpeg为您决定一个平均比特率。使用一个(320k)MP3文件,我得到了一个接近134kbps的转换结果。这是预期的,因为:

lame option   Average kbit/s  Bitrate range kbit/s    ffmpeg option
   -V 5             130           120-150                -q:a 5
解决方法
不要让 mp3 内部帧持有不同的比特率(这些比特率会因为音频的“当前”感知而变化,例如:考虑“静音”部分使用更小的比特率/字节与“繁忙”音频部分相比),只需要设置一个常量比特率为 128kbps 即可。

我会手动明确地将其设置为恒定的 128kbps

ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 128k output.mp3

1
那么输出文件AUD_1490697495080.mp3与输入文件名是不同的,对吗?我的意思是之后你会有两个分别为320k的单独文件,是这样吗?我试图想象你的问题,如果是关于两个320k的文件,那么你的结果只能发生在使用-codec:a copy而不是-codec:a libmp3lame的情况下...这就是为什么我需要知道你确切的FFmpeg版本(有链接吗?)来测试完全相同的事情,因为也许你有一个有缺陷的版本... - VC.One
2
请帮我将一个20MB的MP3文件转换成3.6MB的文件。非常感谢! - saber tabatabaee yazdi
1
“-map 0:0” 似乎解决了问题。为什么这不是默认的呢? - Jake
我无法重现你的错误信息。这个命令ffmpeg -i test.m4a -c:a libmp3lame -qscale:a 5 test.mp3可以正常工作。如果你使用的是仅有音频的文件(而不是重命名的MP4文件),我不知道为什么FFmpeg会提到H264视频编解码器。 - VC.One
ffmpeg -i input.m4a -b:a 80k output.m4a流映射:流#0:1 -> #0:0(mjpeg(本机)-> h264(libx264))流#0:0 -> #0:1(aac(本机)-> aac(本机))。我认为mjpeg '流'只是封面艺术。 - Jake
显示剩余5条评论

9
我使用这个shell脚本,以免反复访问这个stackoverflow页面 :)
#!/bin/bash
[[ ! -n $1 ]] && { 
    echo "Usage: mp3convert <input.mp3> <output.mp3> <bitrate:56/96/128/256> <channels> <samplerate>"
    exit 0
}
set -x # print next command
ffmpeg -i "$1" -codec:a libmp3lame -b:a "$3"k -ac "$4" -ar $5 "$2"

1
-ar 实现了我对 -b:a 的期望。 - Arnaud Meuret

3

确保您的 FFmpeg 版本启用了 libmp3lame。选定的答案对我没有起作用,但这个方法可以:

ffmpeg -v debug -i "input.mp3" -c:a libmp3lame \
   -b:a 128k -ac 2 -ar 44100 -vn "output.mp3"

-ac 2 - 输出包含 2 (立体声)音频通道。

-ar 44100 - 采样率为 44100Hz,适合高质量音乐。

尽管在2022年,我不建议将音频转换成128kbps,因为现在存储空间更加便宜和充足。

我认为-b:a 192k 对于大多数人来说在压缩和音质之间取得了最佳平衡(除非你是一名拥有1000美元耳机的发烧友,即使这样你最好还是使用FLAC格式)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接