首页 > 解决方案 > 通过 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中的特定图像时,我成功获得了(非常短的)视频。

我试过逃避%with \%,但这没有帮助。

有任何想法吗?

标签: pythonffmpegsubprocess

解决方案


您省略了文件扩展名。使用ptimage%03d.jpg,不使用ptimage%03d。使用ptimage%03dffmpeg 需要名为ptimage000,ptimage001等的文件。

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

无关说明:部分播放器(YouTube 除外)无法处理如此低的帧,因此请考虑添加-r 10输出选项。与色度子采样相同:考虑添加-vf format=yuv420p输出选项。


推荐阅读