当我从命令行运行时,一切都很好
ffmpeg -i input.mp4 -f mp3 -ab 320000 -vn output.mp3
但是当我从python中调用它时
subprocess.call(['ffmpeg', '-i', 'input.mp4', '-f', 'mp3', '-ab', '320000', '-vn', 'output.mp3'])
转换几秒后我收到此错误
[aac @ 0x7fb3d803e000] decode_band_types: Input buffer exhausted before
END element found
Error while decoding stream #0:1: Invalid data found when processing
input
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb3d8000000] stream 1, offset 0x80011d:
partial file
input.mp4: Invalid data found when processing input
有什么想法吗?
答案 0 :(得分:0)
您需要添加 -dn
& -ignore_unknown
和 -sn
选项(如果字幕导致编码失败)。
-dn
表示无数据编码。
-sn
指无字幕编码
-ignore_unknown
表示忽略未知流(SCTE 35, 128 数据)
无论输入流如何,-dn
-sn
和 -ignore_unknown
选项都可以使用。
这将解决您的问题。
如果您想保留数据、字幕流,还有另一种选择。
-c:d copy
指的是复制数据流。
-c:s copy
表示复制字幕流。
您可以使用 -copy_unknown
选项将未知流输入到您的输出中。
您的最终代码如下所示。
subprocess.call(['ffmpeg', '-i', 'input.mp4', '-f', 'mp3', '-ab', '320000', '-vn', '-sn', '-dn', '-ignore_unknown', 'output.mp3'])
注意:-copy_unknown
选项仅适用于 ffmpeg 4.x 或更高版本。