博客
关于我
Python subprocess ffmpeg
阅读量:801 次
发布时间:2023-03-06

本文共 1496 字,大约阅读时间需要 4 分钟。

ffmpeg 实时视频流处理系统配置与实现

本文将介绍一个基于 ffmpeg 的实时视频流处理系统,详细阐述系统的配置方法及核心实现逻辑。

系统配置

1. 环境搭建

  • 操作系统:Windows 10/11
  • ffmpeg 版本:2018年发布的 fa0c9d6-win64-static 版本
  • 编程语言:Python 3.x
  • 依赖库
    • numpy
    • cv2
    • subprocess

2. 命令行参数设置

# 查看帮助信息ffmpeg -help# 查看视频流信息ffmpeg -log info input_file# 查看输出格式支持情况ffmpeg -formats

3. 视频流处理配置

  • 输入设置
    ffmpeg -i rtsp://admin:hik12345@192.168.3.175/cam/realmonitor?channel=1&subtype=1
  • 输出设置
    ffmpeg -i -y -f rawvideo -vcodec rawvideo -pix_fmt bgr24 -s 704*576 -f flv rtmp://192.168.3.56:1935/MyRed5/test

视频流处理核心实现

1. 读取视频流

import osimport sysimport numpy as npimport subprocess as sp# ffmpeg 执行器ffmpeg_bin = "E:/ffmpeg-20180227-fa0c9d6-win64-static/bin/ffmpeg.exe"# 命令行参数command_in = [    ffmpeg_bin,    '-i', input_file,    '-f', 'rawvideo',    '-s', f'{width}*{height}',    '-pix_fmt', 'bgr24',    '-']# 创建 ffmpeg 进程pipe_in = sp.Popen(command_in, stdout=sp.PIPE)

2. 视频流处理

def process_image(img):    cv2.imshow('实时视频', img)# 读取视频流while True:    raw_image = pipe_in.stdout.read(width * height * 3)        if len(raw_image) == 0:        break        # 转换为图像数组    image = np.fromstring(raw_image, dtype='uint8')    image = image.reshape((height, width, 3)).copy()        # 处理当前帧    process_image(image)        # 写入输出流    pipe_out.stdin.write(image.tobytes())    pipe_out.stdin.flush()        # 等待键盘输入    k = cv2.waitKey(25)    if k & 0xff == ord('q'):        break

技术实现总结

  • 视频流输入处理:通过 ffmpeg 读取实时视频流,设置参数如分辨率、像素格式等。
  • 图像处理:使用 OpenCV 库显示实时视频帧。
  • 流处理:将处理后的图像输出到指定 rtmp地址。

整个系统通过 ffmpeg 实现视频流的实时读取与处理,兼顾了高效性与实用性。

转载地址:http://ehafk.baihongyu.com/

你可能感兴趣的文章
Pytest框架环境切换实战教程!赶快收藏
查看>>
Pytest测试实战|Conftest.py详解
查看>>
Pytest测试框架快速搭建
查看>>
pytest测试框架:最强大的自动化测试工具,让测试变得轻松有趣
查看>>
Pytest自动化测试指定执行测试用例
查看>>
python - 如何并行化python numpy中的总和计算?
查看>>
Python - 如何解析 xml 响应并将元素值存储在变量中?
查看>>
Python - 安装了扩展的远程 Webdriver
查看>>
python - 将字符串中的日期与今天的日期进行比较
查看>>
python - 数据描述符(class 内置 get/set/delete方法 )
查看>>
Python - 根据值绘制彩色网格
查看>>
Python - 正则表达式在括号之间获取数字
查看>>
python binascii.Error: Incorrect padding
查看>>
Python bool() 函数能否为无效参数引发异常?
查看>>
Python C 程序子进程在“for line in iter“处挂起
查看>>
Python Celery:自动化测试平台定时任务必备的三方库
查看>>
python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令
查看>>
Python CONNECT 4 CHECK WIN函数
查看>>
python cos,Python cos(90)和cos(270)不是0
查看>>
python ctypes库中动态链接库加载方式
查看>>