我正在开发一个python脚本,通过ffmpeg对视频进行自定义转换。
我的问题是ffmpeg的执行在经过一些转换(通常是100mb的3-4 MB)后突然停止,并且出现无代码。
我正在使用 pexpect 库。目前我没有检查进度,但我会在不久的将来。对于这些问题FFMPEG and Pythons subprocess和Getting 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
当然我在命令行上尝试了相同的命令,但它运行正常。
有关可能发生的事情的任何线索?
答案 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)
感谢您的帮助。