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

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} 是帧的序号。

相关文章:

  • 大端存储与小端存储:数据存储的镜像世界探秘
  • 【昇腾】PaddleOCR转om推理
  • 二分类任务中,统计置信区间
  • Linux下终端命令行安装常见字体示例
  • Unity任务系统笔记
  • springboot入门-业务逻辑核心service层
  • Python-MCPServerStdio开发
  • Unity之基于MVC的UI框架-含案例
  • Linux——动静态库
  • 解决conda虚拟环境安装包却依旧安装到base环境下
  • 模板引擎语法-算术运算
  • springboot集成MyBatis Generator快速开发
  • 河南联通光猫超级管理员账号设置
  • 利用 functools.lru_cache 优化递归算法
  • Spark 极速回顾
  • ollama运行huggingface的gguf模型(mac)
  • 【Python】使用uv管理python虚拟环境
  • 数据结构之单链表C语言
  • React-Redux
  • 4.26-count部分的渲染
  • 重新认识中国女性|婚姻,古代传统家庭再生产的根本之道
  • 玉渊谭天丨“稀土管制让美国慌了”,美军工稀土储备仅够数月
  • 上海发布一组人事任免信息:钱晓、翁轶丛任市数据局副局长
  • 合同约定拿850万保底利润?重庆市一中院:约定无效,发回重审
  • 4500万失能人员如何养老?没参保是否能享受长护师服务?
  • 世卫发布预防少女怀孕新指南,呼吁终止童婚、延长女孩受教育时间