python使用ffmpeg录制rtmp/m3u8推流视频并按ctrl+c实现优雅退出
一、上代码
实现原理:ffmpeg需要往子进程管道里面写入“q”才会实现优雅退出,保证视频文件不被损坏。其他杀死进程方法可能导致视频格式损坏!
download.py
from datetime import datetime
import subprocess
import redef download_video():playUrl = 'rtmp://xxx.xxx.com/record/xxx'now_time = datetime.now().strftime('%Y_%m_%d__%H_%M_%S')output_file = now_time+".mp4"output_file = re.sub(r'[\\/:*?"<>|]', '', output_file)ffmpeg_command = ["ffmpeg","-i", playUrl,"-c", "copy","-f", "mp4",output_file]process = Nonetry:process = subprocess.Popen(ffmpeg_command, stdin=subprocess.PIPE)process.wait()except KeyboardInterrupt:print("检测到手动中断,正在优雅停止 ffmpeg...")process.stdin.write('q'.encode("GBK"))process.communicate()process.kill()except Exception as e:print(f"录制出错: {e}")if __name__ == '__main__':download_video()
cmd执行录制
python download.py
ctrl+c关闭录制
注意事项:在
pychram
运行python默认是无法实现ctrl+c
关闭程序的,红色按钮是强制停止,会导致视频格式损坏,所以最好在终端运行。