python使用ffmpeg录制rtmp/m3u8推流视频并按ctrl+c实现优雅退出
实现原理:ffmpeg需要往子进程管道里面写入“q”才会实现优雅退出,保证视频文件不被损坏。其他杀死进程方法可能导致视频格式损坏!关闭程序的,红色按钮是强制停止,会导致视频格式损坏,所以最好在终端运行。运行python默认是无法实现。ctrl+c关闭录制。
·
一、上代码
实现原理:ffmpeg需要往子进程管道里面写入“q”才会实现优雅退出,保证视频文件不被损坏。其他杀死进程方法可能导致视频格式损坏!
download.py
from datetime import datetime
import subprocess
import re
def 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 = None
try:
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关闭程序的,红色按钮是强制停止,会导致视频格式损坏,所以最好在终端运行。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)