python - 将ffmpeg与python一起使用,在找到END元素之前输入缓冲区已耗尽

标签 python ffmpeg subprocess

当我从命令行运行它时,一切都很好

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

有任何想法吗?

最佳答案

您需要添加-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 或更高版本。

关于python - 将ffmpeg与python一起使用,在找到END元素之前输入缓冲区已耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50924411/

相关文章:

node.js - 如何关闭从实时捕获源主动流式传输的 Node.js FFMPEG 子进程?

python - CompletedProcess 是 mypy 的泛型

ffmpeg - 过滤图描述中的流说明符 ':v:0' [1 :v:0] [1:a:0] [2:v:0] [2:a:0] [3:v:0] [3:v:0] concat=n=4:v=1:a=1 [v] [a] matches no streams

batch-file - 循环遍历 Windows 文件夹中的文件名并将每个名称发送到 ffmpeg 命令

python - 从组合(文字 ('@' )+ 'spec' )更改为关键字 ('@spec' )删除空格

python - 如何使用 anchor 将 pydantic 模型导出到 yaml?

python - 是否可以在Python中复制一个管道,使其具有一个写入端和两个读取端?

python subprocess.call 不能正确处理信号

python - 返回对应于行中最大值的列标题

string - 在模板字符串中求值