【发布时间】:2018-11-17 14:43:10
【问题描述】:
我想使用包含双引号的 python 将命令传递给运行 ffmpeg 的 Linux 机器。这是我的脚本:
drawtext = "drawtext=\"fontfile=DejaVuSans: text='Random Name': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=20: y=20\""
subprocess.call(["ffmpeg", "-v", "error", "-i", input.mp4, "-vf", drawtext, output.mp4])
如果我打印 drawtext 变量,这是输出:
drawtext="fontfile=DejaVuSans: text='Reference Image': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=20: y=20"
这是我在 ffmpeg 中的错误:
[Parsed_drawtext_0 @ 0x564ad79f99c0] [Eval @ 0x7ffd41131810] Invalid chars '"' at the end of expression '20"'
[Parsed_drawtext_0 @ 0x564ad79f99c0] Failed to configure input pad on Parsed_drawtext_0
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
如果我在 Linux shell 中执行以下命令,它就可以正常工作:
$ ffmpeg -ss 10 -i input.mp4 -vf drawtext="fontfile=DejaVuSans: text='Random Name': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: x=20: y=20" output.mp4
【问题讨论】:
-
调用
ffmpeg ... drawtext="fontfile..."时,ffmpeg看到的参数是drawtext=fontfile。也就是说,shell 删除了双引号。不要包括它们。 -
如果您意识到当您调用
ffmpeg drawtext="fontfile"时,shell 调用的进程与您调用ffmpeg "drawtext=fontfile"或ffmpeg dra"wtex"t=fon"tfile"或ffmpeg drawtext=fontfile时的进程完全相同。 -
它有效@WilliamPursell。谢谢!
-
花了一个多小时试图弄清楚为什么它在 bash 中工作,但在使用 subprocess.call 从 drawtext 中删除双引号时却没有成功!
标签: python shell ffmpeg subprocess