在Python 3.6.5中,这可以很好地工作:
command = "ffmpeg -i {0} -vsync 0 -q:v 2 -vf select=\"eq(pict_type\,PICT_TYPE_I)\" -r 30 {1}/frame%03d.jpg".format(file_path, output_path)
这显然是一行很长的行,所以我使用了行续行符:
command = "ffmpeg -i {0} -vsync 0 -q:v 2 -vf select=\"eq(pict_type\,PICT_TYPE_I)\" -r 30 {1}/frame%03d.jpg"\
.format(file_path, output_path)
但是,在启动时,这会生成一个DeprecationWarning
DeprecationWarning: invalid escape sequence \,
command = "ffmpeg -i {0} -vsync 0 -q:v 2 -vf select=\"eq(pict_type\,PICT_TYPE_I)\" -r 30 {1}/frame%03d.jpg"\
然而,这不会:
command = "foo {0} bar {1}"\
.format(file_path, output_path)
我在项目的其余部分都使用了行延续;没有一个会导致DeprecationWarning
。像this one这样的其他问题都提到了这个警告,但我能找到的连续字符都没有。
是什么导致了这个警告,为什么它只出现在这种非常小的情况下?
编辑:这与行续行无关。出现这个错误的原因只是在某些时候与Django的runserver
有关。第一次运行runserver
时,未报告错误。但是,如果更改导致重新加载,则在重新加载程序运行时会报告错误。
发布于 2018-07-26 04:16:57
尝试使用命令列表:
command = [
"ffmpeg",
"-i", file_path,
"-vsync", "0",
"-q:v", "2",
"-vf", 'select="eq(pict_type,PICT_TYPE_I)"',
"-r", "30",
os.path.join(output_path, "frame%03d.jpg"),
]
然后调用它,而不使用shell=True
subprocess.run(command)
通过这样做,您可以获得多个优势:
.format
),因为只需将参数单独传递到列表即可。https://stackoverflow.com/questions/51526849
复制相似问题