Skip to main content
 首页 » 编程设计

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

2025年05月04日7jirigala

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

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

我正在使用 pexpect 库。目前我不检查进度,但我会在不久的将来检查。看来我对这些问题使用 pexpect 是正确的 FFMPEG and Pythons subprocess和 Getting realtime output from ffmpeg to be used in progress bar (PyQt4, stdout) .这是我正在运行的命令(我已经检查过它正是这个命令)

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 但我也尝试过不使用它,结果最终还是一样。

我正在以这种方式运行 pexpect:

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

当然,我已经在命令行中尝试了相同的命令,而且效果很好。

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

请您参考如下方法:

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

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

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

我真的不喜欢使用带有仍未维护的小错误的代码,所以我按照 Albert 的建议使用 Popen 编写了代码。

我会等一段时间再决定是否要冒险(如果代码看起来可靠的话)。

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

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

感谢您的帮助。