[python]将上万个视频随机抽帧存到一个文件夹下面

 对文件夹及子文件夹下面的视频文件,读取后随机抽帧,抽帧比例0.05,存成jpg保存

#!/usr/bin/env python3
# coding: utf-8
import os
import shutil
import cv2 as cv
from tqdm import tqdm
import glob
import numpy as np


def get_filelist(dir, Filelist):
    newDir = dir
    if os.path.isfile(dir):
        Filelist.append(dir)
    elif os.path.isdir(dir):
        for s in os.listdir(dir):
            newDir = os.path.join(dir, s)
            get_filelist(newDir, Filelist)
    return Filelist

def get_frame(path_name):
    save_dir = "G:\\体操\\picsPicked\\"

    cap = cv.VideoCapture(path_name)

    frames_num = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
    isOpened = cap.isOpened()  ##判断视频是否打开
    print(isOpened)

    fps = cap.get(cv.CAP_PROP_FPS)  ##获取帧率
    width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))  ###获取宽度
    height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))  ###获取高度
    print(fps, width, height)

    np.random.seed(2020)
    list_num = np.array([x for x in range(frames_num)])
    np.random.shuffle(list_num)
    print(list_num)
    list_num = list_num[:int(frames_num*0.05)]


    i = 0
    save_dir = os.path.join(save_dir, path_name.split("\\")[3])
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    for n in range(frames_num):
        i = i + 1
        (flag, frame) = cap.read()
        if not flag:
            break

        # pic_name = dirName.split("\\")[-1].replace("afterPost","")
        # savdir = "G:\\D\\all\\" +pic_name
        # print(savdir +"_" +str(i) + ".jpg")
        if i in list_num:


            dirName = "_".join(path_name.split("\\")[4:]).replace(".mp4", "").replace(".avi", "").replace(" ",
                                                                                                          "_").replace(
                ".", "_")
            dirNamenew = os.path.join(save_dir,dirName)+"_"+str(i) + ".jpg"
            print(dirNamenew)
            # cv.imwrite(dirNamenew, frame, [cv.IMWRITE_JPEG_CHROMA_QUALITY, 100])  ##命名 图片 图片质量
            cv.imencode('.jpg', frame)[1].tofile(dirNamenew)

if __name__ == '__main__':
    # get all the abs path of videos
    list = get_filelist('G:\\体操\\2019年', [])
    for list_name in tqdm(list[1000:10000]):
        # print(list_name)
        try:
            get_frame(list_name)
        except:
            continue
    # print(len(list))

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值