如何终止具有特定持续时间的无限进程

时间:2014-01-03 08:33:06

标签: python ffmpeg

我试图批量运行数百个命令。

所以我必须让每个命令在一段时间内终止,然后执行下一个命令。

但是,该命令将被终止,因为timeout选项参数不适用于ffmpeg

所以我想知道是否有任何可以在一段时间内终止命令的解决方法。

我可以通过'q'

类型终止命令(在前台运行)
def get_video_clip(self, rtsp_link="rtsp://localhost:554", f_name="sample", period=5):
        cmd = "ffmpeg -i {0} -acodec copy -vcodec copy {1}.mp4 -t {2}".format(  rtsp_link,
                                                                                f_name,
                                                                                period
                                                                                )
        ap(cmd)

        os.popen(cmd)
        pass

我尝试通过rtsp捕获流式传输并将剪辑持续时间限制在3 sec

之下

但该选项不起作用。 ffmpeg将不再被终止。

是否有解决问题的解决方法。

因为我必须使用Python脚本批量运行数百个类似的命令。

ffmpeg -loglevel verbose   -i rtsp://172.19.1.42/live.sdp -acodec copy -vcodec copy  c0_s1_h264_640x480_30_vbr_500_99_40000000.mp4 -timeout 3 -y
  

$ ffmpeg -h ffmpeg版本1.2.4版权所有(c)2000-2013 FFmpeg   开发人员于2013年11月22日11:59:59使用Apple LLVM 5.0版本构建   (clang-500.2.79)(基于LLVM 3.3svn)

https://gist.github.com/poc7667/8234701

的详细日志

1 个答案:

答案 0 :(得分:0)

正如@ThiefMaster所提到的,您可以使用subprocess module,它提供poll(检查进程是否终止)和communicate方法(将数据发送到子进程)标准输入)。

这些方面的东西:

# Starts encoding in a subprocess
proc = subprocess.Popen(['ffmpeg', '-i' 'myinput', 'myoutput'])

duration = 3
sleeptime = 0
while proc.poll() is None and sleeptime < 3: 
    # Wait for the specific duration or for the process to finish
    sleep(1)
    sleeptime += 1

# If process is not terminated
if proc.poll() is None:
    # Cancels process, waits for it to complete
    proc.communicate("q")

如果子进程尚未在指定的duration内完成,将取消该进程。