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

Python 实现从 MP4 视频文件中平均提取指定数量的帧

Python 实现从 MP4 视频文件中平均提取指定数量的帧

flyfish

从 MP4 视频文件中平均提取指定数量的帧,并将这些帧保存为 JPEG 图像文件。它支持处理单个 MP4 文件,也能遍历指定文件夹中的所有 MP4 文件并对每个文件进行帧提取操作。保存的图像文件名包含原视频文件名和帧序号,方便识别。

import cv2
import os
import sysdef extract_frames_from_video(video_path, n, output_folder):# 打开视频文件cap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"无法打开视频文件: {video_path}")return# 获取视频的总帧数total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))if total_frames < n:print(f"视频 {video_path} 的帧数少于要提取的帧数,无法完成提取。")cap.release()return# 计算每帧之间的间隔frame_interval = (total_frames - 1) // (n - 1) if n > 1 else 0video_name = os.path.splitext(os.path.basename(video_path))[0]for i in range(n):frame_index = i * frame_interval# 定位到指定帧cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)ret, frame = cap.read()if ret:frame_filename = os.path.join(output_folder, f'{video_name}_frame_{i}.jpg')cv2.imwrite(frame_filename, frame)print(f"从 {video_path} 提取的第 {i} 帧已保存为 {frame_filename}")else:print(f"无法从 {video_path} 提取第 {i} 帧")# 释放视频捕获对象cap.release()def extract_frames(path, n, output_folder):if not os.path.exists(output_folder):os.makedirs(output_folder)if os.path.isfile(path):if path.lower().endswith('.mp4'):extract_frames_from_video(path, n, output_folder)else:print(f"{path} 不是有效的 MP4 文件。")elif os.path.isdir(path):for root, _, files in os.walk(path):for file in files:if file.lower().endswith('.mp4'):video_path = os.path.join(root, file)extract_frames_from_video(video_path, n, output_folder)else:print(f"{path} 不是有效的文件或文件夹路径。")if __name__ == "__main__":path = '.' if len(sys.argv) < 2 else sys.argv[1]n = 2 if len(sys.argv) < 3 else int(sys.argv[2])output_folder = 'output' if len(sys.argv) < 4 else sys.argv[3]extract_frames(path, n, output_folder)

使用方法

代码运行

将上述代码保存为 extract_frames.py 文件,然后在命令行中运行该脚本,有以下几种使用方式:

1. 使用默认参数

若不提供任何参数,代码会使用默认值。默认会处理当前目录下的所有 MP4 文件,提取 2 帧,并将提取的帧保存到 output 文件夹中。

python extract_frames.py
2. 自定义视频文件或文件夹路径

可以指定要处理的单个 MP4 文件路径或包含多个 MP4 文件的文件夹路径,同时可以指定要提取的帧数和输出文件夹路径。

python extract_frames.py /path/to/video_or_folder 4 /path/to/output_folder
  • /path/to/video_or_folder:可以是单个 MP4 文件的完整路径,也可以是包含多个 MP4 文件的文件夹路径。
  • 4:要从每个视频文件中提取的帧数。
  • /path/to/output_folder:保存提取帧图像的输出文件夹路径。若该文件夹不存在,代码会自动创建。
3. 部分参数使用默认值

你也可以只指定部分参数,其余参数使用默认值。例如,只指定视频文件或文件夹路径和要提取的帧数,输出文件夹使用默认的 output 文件夹:

python extract_frames.py /path/to/video_or_folder 4

运行脚本后,程序会在指定的输出文件夹中生成一系列 JPEG 图像文件,文件名格式为 {video_name}_frame_{i}.jpg,其中 {video_name} 是原视频文件名,{i} 是帧的序号。

http://www.xdnf.cn/news/2211.html

相关文章:

  • vue3学习之防抖和节流
  • module.noParse(跳过指定文件的依赖解析)
  • Spring Boot安装指南
  • Qt 5.15 编译路径吐槽点
  • QML Date:日期处理示例
  • dijkstra
  • 个人电子白板(svg标签电子画板功能包含正方形、文本、橡皮 (颜色、尺寸、不透明度)、 撤销、取消撤销 等等功能,)
  • 计算机网络基本概念
  • 路由器重分发(OSPF+RIP),RIP充当翻译官,OSPF充当翻译官
  • 强化学习在大模型训练中的应用及策略优化算法详解:以LLM为例
  • 【C++ 类和数据抽象】消息处理示例(1):从设计模式到实战应用
  • Swift与iOS内存管理机制深度剖析
  • Java注解
  • AI辅助设计图转代码开发规范
  • MySQL 分布式架构与实战:从单机到集群的进阶之路(附生产级架构设计)
  • 【微知】sourceinsight如何添加支持bash脚本的语法格式解析?
  • P3309 [SDOI2014] 向量集 Solution
  • React-Hook
  • n8n 中文系列教程_10. 解析n8n中的AI节点:从基础使用到高级Agent开发
  • 【知识管理周报】知识管理最新周报0426文章推荐
  • [详细无套路]MDI Jade6.5安装包下载安装教程
  • HKUST:合成数据训练LLM的缩放定律
  • docker容器运维工具——ctop
  • GoLang基础
  • 药监平台上传数据报资源码不存在
  • 【linux】SSH 连接 WSL2 本地环境的完整步骤
  • Hbuilder x中的v-bind=““ is not supported.报错解决
  • Dify与n8n深度对比:AI应用开发与自动化工作流的双轨选择
  • 光子计算芯片进展评估:下一代AI算力突破的可能性
  • UML之序列图的执行规范