python - 将变量发送到带有空格的子进程调用-python 2.7

标签 python python-2.7 ffmpeg subprocess

我想将 ffmpeg 选项添加到变量中,然后在子进程调用中使用它。如果变量包含一个单词,一切都很好,但如果它包含多个单词,我会得到错误。我正在处理一个更大的脚本,我需要为某些编解码器提供额外的选项,例如这个。我怎样才能得到这个工作?

以下内容非常适合我:

import subprocess
import sys

video_codec = 'libx264'
output = sys.argv[1] + '.mkv'
subprocess.call(['ffmpeg',
            '-i',sys.argv[1], 
            '-c:v',video_codec,
            '-c:a','copy',         
            output])    

一旦我向 video_options 引入新的选项/空间像这样:
video_codec = "'libx264', '-pix_fmt', 'yuv420p'"

我收到一个 ffmpeg 错误:
Unknown encoder ''libx264', '-pix_fmt', 'yuv420p''

如果我删除双引号并使用
video_codec = 'libx264', '-pix_fmt', 'yuv420p'

我得到一个python错误: Traceback (most recent call last): File "testo.py", line 10, in <module> output])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 524, in call return Popen(*popenargs, **kwargs).wait() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 711, in __init__ errread, errwrite) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1308, in _execute_child raise child_exception TypeError: execv() arg 2 must contain only strings

最佳答案

Eric Renouf 是对的,但不要创建字符串,它不太可靠。你只需要像这样分解你的配置:

video_codecs = ['libx264', '-pix_fmt', 'yuv420p']
output = sys.argv[1] + '.mkv'
cmd_list = ['ffmpeg',
        '-i',sys.argv[1], 
        '-c:v']
cmd_list += video_codecs
cmd_list += ['-c:a','copy',         
        output]
subprocess.call(cmd_list)

我不确定顺序是否重要,所以我将其保留在这里,如果顺序无关紧要,您可以将最后一行与第三行结合起来。

关于python - 将变量发送到带有空格的子进程调用-python 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33894443/

相关文章:

带有 Gevent 池的 Python 脚本,消耗大量内存,锁定

python - 在 python 中泡菜和转储

python 的生命周期

php - 如何在 php 中使用 FFMPEG 将 flv 格式转换为 .mp4 格式

python - 只计算一次属性并多次使用结果(不同的方法)

python - PyTorch - 沿新维度的张量乘法

python - 如何将网页保存到其地址中包含 .aspx 的文件

python - 从Python中的嵌套列表中提取字符串

objective-c - 如何在 OS X 上的应用程序资源中运行 CLI?我使用 Objective-C 和 Xcode

opencv - 如何使用 ffmpeg 和 opencv 编辑帧的内容?