利用Python轻松从视频中抽取帧

利用Python轻松从视频中抽取帧

在做CV项目的时候,有时候可能需要从视频中抽取一些有价值的图片,可以使用 Python 的 opencv 库来从视频中抽取帧。以下是一个示例程序,展示了如何从视频中抽取帧,你可以指定每秒抽取的帧数或者指定间隔多少帧抽取一帧。

安装依赖

首先,确保你已经安装了 opencv-python 库。如果没有安装,可以使用以下命令进行安装:

pip install opencv-python

示例代码

以下是一个 Python 程序,展示了如何从视频中抽取帧:

import cv2
import os

def extract_frames(video_path, output_folder, mode, value):
    # 打开视频文件
    cap = cv2.VideoCapture(video_path)
    
    # 获取视频的帧率
    fps = cap.get(cv2.CAP_PROP_FPS)
    
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    frame_count = 0
    saved_count = 0
    
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        
        if mode == 'seconds':
            interval = int(fps / value)  # 每秒抽取几帧
        elif mode == 'frames':
            interval = value  # 间隔多少帧抽取一帧
        else:
            raise ValueError("Mode should be 'seconds' or 'frames'")
        
        if frame_count % interval == 0:
            frame_filename = os.path.join(output_folder, f"frame_{saved_count:04d}.jpg")
            cv2.imwrite(frame_filename, frame)
            saved_count += 1
        
        frame_count += 1
    
    cap.release()
    print(f"Total saved frames: {saved_count}")

# 参数设置
video_path = 'path/to/your/video.mp4'  # 替换为你的视频文件路径
output_folder = 'extracted_frames'  # 替换为你想要保存帧的文件夹
mode = 'seconds'  # 可以是 'seconds' 或 'frames'
value = 2  # 如果 mode 是 'seconds',表示每秒抽取几帧;如果 mode 是 'frames',表示间隔多少帧抽取一帧

# 抽取帧
extract_frames(video_path, output_folder, mode, value)

参数说明

  • video_path:视频文件的路径。
  • output_folder:保存抽取帧的文件夹路径。
  • mode:抽取帧的模式,可以是 'seconds''frames'
    • 'seconds':每秒抽取指定数量的帧。
    • 'frames':间隔指定数量的帧抽取一帧。
  • value:根据 mode 的不同,表示每秒抽取的帧数或间隔多少帧抽取一帧。

使用示例

假设你有一个视频文件 video.mp4,你希望每秒抽取 2 帧,并将这些帧保存到 extracted_frames 文件夹中,可以执行以下代码:

video_path = 'video.mp4'
output_folder = 'extracted_frames'
mode = 'seconds'
value = 2

extract_frames(video_path, output_folder, mode, value)

如果你希望间隔 30 帧抽取一帧,可以执行以下代码:

mode = 'frames'
value = 30

extract_frames(video_path, output_folder, mode, value)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑洞笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值