2012-11-23 48 views
2

我正在处理一个通过ffmpeg自定义转换视频的python脚本。pexpect.run()在结束ffmpeg之前终止,无需完成转换

我的问题是ffmpeg的执行在一个无退出代码的位转换后(通常为100mb的3-4mb)突然停止。我正在使用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' 

我使用不错的命令,但我自己也尝试没有它,其结果最终是相同的。

我跑Pexpect的是这样的:

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

当然我也试过在命令行上相同的命令,它工作正常。

任何线索可能发生什么?

+1

为什么选择pexpect?如果从子流程使用Popen会怎么样? – Albert

+0

@albert我会试试它知道。我不太喜欢这个解决方案,因为在“下一次迭代”中,我应该使用pexpect来检查操作的进度。但我会尝试并在 – Davisein

+0

中发布结果。我将一直工作到转换结束,但它似乎正在工作。但我仍然不太喜欢这个解决方案,我可能会在几周内面临同样的问题... – Davisein

回答

0

问题最终成为关于超时的pexpect运行函数中的一个错误。我发现在我之前所报告的bug(是的,我忘了检查;))

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

可悲的错误是真的老了,并解释了如何解决小虫子。作为一种解决方法,我可以用spawn重写我的代码。

我不太喜欢使用代码的想法,这些代码仍然没有维护,因此我使用Popen编写了代码,就像Albert建议的一样。

我会等待一段时间,以选择与pexpect(如果代码似乎可靠)的机会。

为了记录在案,这里是我的工作代码:

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

感谢您的帮助。

相关问题