视频文件夹下批量抽帧

文章描述了一个使用Python的VideoFrameExtractor类,通过OpenCV库从MP4视频中每`timeF`帧提取图片并保存到指定文件夹的过程。代码示例展示了如何在给定的视频文件夹中执行这个帧提取操作。
摘要由CSDN通过智能技术生成
import cv2
import os
import glob


class VideoFrameExtractor:
    def __init__(self):
        self.start_name = '0000000.jpg'
        self.timeF = 10

    def extract_frames(self, video_path, save_path):
        video_files = glob.glob(os.path.join(video_path, '*.mp4'))  # 获取目标文件夹下所有的MP4文件路径

        for video_file in video_files:
            cv = cv2.VideoCapture(video_file)  # 读入视频文件,命名为 cv

            if cv.isOpened():  # 判断是否正常打开
                rval, frame = cv.read()
                i = 1
                n = 0  # 重置帧计数器
            else:
                rval = False
                print(f'无法打开视频文件: {video_file}')
                continue

            video_name = os.path.splitext(os.path.basename(video_file))[0]  # 获取视频文件名(不带后缀)

            while rval:  # 正常打开 开始处理
                rval, frame = cv.read()
                jpg_name = os.path.join(save_path, f"{video_name}_{str(n).zfill(6)}.jpg")  # 命名保存的图片

                if (i % self.timeF == 0):  # 每隔timeF帧进行存储操作
                    try:
                        cv2.imwrite(jpg_name, frame)  # 存储为图像
                    except Exception as e:
                        print(f'保存图片出错: {e}')
                    n += 1
                i += 1
            cv2.waitKey(1)
            cv.release()
            print(f'{video_file} 处理完成')
        print('抽帧完成')


if __name__ == "__main__":
    video_folder_path = 'E:/tst1212'  # 设置为视频文件存储的目标文件夹路径
    img_output_path = 'E:/piliang'

    if not os.path.exists(img_output_path):  # 如果存储图片的文件夹不存在,自动创建保存图片文件夹
        os.makedirs(img_output_path)

    frame_extractor = VideoFrameExtractor()
    frame_extractor.extract_frames(video_folder_path, img_output_path)  # 执行提取图片程序

对于需要对文件夹下的视频进行批量解帧的操作,可以使用Python语言编写程序来完成。其中,需要使用到OpenCV模块,它是一种能够处理数字图像和视频的开源计算机视觉库。 首先,可以定义一个函数,用于读取文件夹中所有视频的路径,并将视频路径存储在一个列表中。接着,可以循环遍历该列表,打开每个视频,并对每一帧进行解帧操作。 用open()方法打开每个视频文件,然后使用cv2.VideoCapture()函数从视频中读取一帧。接着,使用cv2.imwrite()函数将解帧后的图像保存到一个新的文件夹中。不过需要注意的是保存的文件名应该是有规律的,可以根据文件名和帧数来构建。 以下是具体的代码示例: ``` python import os import cv2 def batch_extract_frames(folder_path, output_path): # 获取文件夹中所有的视频路径 video_paths = [os.path.join(folder_path, file_name) for file_name in os.listdir(folder_path) if file_name.endswith('.mp4')] # 遍历所有视频 for video_path in video_paths: # 打开视频 video = cv2.VideoCapture(video_path) # 获取视频帧数 frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) # 循环遍历每一帧 for i in range(frame_count): # 读取一帧 success, frame = video.read() if success: # 构建保存文件名 file_name = os.path.basename(video_path).replace('.mp4', '_') + str(i) + '.jpg' save_path = os.path.join(output_path, file_name) # 保存帧到文件夹 cv2.imwrite(save_path, frame) # 关闭视频 video.release() # 测试代码 folder_path = 'D:\videos' output_path = 'D:\frames' batch_extract_frames(folder_path, output_path) ``` 对于上面的代码,需要指定原视频存储的文件夹路径folder_path和解帧后图片存储的文件夹路径output_path。执行完程序后,在output_path文件夹下,就会生成与原视频同名的文件夹,并存储了所有解帧后的图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值