python批量读取视频并按指定数量抽帧

  最近需要做一个数据集,考虑到样本为视频的原因需要对文件夹下所有视频进行抽帧处理,将样本处理为图片后进行标注,以便网络进行训练。

  本文代码实现的主要功能有:

     1、读取到文件夹下每个视频的FPS、帧数,以及所有视频的总帧数。

     2、按照指定的帧数抽帧处理,每隔n帧保存一帧。

     3、按照每个抽帧的视频名称生成对应的文件夹保存图片。

     4、将成功抽帧的视频名称写入txt文件,方便检查。

  代码如下:

# -*- coding: utf-8 -*-

import cv2
import os
import pdb
import numpy as np
from glob2 import glob

videos_src_path = 'C:\\Users\\Zhang\\Desktop\\aaa\\buy\\'  # 提取图片的视频文件夹

#筛选文件夹下MP4格式的文件
#videos = os.listdir(videos_src_path)  # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。
#videos = filter(lambda x: x.endswith('mp4'), videos)
dirs = os.listdir(videos_src_path)  # 获取指定路径下的文件

#根据名称创建对应的文件夹
# def mkdir(path):
#   folder=os.path.exists(path)
#   if not folder:
#     os.makedirs(path)
#     print(path+"---Done---")
#   else:
#     print(path+"---This is the folder---")
count = 0

#数总帧数
# total_frame = 0
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用Python的OpenCV库来批量读取多个视频。下面是一个示例代码,可以读取视频并将每一帧保存为图片文件: ```python import cv2 import os # 定义要读取视频文件夹路径 video_folder = 'path/to/your/folder' # 定义要保存的图片目录 output_folder = 'path/to/output/folder' # 获取视频文件夹下所有视频文件名 video_files = [f for f in os.listdir(video_folder) if f.endswith('.mp4')] # 遍历所有视频文件并逐一读取 for video_file in video_files: # 打开视频文件 cap = cv2.VideoCapture(os.path.join(video_folder, video_file)) # 定义帧计数器 frame_count = 0 # 循环读取视频帧 while True: # 读取视频帧 ret, frame = cap.read() # 如果视频结束,则退出循环 if not ret: break # 保存当前帧为图片文件 output_file = os.path.join(output_folder, f"{video_file[:-4]}_{frame_count:04d}.jpg") cv2.imwrite(output_file, frame) # 更新帧计数器 frame_count += 1 # 释放视频文件 cap.release() ``` 在上面的示例代码中,首先定义了要读取视频文件夹路径和要保存的图片目录。然后使用`os.listdir()`函数获取该文件夹下所有以`.mp4`结尾的视频文件名。接着,使用`cv2.VideoCapture()`函数打开每个视频文件,并循环读取视频帧,直到视频结束。在每个视频读取完成后,将当前帧保存为一张图片文件,并使用计数器更新图片文件名。最后,记得使用`cap.release()`函数释放视频文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值