擅长:python、mysql、java
<p>您应该使用本机python方法来获得过滤的<code>ffmpeg</code>输出:</p>
<pre><code>ffmpeg -i D:\devaraj\KPIX_test.ts -vf "blackframe" -an -f null - 2>&1|find "Parsed"
</code></pre>
<p>要做到这一点,通常需要<code>check_output</code>,但是这个特定的示例提供了所需的信息,但是退出时返回非零代码(不过,使用python3.5中的<code>run</code>也可以)</p>
<p>所以我将使用<code>Popen</code>。它变成(作为列表,没有所有重定向和过滤器),然后从流程标准输出读取所有输出:</p>
<pre><code>p = subprocess.Popen(["ffmpeg","-i",r"D:\devaraj\KPIX_test.ts",
"-vf","blackframe","-an","-f","null"],stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = p.stdout.read()
</code></pre>
<p>您不需要<code>shell=True</code>,它将错误和输出流合并到<code>output</code>变量中。你知道吗</p>
<p>现在<code>output</code>包含ffmpeg命令的输出。让我们解码它(得到一个字符串)并拆分行,检查字符串是否在行中:</p>
<pre><code>for line in output.decode().splitlines(): # python 2: output.splitlines()
if "Parsed" in line:
print(line.rstrip()) # or store it in a file, string, whatever
</code></pre>
<p>对于输出更多文本的进程,最好在<code>p.stdout</code>上迭代,而不是读取全部内容(占用的内存更少,允许实时回显到控制台)</p>