2

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

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

我正在使用pexpect库。目前我不检查进度,但我会在不久的将来。似乎我对这些问题FFMPEG 和 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'

我用得很好,但我也试过没有它,结果是一样的。

我以这种方式运行 pexpect:

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

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

关于可能发生什么的任何线索?

4

1 回答 1

0

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

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

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

我真的不喜欢使用带有仍然未维护的琐碎错误的代码的想法,因此我按照 Albert 的建议使用 Popen 编写了代码。

我将等待一段时间来选择使用 pexpect 去冒险(如果代码看起来可靠的话)。

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

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

谢谢您的帮助。

于 2012-11-24T18:32:43.420 回答