尝试通过Subprocess发送命令以使用ffmpeg进行操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试通过Subprocess发送命令以使用ffmpeg进行操作相关的知识,希望对你有一定的参考价值。

我正在尝试构建一个脚本,通过Python 3中的ffmpeg转换视频文件。通过Windows PowerShell我通过以下命令成功获得了所需的结果:

ffmpeg -i test.webm -c:v libx264 converted.mp4

但是,如果我尝试通过以下代码在python中重复相同的操作:

import subprocess
from os import getcwd

print(getcwd()) # current directory
subprocess.call(["ffmpeg", " -f test.webm -c libx264 converted.mp4"])

我收到以下错误:

Output #0, mp4, to ' -f test.webm -c libx264 converted.mp4':
Output file #0 does not contain any stream

我在文件所在的正确文件夹中。你有更好的方法通过Python在shell中执行命令吗?这应该优选地在不同的平台上工作。

答案

试试这个:

import shlex

cmd = shlex.split("ffmpeg -f test.webm -c libx264 converted.mp4")
subprocess.call(cmd)

你需要将每个参数作为列表中的单个元素传递,这是argv的工作方式,或者让shell执行拆分:

subprocess.call("ffmpeg -f test.webm -c libx264 converted.mp4", shell=True)

以上是关于尝试通过Subprocess发送命令以使用ffmpeg进行操作的主要内容,如果未能解决你的问题,请参考以下文章

[python subprocess学习篇] 调用系统命令

subprocess.Popen 解析命令列表出现问题;管道未正确发送

Python的subprocess模块

通过subprocess模块,在python解释器中实现cmd中的命令结果

python 通过 subprocess 执行命令,重定向实时输出

Python subprocess + timeout的命令执行