我有一个在我的网络服务器上运行的 python 脚本。main 函数被调用,然后当它返回时它只是休眠几秒钟并再次被调用。它的目的是挑选用户添加的任何新上传的视频并将它们转换为 webm,将中间帧拉出作为图像和一堆其他时髦的东西。我正在使用对 ffmpeg 的外部调用。下面的代码片段显示了我如何称呼它。
duration = output[durationIndex+10:durationIndex+18]
durationBits = duration.split(":")
lengthInSeconds = (int(durationBits[0])*60*60) + (int(durationBits[1])*60) + (int(durationBits[2]))
child = subprocess.Popen(["ffmpeg","-y","-i",sourceVideo,"-f","mjpeg","-vframes","1","-ss",str(lengthInSeconds/2),destination], shell=True, stderr=subprocess.PIPE)
output = ""
while True:
out = child.stderr.read(1)
if out == '' and child.poll() != None:
break
if out != '':
output += out
updateSQL = "update `videos_graduatevideo` set thumbnail = '" + str(destination) + "' where `original_video` = '" + sourceVideo + "'"
cursor.execute(updateSQL)
该脚本在 Windows 机器 atm 上运行,但我可能会在开发完成后将其部署在 Unix 系统上。
问题是。我需要这个 python 脚本来继续运行。如果 ffmpeg 出现问题并且我的脚本挂起,则用户上传的视频将处于“待处理”状态,直到我去戳 python 脚本。我知道我拥有的某个 mov 文件使 ffmpeg 无限期地挂起。有没有办法可以检查一个进程已经运行了多长时间,如果它已经运行了太长时间,就将其终止?