我试图通过调用子进程ffmpeg使用python为视频添加水印。我的代码:
command = "C:\\VidMaker\\source\\ffmpeg.win32.exe -i C:\\VidMaker\\kq"+str(i)+".mp4 -i C:\\VidMaker\\1.png -filter_complex" "[0:v]setsar=sar=1[v];[v][1]blend=all_mode='overlay':all_opacity=0.7" "-vcodec libx264 C:\VidMaker\\Res"+str(i)+".mp4"
subprocess.check_call(command, shell = False)
结果是:
Unrecognized option 'filter_complex[0:v]setsar=sar=1[v];[v][1]blend=all_mode='overlay':all_opacity=0.7-movflags'.
Error splitting the argument list: Option not found
Traceback (most recent call last):
File "C:\VidMaker\add.py", line 10, in <module>
subprocess.check_call(command, shell = False)
File "C:\Python27\lib\subprocess.py", line 186, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'C:\VidMaker\source\ffmpeg.win32.exe -n -i C:\VidMaker\kq2.mp4 -i C:\VidMaker\1.png -filter_complex[0:v]setsar=sar=1[v];[v][1]blend=all_mode='overlay':all_opacity=0.7-movflags +faststart C:\VidMaker\Res2.mp4' returned non-zero exit status 1
[Finished in 0.4s with exit code 1]
edit1:没有选项就运行正常:
command = "C:\\VidMaker\\source\\ffmpeg.win32.exe -i C:\\VidMaker\\kq"+str(i)+".mp4 -i C:\\VidMaker\\1.png -filter_complex overlay=10:10 C:\VidMaker\\Res"+str(i)+".mp4"
该选项会发生什么以及如何解决?谢谢!
edit2:我需要这样打电话,因为我的VPS无法像我的电脑那样运行,在我的电脑中它成功运行:
subprocess.call(['ffmpeg',
'-i', 'funvi 155.mp4',
'-i', '1.png',
'-filter_complex', "[1:v]format=argb,geq=r='r(X,Y)':a='0.15*alpha(X,Y)'[zork]; [0:v][zork]overlay",
'-vcodec', 'libx264',
'myresult6.mp4'])
答案 0 :(得分:1)
它连接你的字符串文字:
"A" "B"
变为“AB”,而非“A B”,不添加空格。因此,要么在命令行参数之间使用带有空格的单个带引号的字符串,要么找到另一种存储命令行参数的方法,例如:在列表中,您可以将该列表传递给子进程,或者在您准备好运行它时将其传递给它。
很抱歉在电话中说道。