当前位置: 首页 > news >正文

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

一、上代码

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

download.py

from datetime import datetime
import subprocess
import redef 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 = Nonetry: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执行录制

python download.py

在这里插入图片描述

ctrl+c关闭录制

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

http://www.lryc.cn/news/604162.html

相关文章:

  • Apache Ignite 的分布式队列(IgniteQueue)和分布式集合(IgniteSet)的介绍
  • windows下Docker安装路径、存储路径修改
  • Element Plus常见基础组件(一)
  • 网络协议——MPLS(多协议标签转发)
  • Day23-二叉树的层序遍历(广度优先搜素)
  • 基于dcmtk的dicom工具 第九章 以json文件或sqlite为数据源的worklist服务(附工程源码)
  • Mqttnet的MqttClientTlsOptions.CertificateValidationHandler详解
  • SQL 怎么学?
  • SQLAlchemy 全方位指南:从入门到精通
  • Linux初学者在CentOS 7虚拟机中rpm、yum、dnf的操作练习
  • PCIE4.0/5.0/DDR4/DDR5使用以及布局布线规则-集萃
  • 14、distance_object_model_3d算子
  • 粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题
  • 三相四桥臂SVPWM控制及电机模型
  • Excel制作滑珠图、哑铃图
  • CSRF漏洞原理及利用
  • 子数组和 问题汇总
  • Mysql缓冲池和LRU
  • Accessibility Insights for Windows 使用教程
  • Adv. Sci. 前沿:非零高斯曲率3D结构可逆转换!液晶弹性体多级形变新策略
  • Javaweb————HTTP请求头属性讲解
  • [leetcode] 电话号码的排列组合
  • Vue El 基础
  • PyTorch 数据类型和使用
  • 第二课 P-MOS管应用
  • LRU(Least Recently Used)原理及算法实现
  • 【SQL】Windows MySQL 服务查询启动停止自启动(保姆级)
  • DAY27 函数专题2:装饰器
  • Android 解决键盘遮挡输入框
  • 老年护理实训室建设方案:打造安全、规范、高效的实践教学核心平台