使用opencv,遍历用户输入文件夹及其子文件夹的所有指定类型视频文件,读取每一帧并保存到另外的指定文件夹中。
转换过程中对文件后缀名进行了简单检查。
先看效果。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
###
# File: /Users/simonliu/Documents/python/video2jpg/video_to_jpg.py
# Project: /Users/simonliu/Documents/python
# Created Date: 2022-05-07 18:23:39
# Author: Simon Liu
# -----
# Last Modified: 2022-06-10 15:53:08
# Modified By: Simon Liu
# -----
# Copyright (c) 2022 SimonLiu Inc.
#
# May the force be with you.
# -----
# HISTORY:
# Date          By  Comments
# ----------    --- ----------------------------------------------------------
###
import cv2
from cv2 import VideoWriter, VideoWriter_fourcc, imread, resize
from pathlib import Path
import os,sys# src_dir = 'Movies/cat_video'
# src_path = Path.home()/Path(src_dir)
# Option to decide whether to save frame to independent folders ,每个视频帧是否保存在独立文件夹,默认为False
independent_folder = False
# Skip {frame_to_skip} frames before saving another frame ,保存图片的间隔帧数
frame_to_skip = 15
total_saved = 0
total_file_count = 0
current_file = 0
file_types = ['MOV','MP4','AVI','FLV']def get_total_file_count(src_path):global total_file_count,file_types# Get total file countfor f in src_path.glob('**/*'):if(f.is_file() and (f.suffix.upper()[1:] in file_types)):total_file_count += 1else:passdef browse_video_files(src_path,dst_path):global file_types,total_saved,total_file_count,current_fileif src_path.exists():print('找到源视频文件夹:%s, \n符合条件的视频文件总数:%d'%(str(src_path),total_file_count))for f in src_path.glob('**/*'):current_file += 1if(f.is_file() and (f.suffix.upper()[1:] in file_types)):print(f'正在转换文件({current_file}/{total_file_count})------->>>',f.name)video2pic(f,dst_path)else:passelse:print('文件夹不存在:',str(dir))def video2pic(f,dst_path):global total_savedfilename = f.stem #获取文件名,不含后缀cap = cv2.VideoCapture(str(f))fps = int(cap.get(cv2.CAP_PROP_FPS))  # 获取帧率width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取宽度height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取高度fcount = cap.get(cv2.CAP_PROP_FRAME_COUNT)      # 获取视频总帧数while True:userinput = input(f"请输入选取帧间隔(0-{fps},直接回车默认是5):")if userinput == '':frame_to_skip = 5breakelif userinput.isdigit():frame_to_skip = int(frame_to_skip)if frame_to_skip >= 0 and frame_to_skip < fps:breakelse:print("输入非法,请重新输入提示范围内的数字")else:print("输入非法,请重新输入提示范围内的数字")frame_to_save =  int(fcount/frame_to_skip)print(f'视频文件帧率:{fps}, 分辨率:{width}x{height},视频总帧数:{fcount},保存间隔帧数:{frame_to_skip},预计保存帧数:{frame_to_save}')suc = cap.isOpened()  # 是否成功打开frame_count = 0frame_saved = 0# dst_dir = f'{src_path}_frames/{filename}_frames'if independent_folder:dst_path = dst_path/f'{filename}_frames'print(f'目标文件夹:',dst_path)if dst_path.exists():# print(f'目标文件夹 {dst_path} 已经存在...')passelse:print(f'创建目标文件夹: {dst_path} ')dst_path.mkdir(exist_ok=True, parents=True)suc, frame = cap.read()while suc:frame_count +=  1if frame_count%frame_to_skip == 0:frame_saved += 1total_saved += 1print(f'正在写入 {dst_path}/{filename}_{frame_saved:05d}.jpg\r',end='')cv2.imwrite(f'{dst_path}/{filename}_{frame_saved:05d}.jpg', frame)suc, frame = cap.read()cv2.waitKey(1)cap.release()print(f'\n视频转图片结束!从视频 {f.name} 中保存了 {frame_saved} 帧画面。')def input_video_path():while True:video_path = input('请输入图片文件夹位置(输入Q或q退出):')if video_path == "Q" or video_path == 'q':sys.exit()# video_path = "~/Movies/cat_video_frames_picked_224x224"video_path = os.path.expanduser(video_path)src_path = Path(video_path)if src_path.exists():breakelse:print(f"文件夹{src_path}不存在,请检查输入的文件夹名称是否正确。")basename = str(src_path.stem)dst_path = src_path.parent/f'{basename}_frames'return src_path,dst_pathdef main():global total_file_count,total_savedsrc_path,dst_path = input_video_path()get_total_file_count(src_path)browse_video_files(src_path,dst_path)print(f'总共转换了{total_file_count}个文件, 保存了{total_saved}帧图片。')if __name__ == '__main__':main()

仓库地址:
simonliu009/video2jpg: A python script that converts video to jpg files

参考资料:
使用Python实现MP4格式视频与图片相互转换
python文件和路径操作神器:pathlib

python视频转图片相关推荐

  1. python 视频和图片转换 视频压缩 图片降低分辨率 图像处理

    python 做视频后期 单个视频转图片 所有图片转视频 视频压缩 - ffmpeg 图片降低分辨率 图像处理 这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理. 对视频进行后期处理,思路就 ...

  2. Python 视频转换为图片 与 图片转换为视频

    一 安装opencv-python pip install opencv-python 二 创建unlock_mv.py 文件, 在unlock_mv.py同级目录创建mv文件夹 import os ...

  3. python 视频转换图片

    使用opencv可以很方便的将视频文件转换为图片,opencv安装见前序文章https://blog.csdn.net/haiziccc/article/details/101517163. pyth ...

  4. 3、python 视频转图片及图片转视频、裁剪、创建图片压缩成视频

    背景:从视频中获取图片,进行数据标注,然后进行训练; 指定文件夹读取视频然后产生相应图片工具 # -*- coding: utf-8 -*- import os import cv2 import o ...

  5. python 视频与图片相互转换,以及一系列图像操作

    视频转图像 def video2img():vc = cv2.VideoCapture('D:/Pytorch-UNet-master/test_1.mp4') # 读取视频文件c = 1if vc. ...

  6. Python 视频、图片、音频爬取下载 you-get

    https://www.cnblogs.com/tricktong/articles/15789783.html

  7. python视频转图片、图片转视频

    https://blog.csdn.net/a649344475/article/details/82943215

  8. python ffmpeg 视频转图片 视频转音频 播放音频 多张图片+音频转视频 多个视频合成一个视频 改变视频播放速度

    文章目录 视频转图片 视频转音频 播放音频 图片+音频 转 视频 多个视频合成一个视频 改变视频播放速度 视频转图片 #!/usr/bin/env python # -*- encoding: utf ...

  9. thinkcmf5调用指定分类的二级_Tengine快速上手系列教程amp;视频:基于Python API的图片分类应用入门丨附彩蛋...

    前言:近期,Tengine团队加班加点,好消息接踵而来,OpenCV 4.3.0发布,OPEN AI LAB AIoT智能开发平台Tengine与OpenCV合作共同加速边缘智能,Tengine再获业 ...

  10. python获取视频帧的时间_Python提取视频中图片的示例(按帧、按秒)

    一.按帧提取 #coding=utf-8 import os import cv2 def save_img(): #提取视频中图片 按照每帧提取 video_path = r'D:\\test\\' ...

最新文章

  1. Di-visible Confusion 贪心,模拟,思维,时间复杂度
  2. iOS app 右滑返回
  3. JAVA——Java连接MySQL数据库
  4. php旧版本windows_Windows的旧版本中如何进行多任务处理?
  5. 从业回忆录,最后悔的事
  6. 修改FTP服务器端口后无法访问
  7. 使用IDE宏遍历代码中的非ASCII字符
  8. 跨平台开发与原生开发优劣比较
  9. delphi xe5 android,android – 发送电子邮件Delphi XE5
  10. 本地差分隐私 随机响应_本地化差分隐私:如何面对非可信的世界
  11. 武职计算机网络技术专业,武汉职业技术学院计算机系
  12. 巧妙的通过二维码在手机和电脑传递小量数据
  13. centos7安装Mysql8.0步骤
  14. 手机与电脑局域网内数据互通
  15. sqlDbx连接oracle64位
  16. JAVA中随机数的生成方法
  17. 护眼灯真的可以保护眼睛吗?市面上的护眼台灯到底是不是智商税
  18. java rsa sha1_将SHA1和RSA与java.security.Signature和MessageDigest和Cipher结合使用
  19. 使用Total Commander提高工作效率
  20. [kmp+模板] kmp模板

热门文章

  1. 图片裁剪cropper 示例
  2. Acer 4750 安装黑苹果_黑苹果安装 你要知道的那些坑
  3. 阿里巴巴矢量字体转Image图片(建议收藏)
  4. XMAPP启动apache和mysql失败的问题
  5. java集合实现冒泡排序_java实现冒泡排序算法
  6. 快速学习Ant Design-简介
  7. tfidf处理代码_tfidf代码简单实现
  8. matlab学生信息按成绩排列,基于Matlab的学生成绩综合分析
  9. 移动前端开发跟Web前端开发一样吗?有什么区别?
  10. 元素周期表排列的规律_元素周期表的元素排列规律和元素的性质