我正在尝试使用以下命令从 flac 创建可变速率 mp3:
avconv -i t.flac -id3v2_version 3 -vn -acodec libmp3lame -aq 0 t.mp3
avconv 和 mediainfo 都将最终 mp3 的持续时间正确地列为 2 分 40 秒,但我尝试过的每个 mp3 播放器(clementine、juk 和 amarok)都说这首歌的长度为 21 分 15 秒。使用 clementine 和 amarok 查看有关文件的详细信息,发现他们认为比特率为 32kbps,而 avconv 和 mediainfo(正确地)列出的总体比特率为 255kbps。 (255/32)*2.66 = 21.20,所以我确信感知的比特率才是问题所在,但我不知道如何解决它。
只是为了好玩,我还尝试使用以下命令创建一个恒定比特率文件:
avconv -i t.flac -id3v2_version 3 -vn -acodec libmp3lame -ab 320k u.mp3
这也有同样的问题。奇怪的是,即使指定了比特率,mediainfo 仍然报告比特率是可变的,并且 mp3 播放器在持续时间方面存在相同的一般问题。
我怎样才能解决这个问题?
答案1
对于恒定比特率,修复方法描述于如何使用libmp3lame获得CBR:将 avconv 输出通过管道传输到文件:
avconv -i test_orig.mp3 -b:a 128k -f mp3 - >test_ffmpeg_cbr.mp3
这使得 avconv 使用良好的 mp3 标头进行 CBR。
另一种方法:对生成的 mp3 进行操作(当源材料不再可用时非常有用):
avconv -i faulty_mp3 -vn -c:a copy -ss 0:0:0 repaired_mp3
答案2
lame
当您直接使用时,无论您选择哪种可变比特率机制(lame
提供--abr
、--vbr-old
和--vbr-new
),都会发生同样的事情。
所以这似乎是 MP3 格式或蹩脚编码器的限制。诸如此类的玩家mplayer
似乎只是通过迄今为止遇到的平均比特率来猜测总长度。
我尝试的文件一开始显示 30 分钟,10 秒后下降到 8:15,接近实际的 8:08...
由于它仍然可以正常播放,我认为您无需修复任何问题。如果您的硬件播放器无法处理它,则必须采用恒定比特率,或者如果您的播放器支持其他格式,而这些格式又支持可变比特率(OGG/Vorbis?),则完全使用其他格式。
答案3
我可以确认 avconv 有这个问题,但是不是瘸!在我的 Linux Mint 14 Nadia 中
对于 avconv 路径,快速修复是使用修复最终的 mp3 文件如下:vbrfix -always -makevbr -lameinfo imput.mp3 output.mp3