在Python中,可以使用cv2(OpenCV)库来截取视频的每一秒的一帧图像,并将这些图像保存为图片到文件夹。以下是一个简单的示例代码:

import cv2  
import os  
  
def extract_frames_per_second(video_path, output_dir, fps=1):  
    # 创建输出目录(如果不存在)  
    if not os.path.exists(output_dir):  
        os.makedirs(output_dir)  
  
    # 打开视频文件  
    cap = cv2.VideoCapture(video_path)  
  
    # 检查视频是否成功打开  
    if not cap.isOpened():  
        print("Error: Could not open video.")  
        return  
  
    # 初始化帧计数器  
    frame_count = 0  
    prev_time = 0  
  
    # 逐帧读取视频  
    while True:  
        ret, frame = cap.read()  
  
        # 如果读取帧失败(例如,视频结束),则退出循环  
        if not ret:  
            break  
  
        # 获取当前帧的时间戳(以秒为单位)  
        current_time = int(cap.get(cv2.CAP_PROP_POS_MSEC) / 1000)  
  
        # 如果当前时间戳与上一次保存帧的时间戳之差大于或等于指定的fps,则保存当前帧  
        if current_time - prev_time >= fps:  
            # 构造输出文件名  
            output_file = os.path.join(output_dir, f"frame_{frame_count:04d}.jpg")  
  
            # 保存当前帧为图片  
            cv2.imwrite(output_file, frame)  
  
            # 更新帧计数器和上一次保存帧的时间戳  
            frame_count += 1  
            prev_time = current_time  
  
    # 释放视频文件和所有OpenCV窗口  
    cap.release()  
    cv2.destroyAllWindows()  
  
# 使用示例  
video_path = 'path_to_your_video.mp4'  # 替换为你的视频文件路径  
output_dir = 'output_frames'  # 替换为你希望保存帧图片的目录路径  
extract_frames_per_second(video_path, output_dir, fps=1)

这段代码定义了一个extract_frames_per_second函数,它接受三个参数:video_path(视频文件路径)、output_dir(输出目录路径)和fps(每秒截取的帧数,默认为1)。函数首先检查输出目录是否存在,如果不存在则创建。然后,它使用cv2.VideoCapture打开视频文件,并逐帧读取视频。对于每一帧,它检查当前时间戳与上一次保存帧的时间戳之差是否大于或等于指定的fps。如果是,则保存当前帧为图片,并更新帧计数器和上一次保存帧的时间戳。最后,释放视频文件和所有OpenCV窗口。你可以通过修改video_pathoutput_dir变量的值来使用这个函数,并调整fps参数来改变每秒截取的帧数。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐