pexpect.run()在结束ffmpeg之前终止而不完成转换

时间:2012-11-23 11:19:44

标签: python ffmpeg pexpect

我正在开发一个python脚本,通过ffmpeg对视频进行自定义转换。

我的问题是ffmpeg的执行在经过一些转换(通常是100mb的3-4 MB)后突然停止,并且出现无代码。

我正在使用 pexpect 库。目前我没有检查进度,但我会在不久的将来。对于这些问题FFMPEG and Pythons subprocessGetting realtime output from ffmpeg to be used in progress bar (PyQt4, stdout),我似乎正确地使用了pexpect。这是我正在运行的命令(我已经检查过它就是这个命令)

nice ffmpeg -i '/full/path' -s 640x360 -strict experimental -vcodec libx264
   -f mp4 -  coder 0 -bf 0 -refs 1 -flags2 -wpred-dct8x8 -level 30 -crf 26
   -bufsize 4000k -maxrate 350k -preset medium -acodec libvo_aacenc
   -ar 48000.0 -ab 128K -threads 2 -y '/full/path/out'

我正在使用 nice ,但我也试过没有它,结果最终都是一样的。

我正在以这种方式运行:

output, exit = pexpect.run(self.command(), withexitstatus=True,\
                                   logfile=logfile)
print output
print exit

当然我在命令行上尝试了相同的命令,但它运行正常。

有关可能发生的事情的任何线索?

1 个答案:

答案 0 :(得分:0)

问题最终成为pexpect run函数中有关超时的错误。我发现在我之前报告的错误(是的,我忘了检查;))

http://sourceforge.net/tracker/?func=detail&aid=3316509&group_id=59762&atid=492077

可悲的是,这个bug真的很老了,它解释了如何解决这个小bug。作为一种解决方法,我可以使用spawn重写我的代码。

我真的不喜欢使用仍然没有维护的琐碎错误的代码,所以我使用Popen写了代码,就像Albert建议的那样。

我会等一段时间选择抓住pexpect的机会(如果代码似乎可靠)。

记录中,这是我的工作代码:

    output = file(LOG_FILE, 'a')
    args = shlex.split(self.command_video())
    return subprocess.call(args, stdout=output, stderr=output)

感谢您的帮助。