ffmpeg | sed命令的subprocess.call格式?

时间:2017-03-05 14:25:53

标签: python sed ffmpeg subprocess

这些是我想在python

中使用subprocess.call执行的命令
 1. ffmpeg -i filename 2>&1 | sed -n "s/.*, \(.*\) fp.*/\1/p"

  filePath = frames/FRAME%05d.png
 2. avconv -r 24 -i filePath -vf 'scale=trunc(iw/2)*2:trunc(ih/2)*2' -s 1920x1080 -c:v libx264 outPath

我还没到第二个,但这是我尝试的第一个

subprocess.call(['ffmpeg', '-i', inputV , '2','>','&1', '|', ' sed', '-n', '"s/.*, \(.*\) fp.*/\1/p"'])

并且这是错误

[NULL @ 0x915ce0] Unable to find a suitable output format for '2'
2: Invalid argument

我也不确定filePath变量赋值,因为值包含通配符

1 个答案:

答案 0 :(得分:1)

Quickfix:添加shell=True选项,因为您正在使用shell功能。

Longfix:编写一个正确的subprocess.Popen命令,摆脱sed:直接在python中执行:

import re
r = re.compile(".*, (.*) fp.*")
p=subprocess.Popen(['ffmpeg', '-i', inputV],stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
while True:
  l = p.readline()
  if not l:
      break  # end of process
  s = r.sub(l,r"\1")
  if l!=s:    # substitution worked, print it
     print(s)
rc = p.wait()  # get return code

因此您没有使用shell=True,并且在python中执行sed过滤器:您的代码不再需要sed

stderr=subprocess.STDOUT负责stderr

中的stdout重定向