【Python快速入门和实践016】Python常用脚本-对视频抽取指定帧数并保存

一、功能介绍

这段代码的功能是从一个视频文件中抽取指定数量的帧,并将这些帧保存为图像文件。步骤如下:

  1. 设置路径和参数

    • video_path:视频文件的路径。
    • image_folder:保存抽取图像的目录。
    • num_frames_to_extract:需要抽取的帧数。
  2. 创建输出目录

    • 如果指定的输出目录不存在,则创建该目录。
  3. 打开视频文件

    • 使用cv2.VideoCapture打开视频文件。
  4. 获取视频信息

    • 获取视频的帧率(fps)和总帧数(total_frames)。
  5. 计算抽取间隔

    • 计算抽取帧的间隔,以确保尽可能均匀地从视频中抽取帧。
    • 如果总帧数不能被需要抽取的帧数整除,则增加1以确保最后一帧也能被抽取。
  6. 循环抽取帧

    • 循环读取视频帧,直到抽取的帧数达到指定数量或读取完视频。
    • 使用cap.set(cv2.CAP_PROP_POS_FRAMES, current_frame)跳转到指定帧。
    • 读取帧,并保存为图像文件。
  7. 保存图像

    • 每次读取到有效帧时,保存为JPEG格式的图像文件。
    • 文件名格式为normal-XXX.jpg,其中XXX是三位数的帧序号,不足三位数时前面补零。
  8. 释放资源

    • 关闭视频文件。
    • 清理OpenCV窗口。

二、代码

python 复制代码
import cv2
import os

# 视频文件路径
video_path = r'demo.mp4'

# 输出图像目录
image_folder = r'E:\pythonProject\pythonProject\imgs_chouzhen'
if not os.path.exists(image_folder):
    os.makedirs(image_folder)

# 指定要抽取的帧数
num_frames_to_extract = 100

# 打开视频文件
cap = cv2.VideoCapture(video_path)

# 获取视频总帧数
fps = cap.get(cv2.CAP_PROP_FPS)  # 帧率
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # 总帧数

# 计算抽取间隔(尽量均匀)
frame_interval = total_frames // num_frames_to_extract
if total_frames % num_frames_to_extract != 0:
    frame_interval += 1

frame_count = 0
current_frame = 0

while(current_frame < total_frames and frame_count < num_frames_to_extract):
    cap.set(cv2.CAP_PROP_POS_FRAMES, current_frame)
    ret, frame = cap.read()

    if not ret:
        break

    # 保存图像
    img_name = f"normal-{str(frame_count).zfill(3)}.jpg"
    img_path = os.path.join(image_folder, img_name)
    cv2.imwrite(img_path, frame)

    current_frame += frame_interval
    frame_count += 1

print(f"Total {frame_count} frames extracted.")
cap.release()
cv2.destroyAllWindows()

改成你的视频路径和保存路径,执行结果:

相关推荐
换个昵称都难1 小时前
webrtc 音频模块FEC模块
网络·音视频·webrtc
qq_366566502 小时前
视频配音自动化Pipeline:TTS选型+音色克隆+批量处理(附完整代码)
自动化·新媒体运营·音视频·音频
hz567896 小时前
公安局远程办案用什么音视频系统?安全取证与多方协同方案
安全·架构·云计算·音视频·实时音视频·信息与通信
Championship.23.246 小时前
Linux 3.0 音频机制深度解析:ALSA基础架构与传统音频驱动模型
linux·运维·音视频·alsa
VOOHU-沃虎7 小时前
PoE+音频一体化接口设计:从电源变压器到XLR卡侬座的完整链路
音视频
“码”力全开9 小时前
解密企业级智能视频中台:基于 Docker 与边缘计算的 GB28181/RTSP 异构架构设计(支持源码交付)
docker·音视频·边缘计算
潜创微科技9 小时前
QCW5007+QCW5004 | HDMI 1.3 无线投屏芯片方案空旷 150 米支持穿墙传输
音视频
MemoriKu10 小时前
Flutter 相册 APP 视频模态稳定化实战:从视频抽帧、Embedding 元数据到 Android 真机启动修复
android·开发语言·前端·flutter·架构·音视频·embedding
EasyDSS10 小时前
视频直播点播/高清点播/音视频点播/云点播/云直播EasyDSS一站式音视频平台助力智慧校园智能化建设
音视频
johnny23310 小时前
视频创作工具:OpenCut、HyperFrames、social-auto-upload、OpenStoryline、ArcReel
音视频