python使用ffmpeg录制rtmp/m3u8推流视频并按ctrl+c实现优雅退出

一、上代码

实现原理:ffmpeg需要往子进程管道里面写入"q"才会实现优雅退出,保证视频文件不被损坏。其他杀死进程方法可能导致视频格式损坏!
download.py

python 复制代码
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执行录制

bash 复制代码
python download.py

ctrl+c关闭录制
注意事项:在pychram运行python默认是无法实现ctrl+c关闭程序的,红色按钮是强制停止,会导致视频格式损坏,所以最好在终端运行。

相关推荐
马良神笔13 分钟前
2026 年Rag最近技术前沿总结
后端·python·django
不像程序员的程序媛41 分钟前
maven基础
python·pycharm·maven
xiaogai_gai2 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
benchmark_cc2 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu2 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
估值探索者3 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
田里的水稻4 小时前
PyTorch_Dataloader\TensorBoard---数据加载与可视化
人工智能·pytorch·python·神经网络·机器学习
Dmz丶4 小时前
前端转 AI 100 天 Day 27:Docker 容器化——从“我电脑能跑“到“到处能跑“
python
卿卿的产品经理日记4 小时前
【AI产品经理实战】Day 38|try-except 踩坑实录:报错是数据
人工智能·笔记·python·学习·产品经理
全栈练习生4 小时前
文档智能与实践
python·ai