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

相关推荐
程序员的账号2 分钟前
《Python工匠》资源分享
人工智能·python·深度学习·机器学习
I Am a robert girl3 分钟前
打破音频生态壁垒:用 WinAirCast 把 Windows 声音塞进 HomePod
windows·音视频·跨平台开发·音频串流·airplay 2·homepod
揽秀亭长5 分钟前
视频转脚本有哪些技术路线?三种常见方案对比分析
人工智能·音视频
随性而行3607 分钟前
企业微信二次开发如何接入大模型工具?API接口实现智能任务调用的技术思路
java·前端·人工智能·python·微信·机器人·企业微信
2601_9669496514 分钟前
量化回测中分钟数据应该如何保存?从文件到数据仓库的工程化设计
开发语言·python·pandas·量化交易·股票数据·quantdash
huisheng_qaq24 分钟前
【Python基础篇-05】深入理解python的异常处理与文件读写
python·异常处理·文件读写
Zhou14113628 分钟前
SpringMVC_02_注解开发实战
开发语言·windows·python
VidDown40 分钟前
从一堆脚本到能维护的系统:视频处理管道的工程化
服务器·ffmpeg·音视频·视频编解码
禹凕1 小时前
机器学习之数据清洗(Machine Learning about Data Cleaning)
人工智能·爬虫·python·机器学习·数据挖掘
浩瀚地学1 小时前
deepagents学习打卡day07
经验分享·笔记·python·学习·agent