通过Python子进程传递包含%的ffmpeg命令



我试图用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(列表中的特定图像)时,我成功地获得了一个(非常短的)视频。

我试过用%转义%,但是没有用。

任何想法?

您忽略了文件扩展名。使用ptimage%03d.jpg,而不是ptimage%03d。对于ptimage%03d, ffmpeg期望文件名为ptimage000,ptimage001

ffmpeg -framerate 5 -i ptimage%03d.jpg -crf 20 animation.mp4

无关的注意事项:一些播放器(YouTube除外)无法处理如此低的帧,所以考虑添加-r 10输出选项。与色度子采样相同:考虑添加-vf format=yuv420p输出选项。

最新更新