小编Jas*_*eil的帖子

从ffmpeg获取实时输出以在进度条中使用(PyQt4,stdout)

我看了很多问题,但仍然无法弄清楚这一点.我正在使用PyQt,我希望运行ffmpeg -i file.mp4 file.avi并获取输出,因为我可以创建一个进度条.

我看过这些问题: ffmpeg可以显示进度条吗? 从子进程实时捕获stdout

我能够使用以下代码查看rsync命令的输出:

import subprocess, time, os, sys

cmd = "rsync -vaz -P source/ dest/"
p, line = True, 'start'


p = subprocess.Popen(cmd,
                     shell=True,
                     bufsize=64,
                     stdin=subprocess.PIPE,
                     stderr=subprocess.PIPE,
                     stdout=subprocess.PIPE)

for line in p.stdout:
    print("OUTPUT>>> " + str(line.rstrip()))
    p.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

但是当我更改命令时,ffmpeg -i file.mp4 file.avi我没有收到任何输出.我猜这与stdout/output缓冲有关,但是我不知道如何读取看起来像的行

frame=   51 fps= 27 q=31.0 Lsize=     769kB time=2.04 bitrate=3092.8kbits/s
Run Code Online (Sandbox Code Playgroud)

我可以用来计算进度.

有人可以告诉我一个如何从ffmpeg获取此信息到python的示例,无论是否使用PyQt(如果可能)


编辑: 我最终使用jlp的解决方案,我的代码看起来像这样:

#!/usr/bin/python
import pexpect

cmd = 'ffmpeg -i file.MTS file.avi'
thread = pexpect.spawn(cmd)
print "started %s" % cmd …
Run Code Online (Sandbox Code Playgroud)

python subprocess ffmpeg stdout pyqt

22
推荐指数
2
解决办法
2万
查看次数

标签 统计

ffmpeg ×1

pyqt ×1

python ×1

stdout ×1

subprocess ×1