如何使用FFmpeg转换音频时保留原比特率?
如何使用FFmpeg转换音频时保留原比特率?
嘿,这个问题我之前折腾OPUS转OGG的时候也碰到过!其实核心原因是FFmpeg默认转码时会用编码器的预设参数,不是自动匹配原文件的比特率,所以才会出现你说的从131kb/s降到115kb/s的情况。不用手动挨个查比特率,有两个实用的办法解决:
直接复制音频流(最快且完全无损)
先确认下:YouTube下载的OPUS音频本身就是基于OGG容器的编码格式,只是后缀可能是.opus而已。这种情况下完全不需要重新编码,直接把音频流复制到OGG容器里就行,比特率100%和原文件一致,还没转码的耗时。命令是:ffmpeg -i input.opus -c:a copy output.ogg这里的
-c:a copy就是告诉FFmpeg“别折腾编码了,直接把原音频流挪过去”,完美保留所有原参数。自动匹配原比特率重新编码(特殊场景用)
如果你确实需要重新编码(比如要调整其他音频参数),可以用FFmpeg自带的ffprobe工具自动读取原文件的比特率,再传给编码命令。这样就不用手动查每个文件的数值了:ffmpeg -i input.opus -vn -c:a libopus -b:a $(ffprobe -v error -select_streams a:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.opus) output.ogg简单解释下:
ffprobe的那段命令会提取原音频的比特率数值,然后通过$()把这个值传给FFmpeg的-b:a参数,让编码器用原比特率编码。不过这种方法会重新编码,耗时比直接复制长,而且如果原比特率不是标准值,可能会有极小的差异,但基本能保持和原文件一致。
另外提一句:你之前用的ffmpeg -i -vn <file>命令没指定编码参数,所以FFmpeg用了libopus的默认比特率,才导致了比特率下降。
备注:内容来源于stack exchange,提问作者RedBees
相关产品推荐
相关产品推荐

