1.实现代码

最开始的版本是使用opencv实现的,但是在实施的过程中,发现opencv在读取视频帧的时候,有的时候ret, frame = capture.read()中的返回值ret有时会为False,会存为错误的1帧,所以改用ffmpeg实现。
使用多线程的ffmpeg实现代码如下:

# 将UCF101数据集中的视频提取为帧
from __future__ import print_function, division
import os
import sys
import subprocess
from multiprocessing import Pool
from tqdm import tqdmn_thread = 30# file_name: v_ApplyEyeMakeup_g01_c01.avi
# class_path: xxx/Videos/ApplyEyeMakeup
# dst_class_path: xxx/jpgs/ApplyEyeMakeup
def vid2jpg(file_name, class_path, dst_dir_path):if '.avi' not in file_name:returnname, ext = os.path.splitext(file_name)dst_directory_path = os.path.join(dst_dir_path, name)  # dst_directory_path: xxx/jpgs/v_ApplyEyeMakeup_g01_c01video_file_path = os.path.join(class_path, file_name)  # video_file_path: xxx/Videos/ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avitry:if os.path.exists(dst_directory_path):if not os.path.exists(os.path.join(dst_directory_path, 'img_00001.jpg')):subprocess.call('rm -r \"{}\"'.format(dst_directory_path), shell=True)print('remove {}'.format(dst_directory_path))os.mkdir(dst_directory_path)else:print('*** convert has been done: {}'.format(dst_directory_path))returnelse:os.mkdir(dst_directory_path)except:print(dst_directory_path)returncmd = 'ffmpeg -i \"{}\" -threads 1 -vf scale=-1:331 -q:v 0 \"{}/img_%05d.jpg\"'.format(video_file_path, dst_directory_path)# print(cmd)subprocess.call(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)def class_process(dir_path, dst_dir_path, class_name):  # dir_path: xxx/Videos dst_dir_path: xxx/jpgs ApplyEyeMakeupprint('*' * 20, class_name, '*'*20)class_path = os.path.join(dir_path, class_name)  # class_path: xxx/Videos/ApplyEyeMakeupif not os.path.isdir(class_path):print('*** is not a dir {}'.format(class_path))return# dst_class_path = os.path.join(dst_dir_path, class_name)  # dst_class_path: xxx/jpgs/ApplyEyeMakeup# if not os.path.exists(dst_class_path):#     os.mkdir(dst_class_path)vid_list = os.listdir(class_path)vid_list.sort()p = Pool(n_thread)from functools import partialworker = partial(vid2jpg, class_path=class_path, dst_dir_path=dst_dir_path)for _ in tqdm(p.imap_unordered(worker, vid_list), total=len(vid_list)):pass# p.map(worker, vid_list)p.close()p.join()print('\n')if __name__ == "__main__":dir_path = sys.argv[1]  # /home/xxx/data/projects/datasets/UCF101/Videosdst_dir_path = sys.argv[2]  # /home/xxx/data/projects/datasets/UCF101/jpgsclass_list = os.listdir(dir_path)class_list.sort()for class_name in class_list:  # class_name: ApplyEyeMakeupclass_process(dir_path, dst_dir_path, class_name)

将UCF101数据集的视频提取为帧(多线程实现)相关推荐

  1. FFmpeg将视频提取成帧

    首先cd到ffmpeg的bin目录下, D:\Research direction\data set\ffmpeg\ffmpeg-4.4-essentials_build\bin> #将视频提取 ...

  2. 京东金融大数据竞赛猪脸识别(1)-从视频提取图像

    2017年11月的京东金融大数据竞赛参与人数最多的是猪脸识别的算法比赛,参加整个大数据比赛的有四千多人,而猪脸识别算法组就有一千多人.可见,搞图像识别的的人很多啊.想要提升自己价值的小伙伴们,向语音. ...

  3. 08【mmaction2 行为识别商用级别】自定义ava数据集 之 将视频裁剪为帧

    github(新版):https://github.com/Whiffe/mmaction2_YF 码云(新版):https://gitee.com/YFwinston/mmaction2_YF.gi ...

  4. Matlab从视频中提取图像,可以设定每多少秒提取1帧。

    刚刚数学建模比赛,提取视频中的照片. 解释下: 1. 这个27941是秒数,就是提取视频多少秒.如果整个视频提取的话,可以用VideoAd.Duration即视频总长度替代. video.FrameR ...

  5. 视频提取关键帧工具类KeyFramesExtractUtils.py,动态支持三种取帧方式,关键参数可配置,代码经过优化处理,效果和性能更好。

    同步上一期视频关键帧提取方法: 视频提取关键帧的三种方式[已调通]_君临天下tjm的博客-CSDN博客_视频关键帧提取关键代码如下:# -*- coding: utf-8 -*-"" ...

  6. 京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片

    最近参加京东的猪脸识别比赛,训练集是30个视频,需要将视频的每一帧提取出来存储为图片,存入对应的文件夹(分类标签). 本例是直接调用了cv2 模块中的 VideoCapture.一次运行,大概10分钟 ...

  7. python多进程海量视频提取帧图片

    视频提取帧图片 多个视频同时处理 跳帧保存图片 限制进程数防止系统崩溃 一键设置视频目录自动获取全部视频并提取帧图片. CPU打满,系统不卡顿. 源码 #!/usr/bin/env python # ...

  8. 对HDR视频进行抽帧,保存为OpenEXR格式的文件

    HDR视频处理-对HDR视频进行抽帧,保存为OpenEXR格式的文件 HDR视频介绍 使用ffmpeg对视频进行抽帧的问题 OpenEXR格式的帧 在mkv格式的HDR视频中提取OpenEXR格式的帧 ...

  9. php视频生成指定帧图片,python3.5 cv2 获取视频特定帧生成jpg图片

    假如文件夹有大量视频文件,需求目标是想从每个视频中提取一帧作为视频的一个封面图片,本文利用opencv-python模块实现需求.结合自己的工作,做一下简单的记录,原本想生成可传参数的exe文件,以方 ...

  10. 背景提取算法——帧间差分法、背景差分法、ViBe算法、ViBe+算法

    背景提取是在视频图像序列中提取出背景,背景就是场景中静止不动的景物.因为摄像机不动,因此图像中的每个像素点都有一个对应的背景值,在一段时间内,这个背景值是比较固定的.背景提取的目标就是根据视频图像序列 ...

最新文章

  1. 树上动态插点 ---- F. Imbalance Value of a Tree(树上动态插点 + 并查集)
  2. oracle 查询天,Oracle查询_ 单表查询
  3. int.Parse()和Convert.ToInt32之间的主要区别是什么
  4. Switch-case语句
  5. python如何读取excel的一个sheet_python pandas是如何读取excel表中的sheet的(四)
  6. 计算机网络rsa算法,计算机网络安全实验新报告--非对称密码算法RSA.doc
  7. OpenGL延迟着色之二
  8. 来自阿里巴巴佛系安卓程序员的指南,专题解析
  9. 大数据学习笔记01:大数据概述
  10. android auto note 8,三星Galaxy Note 8.0支持flash吗
  11. Bash语言的学习笔记~(legacy)
  12. 使用brew安装composer
  13. MD5 + salt 的加密算法
  14. Arm mini China新公司传预定四月分割Arm中国业务
  15. 【愚公系列】2022年02月 Django商城项目 33-订单确认功能实现
  16. 真·007!核酸采样机器人现身郑州;Python3面试准备与速查表;实时语音转文字工具库;AI绘画根据文本创建纹理;前沿论文 | ShowMeAI资讯日报
  17. 凭什么看不起外包员工?程序员外包到底怎么了?
  18. python+matplotlib绘图线条类型、颜色、散点类型
  19. tarjan算法讲解。
  20. 复赛名单公布!2022隐私计算HACKATHON大赛火热进行中!

热门文章

  1. 全球免费开放的电子图书馆
  2. 博客笔记二: [京东白条,美团] 用户评分卡,在线广告模型
  3. java 根据身份证计算年龄(周岁)
  4. 对机器学习实战第二章内容的思考
  5. 查找计算机的dos,dos命令dir查找文件的用法及实例
  6. 前端常见安装的一些环境和配置
  7. 企业信息化战略与实施(2)信息系统生命周期与战略规划方法
  8. solidity教程(二)僵尸攻击人类
  9. GIS数据处理-OSGB转换3dTiles
  10. pgAdmin添加外键约束