我一直试图传递一个命令在shell中工作,只在文本双引号在命令行中的“concat:file1 | file2”参数ffmpeg。
我不能让这个工作从python与subprocess.Popen()。任何人都有一个想法如何传递报价到子过程。
这里是代码:
command = "ffmpeg -i "concat:1.ts|2.ts" -vcodec copy -acodec copy temp.mp4" output,error = subprocess.Popen(command,universal_newlines=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()
当我这样做,ffmpeg将不会采取任何其他方式,而不是引号周围的连接区。有没有办法成功地传递这行到subprocess.Popen命令?
我建议使用列表形式的调用,而不是引用的字符串版本:
command = ["ffmpeg","-i","concat:1.ts|2.ts","-vcodec","copy","-acodec","temp.mp4"] output,error = subprocess.Popen( command,stderr=subprocess.PIPE).communicate()
这更准确地表示将要传递到结束进程的准确的参数集,并且消除了对shell引用的需要。
也就是说,如果你绝对要使用纯字符串版本,只需使用不同的引号(和shell = True):
command = 'ffmpeg -i "concat:1.ts|2.ts" -vcodec copy -acodec copy temp.mp4' output,shell=True,stderr=subprocess.PIPE).communicate()