将多个视频批量转换成图片并resize

 代码为批量转换代码,输入为所有vido的存放路径,输出为pic下对应video名的目录,其中对每一帧进行resize操作方便放入模型中使用。

import cv2
import os
from tqdm import tqdm
# 设置输入视频文件夹和输出图片文件夹
#input_folder = r'.\Datasets\CSV\videos'
#output_folder = r'.\Datasets\CSV\pic1'

input_folder = r'\videos\path'
output_folder = r'\pic\path'
os.makedirs(output_folder, exist_ok=True)

# 设置目标大小
target_size = (320, 180)



def process_video(video_path):


    # 去除扩展名
    video_name_without_extension = os.path.splitext(os.path.basename(video_path))[0]
    print(video_path.split('\\')[-2])
    # 创建保存帧的目录
    output_dir = os.path.join(output_folder, video_path.split('\\')[-2], video_name_without_extension)
    os.makedirs(output_dir, exist_ok=True)

    # 打开视频文件
    cap = cv2.VideoCapture(video_path)

    # 获取视频帧数
    frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    # 使用 tqdm 创建进度条
    progress_bar = tqdm(total=frame_count, desc=f'Processing {video_name_without_extension}', unit='frame')

    # 等待10ms
    # cv2.waitKey(10000)

    cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
    # 循环逐帧读取视频、调整大小并保存为图片

    # 找到第一个非空白帧的索引
    start_index = 0

    for i in range(frame_count):

        ret, frame = cap.read()

        if ret :
        # 调整帧大小

            resized_frame = cv2.resize(frame, target_size)

            # 生成帧文件名,例如 frame0001.jpg
            frame_filename = os.path.join(output_dir, f'frame{i-start_index :04d}.jpg')
            cv2.imwrite(frame_filename, resized_frame)
            progress_bar.update(1)
        else:
            start_index += 1

    # cv2.waitKey(100)
    # 释放视频捕捉对象
    cap.release()


    print(f'视频逐帧处理完成,共生成{len(os.listdir(output_dir))} /{frame_count} 张调整大小后的图片,保存在 {output_dir} 目录中。')

if __name__ == '__main__':
    # 遍历每个文件夹
    for folder_name in os.listdir(input_folder):
        folder_path = os.path.join(input_folder, folder_name)

        # 确保路径是文件夹而不是文件
        if os.path.isdir(folder_path):
            # 遍历文件夹中的每个视频文件
            for video_name in os.listdir(folder_path):
                video_path = os.path.join(folder_path, video_name)

                # 确保路径是文件而不是文件夹
                if os.path.isfile(video_path):
                    # 处理视频
                    process_video(video_path)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值