在升级到最新的 Ubuntu 之前,我使用以下命令从 avi 文件中提取 mp3:
$ for x in *.avi; do ffmpeg -vol 100 -ab 160k -ar 44100 -i "$x" "`basename "$x" .avi`.mp3"; done
这奏效了。但自从 Ubuntu 12.04 我得到未找到选项sample_rate。当我尝试执行这个命令时。如果我省略-ar 44100(或-sample_rate 44100)它确实提取了mp3,但在大多数情况下,提取的mp3的长度不再适合。这意味着它们的长度为 43 分钟左右,尽管 avi 的长度只有 5 分钟。
ffmpeg 和 avconv 都有同样的问题。有什么想法如何解决这些问题吗?
答案1
尝试用这个代替:
ffmpeg -i "$x" -vol 100 -ab 160k -ar 44100 "`basename "$x" .avi`.mp3"
之前选项位于输入文件前面,但看起来您想为输出文件设置它们。
答案2
您是否尝试过使用其他 avi 文件?文件的音轨可能比视频轨道长(只是猜测)。
您尝试过 -t 选项吗?
-t duration
Restrict the transcoded/captured video sequence to the duration
specified in seconds. "hh:mm:ss[.xxx]" syntax is also supported.
您可能想尝试在 ffmpeg 中设置音频比特流过滤器。我从未尝试过,但“remove_extra”过滤器听起来很有希望;)
-absf bitstream_filter
Bitstream filters available are "dump_extra", "remove_extra",
"noise", "mp3comp", "mp3decomp".
您是否考虑过使用像 ExifTool 这样的命令来查看有关文件的信息并相应地设置选项(甚至可能解析输出并在脚本中自动执行)?
也许您可以以无损格式提取音频文件,然后对音频文件进行转码,但必须有比这更好的方法。
如果您解决了问题,请发布您所做的事情,因为我对处理我需要解复用的 1000 个视频文件的明显方法不满意。我制作了一个与您类似的脚本,但是我希望在不浪费任何空间的情况下获得尽可能最佳质量的音频文件。我的转码选项肯定是动态的,所以我需要比单行更复杂的东西。
答案3
ffmpeg -version 将告诉您在为 Ubuntu 12.04 编译 ffmpeg 时启用了哪些构建选项。您可能缺少一个库,或者可能在构建期间未启用某个选项,您必须在启用任何禁用选项的情况下重新编译。 ffmpeg 的默认采样率为 44100,比特率为 64k。
答案4
从 ppa:jon-severinsson/ffmpeg 安装 ffmpeg 的 ppa,这将修复它。