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关闭程序的,红色按钮是强制停止,会导致视频格式损坏,所以最好在终端运行。

相关推荐
花酒锄作田10 小时前
使用 pkgutil 实现动态插件系统
python
前端付豪14 小时前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽15 小时前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战15 小时前
Pydantic配置管理最佳实践(一)
python
阿尔的代码屋21 小时前
[大模型实战 07] 基于 LlamaIndex ReAct 框架手搓全自动博客监控 Agent
人工智能·python
AI探索者2 天前
LangGraph StateGraph 实战:状态机聊天机器人构建指南
python
AI探索者2 天前
LangGraph 入门:构建带记忆功能的天气查询 Agent
python
FishCoderh2 天前
Python自动化办公实战:批量重命名文件,告别手动操作
python
躺平大鹅2 天前
Python函数入门详解(定义+调用+参数)
python
曲幽2 天前
我用FastAPI接ollama大模型,差点被asyncio整崩溃(附对话窗口实战)
python·fastapi·web·async·httpx·asyncio·ollama