python - 通过 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 \%
,但这没有帮助。
有任何想法吗?
解决方案
您省略了文件扩展名。使用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
输出选项。