gpt4 book ai didi

Python:将复杂 (ffmpeg) 参数传递给 Popen

转载 作者:行者123 更新时间:2023-11-30 22:53:52 26 4
gpt4 key购买 nike

这个ffmpeg Popen调用工作:

command = ['ffmpeg', '-y',
'-i', filename,
'-filter_complex', 'showwavespic',
'-colorkey', 'red',
'-frames:v', '1',
'-s', '800:30',
'-vsync', '2',
'/tmp/waveform.png']
process = sp.Popen( command, stdin=sp.PIPE, stderr=sp.PIPE)
process.wait()

但我需要使用'compand, showwavespic'这个逗号似乎阻止了执行。 I also need to pass all sorts of strange characters ,例如列,以及您可以在 CLI 调用中找到的所有内容。

如何传递复杂的参数?

最佳答案

这些只是常规的 Python 字符串。字符串值直接传递给 FFmpeg,无需 shell 进行任何解释。

因此,当您看到这样的命令行示例时,

ffmpeg -i input -filter_complex "showwavespic=s=640x120" -frames:v 1 output.png

首先,由于示例被传递到 shell,我们必须“撤消”shell 引用。

ffmpeg
-i
input
-filter_complex
showwavespic=s=640x120
-frames:v
1
output.png

然后,我们将其放入 Python 列表中。

command = [
'ffmpeg',
'-i',
'input',
'-filter_complex',
'showwavespic=s=640x120',
'-frames:v',
'1',
'output.png',
]

如您所见,逗号、空格和大多数其他字符的处理方式没有任何不同,因此您无需执行任何操作即可引用它们。主要的特殊字符是必须加引号的 \'、也必须加引号的控制字符以及根本不能使用的 NUL 字符。

更复杂的示例

在外壳中:

  ffmpeg -i in.mp4 -ac 2 -filter_complex:a '[0:a]aresample=8000,asplit[l][r]' \
-map '[l]' -c:a pcm_s16le -f data /tmp/plot-waveform-ac1 \
-map '[r]' -c:a pcm_s16le -f data /tmp/plot-waveform-ac2

在Python中:

command = [
'ffmpeg',
'-i', 'in.mp4',
'-ac', '2',
'-filter_complex:a', '[0:a]aresample=8000,asplit[l][r]',
'-map', '[l]',
'-c:a', 'pcm_s16le',
'-f', 'data',
'/tmp/plot-waveform-ac1',
'-map', '[r]',
'-c:a', 'pcm_s16le',
'-f', 'data',
'/tmp/plot-waveform-ac2',
]

如您所见,相当简单。 Python 只是更冗长一些,但更规则。

关于Python:将复杂 (ffmpeg) 参数传递给 Popen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38022828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com