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

ffmpeg与opencv-python处理视频

安装

opencv

pip install opencv-python

FFmpeg

1.下载 FFmpeg

  • 访问FFmpeg官方网站。
  • 选择 “Windows builds from gyan.dev” 链接,这会带您到一个包含最新版本 FFmpeg Windows 构建的页面。
  • 选择一个适合您系统的版本(例如,32位或64位),并下载 ZIP 文件。

2.解压文件

  • 将下载的 ZIP 文件解压到选择的文件夹中。

3.添加 FFmpeg 到您的环境变量

  • 打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 环境变量。
  • 在 “系统变量” 部分,找到并选择变量 “Path”,然后点击 “编辑”。
  • 点击 “新建” 并添加 FFmpeg bin 目录的路径(这是您之前解压的文件夹中的 bin 文件夹)。
  • 点击 “确定” 保存更改。

4.验证安装

  • 打开命令提示符(CMD)并输入 ffmpeg -version。
  • 如果安装成功,它将显示 FFmpeg 的版本信息。

视频嵌入

ffmpeg

ffmpeg -i pressure_ratate.avi -i line_chat_rotate.avi -filter_complex "[1:v]scale=iw*0.28:ih*0.35[second_resized];[0:v][second_resized]overlay=main_w-overlay_w:main_h-overlay_h" -codec:a copy rotate.avi
  • ffmpeg: 这是调用 ffmpeg 工具的命令。ffmpeg 是一个非常强大的多媒体处理工具,用于处理视频和音频文件。
  • -i pressure_ratate.avi: 这个参数 -i 用于指定输入文件,这里第一个输入文件是 pressure_ratate.avi。
  • -i line_chat_rotate.avi: 这里使用第二个 -i 参数来指定第二个输入文件 line_chat_rotate.avi。
  • -filter_complex: 这个参数用于应用复杂的过滤器图。在这种情况下,它用于将两个视频合并为一个。
  • [1:v]scale=iw0.28:ih0.35[second_resized];: 这部分是过滤器图的一个子部分。[1:v] 指的是第二个输入文件(line_chat_rotate.avi)的视频流。scale=iw0.28:ih0.35 是缩放过滤器,用于将视频的宽度和高度分别缩放到原始尺寸的 28% 和 35%。缩放后的视频流被标记为 [second_resized]。
  • [0:v][second_resized]overlay=main_w-overlay_w:main_h-overlay_h: 这是过滤器图的另一个子部分。它使用了 overlay 过滤器来将 [second_resized](即缩放后的第二个视频)叠加到第一个视频流(pressure_ratate.avi)上。叠加位置设置为 main_w-overlay_w:main_h-overlay_h,这意味着第二个视频将被放置在第一个视频的右下角
  • -codec:a copy: 这个参数指定要复制音频流而不进行重新编码。
  • rotate.avi: 这是输出文件的名称。

opencv

import cv2
import os

# 路径设置
line_chat_video_path = r'vedio1.avi'
pressure_video_path = r'vedio2.avi'
output_video_path = r'output.avi'

# 读取视频
line_chat_cap = cv2.VideoCapture(line_chat_video_path)
pressure_cap = cv2.VideoCapture(pressure_video_path)

# 获取pressure视频的属性
fps = pressure_cap.get(cv2.CAP_PROP_FPS)
width = int(pressure_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(pressure_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 创建视频写入器
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))

# 计算叠加视频的大小和位置
scale_factor = 0.4  # 可以根据需要调整缩放因子
small_width = int(width * scale_factor)
small_height = int(height * scale_factor)
pos_x = width - small_width
pos_y = height - small_height

while pressure_cap.isOpened() and line_chat_cap.isOpened():
    ret1, frame1 = pressure_cap.read()
    ret2, frame2 = line_chat_cap.read()

    if not ret1 or not ret2:
        break

    # 缩放 line_chat 视频的帧
    frame2 = cv2.resize(frame2, (small_width, small_height))

    # 将 line_chat 的帧叠加到 pressure 的帧
    frame1[pos_y:pos_y+small_height, pos_x:pos_x+small_width] = frame2

    # 写入帧到输出视频
    out.write(frame1)

# 释放资源
pressure_cap.release()
line_chat_cap.release()
out.release()

图片合成视频

import cv2
import os

images = []

path= r'./images'
for i in range(201):
    s = 'image{t}_0.png'.format(t=i)
    images.append(path+ '/' + s)

video_name = r'vedio.avi'

# 设定帧率
fps = 2

# 读取第一张图片确定视频分辨率
frame = cv2.imread(images[0])
height, width, layers = frame.shape

# 创建视频写入器
fourcc = cv2.VideoWriter_fourcc(*'XVID')
video = cv2.VideoWriter(video_name, fourcc, fps, (width, height))

# 将图片写入视频
for image in images:
    video.write(cv2.flip(cv2.imread(image),1))

# 释放视频写入器
video.release()

http://www.kler.cn/a/160274.html

相关文章:

  • IP数据云 识别和分析tor、proxy等各类型代理
  • C++STL容器——map和set
  • Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
  • 408模拟卷较难题(无分类)
  • Flink1.19编译并Standalone模式本地运行
  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • 聚观早报 |东方甄选将上架文旅产品;IBM首台模块化量子计算机
  • 准确!!!在 CentOS 8 上配置 PostgreSQL 14 的主从复制
  • 2024年江苏省职业院校技能大赛信息安全管理与评估 第三阶段学生组(样卷)
  • Qt进程和线程
  • B 站基于 StarRocks 构建大数据元仓
  • 后端返回数据前端保留两位小数
  • 8-tornado中模板的使用(通过字符串返回、通过模板Template返回、通过模板render返回)、模板案例
  • Elasticsearch,Kibana集成,x-pack鉴权配置
  • Pandas 打开有密码的Excel
  • Python中函数添加超时时间,Python中signal使用
  • Linux中的输入输出重定向
  • 城市之眼:数据可视化在智慧城市的角色
  • AWS基于x86 vs Graviton(ARM)的RDS MySQL性能对比
  • MS SQL Table与JSON转换
  • docker基本管理和相关概念
  • 获取网络ppt资源
  • Terraform实战(一)-Terraform介绍与安装部署
  • C语言——二级指针
  • Day46力扣打卡
  • *p++和(*p)++的区别