【发布时间】:2021-05-23 10:50:00
【问题描述】:
我正在尝试使用 Tkinter 构建一个 GUI,通过按下按钮将一组图像转换为 .mp4 视频。
当我从命令行运行以下命令时,一切正常:
> "ffmpeg -r 5 -i ptimage%03d -crf 20 animation.mp4"
但是,在 Python 中,以下给出了我认为与在参数中传递 % 有关的错误:
commandString = "ffmpeg -r 5 -i ptimage%03d -crf 20 animation.mp4"
args = shlex.split(commandString)
p = subprocess.run(args)
我得到的错误是ptimage%03d: No such file or directory。我 99% 确定我正在从正确的目录运行命令;当我运行相同的命令将ptimage%03d 替换为ptimage000.jpg(列表中的特定图像)时,我成功获得了(非常短的)视频。
我尝试使用\% 转义%,但这没有帮助。
有什么想法吗?
【问题讨论】:
-
您确定您在正确的文件夹中吗?
os.getcwd()显示什么? -
你的文件名真的是
ptimage%03d吗?这是一个非常不寻常的文件名称。 subprocess 不会为您扩展元字符。 -
对于
ptimage%03d,它期待名为ptimage000、ptimage001、ptimage002等的文件。也许您打算将ptimage%03d.jpg用于ptimage000.jpg、ptimage001.jpg等。 -
顺便说一句,- 一般来说,最好将命令写成列表而不是依赖
shlex.split()字符串。 -
...专注于手头的问题,但是:不,
%s 并不特殊,除非您使用格式化运算符; Python 在这里没有做任何事情会影响你的名字,所以上面的 cmets 建议用户错误(不正确的目录,或者它应该是带有扩展名的ptimage%03d.jpg)是来自 Python 专业方向的最合理的解释,但是对 ffmpeg 的使用只有中等程度的熟悉。
标签: python ffmpeg subprocess