我试图批量运行数百个命令。
所以我必须让每个命令在一段时间内终止,然后执行下一个命令。
但是,该命令将被终止,因为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)
答案 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
内完成,将取消该进程。