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

相关推荐
爱钓鱼的程序员小郭几秒前
阿里云自动配置安全组IP白名单
python·tcp/ip·安全·阿里云
梦醒过后说珍重3 分钟前
PyTorch 工程实践:如何优雅地将 ViT 大模型封装为即插即用的感知损失(Perceptual Loss)
python·深度学习
爱钓鱼的程序员小郭4 分钟前
腾讯云 vs 阿里云 视频直播费用分析报告
阿里云·音视频·腾讯云
超越自我肖7 分钟前
python--函数返回值之None类型
python
Oueii9 分钟前
构建一个基于命令行的待办事项应用
jvm·数据库·python
在屏幕前出油12 分钟前
04. FastAPI——响应类型
开发语言·后端·python·pycharm·fastapi
Roselind_Yi12 分钟前
技术拆解:《从音频到动效:我是如何用 Web Audio API 拆解音乐的?》
前端·javascript·人工智能·音视频·语音识别·实时音视频·audiolm
Black蜡笔小新15 分钟前
国标GB28181视频汇聚平台EasyCVR智慧社区全场景可视化管控与智能安防实践
音视频
Ivanqhz17 分钟前
寄存器分配的核心函数 allocate
java·开发语言·后端·python·rust
2501_9454235425 分钟前
如何为开源Python项目做贡献?
jvm·数据库·python