将多个视频文件抽取成帧文件

        将自己的视频抽取成帧只需要替换下面代码主函数的文件路径即可实现。

import cv2  
import os  
  
def video_to_frames(video_paths, output_path, frame_interval=1):  
    """  
    将多个视频文件的帧按照指定的间隔抽取到输出文件夹中。  
  
    参数:  
    video_paths (list of str): 视频文件路径的列表。  
    output_path (str): 保存帧图像的文件夹路径。  
    frame_interval (int): 抽取帧的间隔。  
    """  
    # 确保输出目录存在  
    if not os.path.exists(output_path):  
        os.makedirs(output_path)  
      
    # 遍历每个视频文件  
    for video_path in video_paths:  
        # 打开视频文件  
        video_capture = cv2.VideoCapture(video_path)  
          
        # 获取视频文件名(不包括扩展名),用于生成帧文件名  
        video_filename = os.path.splitext(os.path.basename(video_path))[0]  
          
        # 初始化帧计数器和保存帧计数器  
        frame_count = 0  
        save_frame_count = 0  
          
        # 读取视频帧直到结束  
        success = True  
        while success:  
            # 读取下一帧  
            success, frame = video_capture.read()  
              
            # 如果成功读取帧  
            if success:  
                # 检查是否应该保存当前帧  
                if frame_count % frame_interval == 0:  
                    # 构造唯一的帧文件名  
                    frame_filename = os.path.join(output_path, f"{video_filename}_frame_{save_frame_count:06d}.png")  
                      
                    # 保存帧到文件  
                    cv2.imwrite(frame_filename, frame)  
                      
                    # 递增保存帧计数器  
                    save_frame_count += 1  
                  
                # 递增帧计数器  
                frame_count += 1  
          
        # 释放视频捕获对象  
        video_capture.release()  
  
if __name__ == "__main__":  
    # 替换成你的视频文件路径列表  
    video_paths = [ "video1.mp4", 
                    "video2.mp4", 
                    "video3.mp4"
                   ]  
    # 替换成保存帧图像的文件夹路径  
    output_path = "output_frames"  
    # 设置抽取帧的间隔,5代表每隔5帧保存一张图片  
    frame_interval = 5  
      
    # 调用函数将多个视频的帧按照指定间隔抽取到同一个文件夹中  
    video_to_frames(video_paths, output_path, frame_interval)

要将文件夹下的多个视频按每一秒抽取一帧图像,你可以使用类似的代码,并对每个视频文件进行循环处理。以下是一个示例代码: ```python import os import cv2 def extract_frames_from_folder(folder_path, output_path): # 获取文件夹下所有视频文件 video_files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f)) and f.endswith(('.mp4', '.avi', '.mkv'))] for video_file in video_files: video_path = os.path.join(folder_path, video_file) output_folder = os.path.join(output_path, os.path.splitext(video_file)[0]) # 创建输出文件夹 os.makedirs(output_folder, exist_ok=True) # 打开视频文件 video = cv2.VideoCapture(video_path) fps = video.get(cv2.CAP_PROP_FPS) # 获取视频的帧率 frame_count = 0 success, frame = video.read() while success: # 计算当前帧的时间 current_time = video.get(cv2.CAP_PROP_POS_MSEC) / 1000.0 # 每一秒抽取一帧图像 if current_time >= frame_count: output_file = os.path.join(output_folder, "frame_" + str(frame_count) + ".jpg") cv2.imwrite(output_file, frame) # 保存图像到输出路径 frame_count += 1 success, frame = video.read() video.release() # 调用函数 folder_path = 'your_folder' # 视频文件夹路径 output_path = 'output_frames' # 输出路径 extract_frames_from_folder(folder_path, output_path) ``` 你需要将 `your_folder` 替换为包含视频文件文件夹路径,`output_frames` 替换为你想要保存抽取的帧图像的目录路径。该代码将遍历文件夹下的每个视频文件,从每个视频中每一秒抽取一帧图像,并将图像保存到与视频文件同名的子文件夹中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值