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

相关推荐
鸡哥爱技术3 小时前
Django入门笔记
笔记·python·django
猫耳君4 小时前
汽车网络安全 CyberSecurity ISO/SAE 21434 测试之一
python·安全·网络安全·汽车·iso/sae 21434·cybersecurity
勘察加熊人4 小时前
python将pdf转txt,并切割ai
数据库·python·pdf
IMER SIMPLE5 小时前
人工智能-python-深度学习-神经网络VGG(详解)
人工智能·python·深度学习
Dersun5 小时前
python学习进阶之异常和文件操作(三)
开发语言·python·学习·json
Juchecar5 小时前
通过“单词补全”演示 Transformer 原理(Python代码可运行)
人工智能·python
c8i5 小时前
关于python中的钩子方法和内置函数的举例
python
动能小子ohhh6 小时前
AI智能体(Agent)大模型入门【2】--基于llamaindx部署本地的聊天模型。
人工智能·python·aigc·ai编程
MediaTea6 小时前
Python 第三方库:SymPy(符号计算工具)
开发语言·python·数学建模
Goona_6 小时前
PyQt数字转大写金额GUI工具开发及财务规范实现
python·小程序·交互·pyqt