本程序用于提取视频中的图片。本程序由其他博主提供,在此表示感谢。
如有疑问可联系hardenqiu@foxmail.com。

# -*- coding: utf-8 -*-
import os
import cv2    ##加载OpenCV模块def video2frames(pathIn='', pathOut='', only_output_video_info = False, extract_time_points = None, initial_extract_time = 0,end_extract_time = None,extract_time_interval = -1, output_prefix = 'frame',jpg_quality = 100,isColor = True):'''pathIn:视频的路径,比如:F:\python_tutorials\test.mp4pathOut:设定提取的图片保存在哪个文件夹下,比如:F:\python_tutorials\frames1\。如果该文件夹不存在,函数将自动创建它only_output_video_info:如果为True,只输出视频信息(长度、帧数和帧率),不提取图片extract_time_points:提取的时间点,单位为秒,为元组数据,比如,(2, 3, 5)表示只提取视频第2秒, 第3秒,第5秒图片initial_extract_time:提取的起始时刻,单位为秒,默认为0(即从视频最开始提取)end_extract_time:提取的终止时刻,单位为秒,默认为None(即视频终点)extract_time_interval:提取的时间间隔,单位为秒,默认为-1(即输出时间范围内的所有帧)output_prefix:图片的前缀名,默认为frame,图片的名称将为frame_000001.jpg、frame_000002.jpg、frame_000003.jpg......jpg_quality:设置图片质量,范围为0到100,默认为100(质量最佳)isColor:如果为False,输出的将是黑白图片'''cap = cv2.VideoCapture(pathIn)  ##打开视频文件n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  ##视频的帧数fps = cap.get(cv2.CAP_PROP_FPS)  ##视频的帧数dur = n_frames/fps  ##视频的时间##如果only_output_video_info=True, 只输出视频信息,不提取图片if only_output_video_info:print('only output the video information (without extract frames)::::::')print("Duration of the video: {} seconds".format(dur))print("Number of frames: {}".format(n_frames))print("Frames per second (FPS): {}".format(fps)) ##提取特定时间点图片elif extract_time_points is not None:if max(extract_time_points) > dur:   ##判断时间点是否符合要求raise NameError('the max time point is larger than the video duration....')try:os.mkdir(pathOut)except OSError:passsuccess = Truecount = 0while success and count < len(extract_time_points):cap.set(cv2.CAP_PROP_POS_MSEC, (1000*extract_time_points[count])) success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  ##转化为黑白图片print('Write a new frame: {}, {}th'.format(success, count+1))cv2.imwrite(os.path.join(pathOut, "{}_{:06d}.jpg".format(output_prefix, count+1)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount = count + 1else:##判断起始时间、终止时间参数是否符合要求if initial_extract_time > dur:raise NameError('initial extract time is larger than the video duration....')if end_extract_time is not None:if end_extract_time > dur:raise NameError('end extract time is larger than the video duration....')if initial_extract_time > end_extract_time:raise NameError('end extract time is less than the initial extract time....')##时间范围内的每帧图片都输出if extract_time_interval == -1:if initial_extract_time > 0:cap.set(cv2.CAP_PROP_POS_MSEC, (1000*initial_extract_time)) try:os.mkdir(pathOut)except OSError:passprint('Converting a video into frames......')if end_extract_time is not None:N = (end_extract_time - initial_extract_time)*fps + 1success = Truecount = 0while success and count < N:success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {}, {}/{}'.format(success, count+1, n_frames))cv2.imwrite(os.path.join(pathOut, "{}_{:06d}.jpg".format(output_prefix, count+1)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount =  count + 1else:success = Truecount = 0while success:success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {}, {}/{}'.format(success, count+1, n_frames))cv2.imwrite(os.path.join(pathOut, "{}_{:06d}.jpg".format(output_prefix, count+1)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount =  count + 1##判断提取时间间隔设置是否符合要求    elif extract_time_interval > 0 and extract_time_interval < 1/fps:raise NameError('extract_time_interval is less than the frame time interval....')elif extract_time_interval > (n_frames/fps):raise NameError('extract_time_interval is larger than the duration of the video....')##时间范围内每隔一段时间输出一张图片else:try:os.mkdir(pathOut)except OSError:passprint('Converting a video into frames......')if end_extract_time is not None:N = (end_extract_time - initial_extract_time)/extract_time_interval + 1success = Truecount = 0while success and count < N:cap.set(cv2.CAP_PROP_POS_MSEC, (1000*initial_extract_time+count*1000*extract_time_interval)) success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {}, {}th'.format(success, count+1))cv2.imwrite(os.path.join(pathOut, "{}_{:06d}.jpg".format(output_prefix, count+1)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount = count + 1else:success = Truecount = 0while success:cap.set(cv2.CAP_PROP_POS_MSEC, (1000*initial_extract_time+count*1000*extract_time_interval)) success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {}, {}th'.format(success, count+1))cv2.imwrite(os.path.join(pathOut, "{}_{:06d}.jpg".format(output_prefix, count+1)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount = count + 1##### 测试
pathIn = 'test.mp4'
video2frames(pathIn, only_output_video_info = True)pathOut = './frames1/'
video2frames(pathIn, pathOut)pathOut = './frames2'
video2frames(pathIn, pathOut, extract_time_points=(1, 2, 5))pathOut = './frames3'
video2frames(pathIn, pathOut,initial_extract_time=1,end_extract_time=3,extract_time_interval = 0.5)   pathOut = './frames4/'
video2frames(pathIn, pathOut, extract_time_points=(0.3, 2), isColor = False)pathOut = './frames5/'
video2frames(pathIn, pathOut, extract_time_points=(0.3, 2), jpg_quality=50)

小程序收集箱:提取视频中的图片(python)相关推荐

  1. python从视频中提取音频_提取视频中的音频——python三行程序搞定!

    原标题:提取视频中的音频--python三行程序搞定! 写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一 ...

  2. python提取txt中指定内容_提取视频中的音频——python三行程序搞定!

    写在开头   身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的python包,然后执行三行程序!    ...

  3. python提取图片文字视频教学_用Python提取视频中的图片

    小编自己码的通用型函数,支持各种常用视频格式,可满足常用需求,亲测效果和速度都不错. 想获取本文数据和完整代码的下载链接,请关注微信公众号"R语言和Python学堂",并回复发文日 ...

  4. 提取视频中的音频——python三行程序搞定

    写在开头 提取音频 安装 python 包 提取音频 分析音频 安装 python 包 读取音频 matplotlib 画信号强度图 librosa 画信号强度图 写在开头   身处数据爆炸增长的时代 ...

  5. python 输出纯音频_提取视频中的音频python三行程序搞定

    写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的python包,然后执行三行程序! 语音数据 ...

  6. 提取视频中的音频 Python只需要三行代码!

    身处数据爆炸增长的信息时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的 python 库,然后执行三行代码! 语音数据在 ...

  7. python 提取视频中的音频 | Python工具类

    目录 前言 环境依赖 工具代码 总结 前言 利用Python的ffmpy库提取视频中的音频.本文提供工具类代码. 环境依赖 需要安装ffmpy,安装指令: pip install ffmpy -i h ...

  8. 微信小程序 拍照/从相册中选择图片

    微信小程序提供的众多API中,wx.chooseImage函数就是用来访问手机相册或摄像头的.调用该函数后,界面下方会呼出一个菜单,可以分别选择进入相册挑选已有照片或是打开摄像头进行拍照: 我们往WX ...

  9. python3抓取图片视频_Python opencv提取视频中的图片

    #-*- coding: utf-8 -*- importosimport cv2 ##加载OpenCV模块 def video2frames(pathIn='', pathOut='', only_ ...

最新文章

  1. python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...
  2. 单向链表的有关操作(链式存储结构)
  3. MIL for PRE
  4. 实战SSM_O2O商铺_19【商铺编辑】Controller层开发
  5. MySQL /“N叉树”的N值在MySQL中是可以被人工调整吗
  6. 多文件,多目录下查询关键字脚本
  7. windows下将磁盘脱机,并在我的电脑下显示
  8. php二维数组指定其键名对其排序的方法
  9. 设计灵感|时尚潮流品牌如何通过网页设计呈现
  10. java中enum怎么用_java 中enum的使用方法详解
  11. mysql数据类型强转
  12. android常用布局详解
  13. python:实现使用分而治之找到单峰列表的峰值算法(附完整源码)
  14. 华硕b365安装服务器系统,华硕B365主板搭载intel8/9代平台安装win7的详细教程
  15. 导致联想拯救者y7000触控板失灵的一种可能
  16. 无线手持PDA可以给企业带来什么?
  17. 关于COM类工厂80070005和8000401a错误分析及解决办法(DCOM)
  18. 用ffmpeg转换flv至mpeg
  19. oracle餐厅网络点餐系统_点餐系统产品演示
  20. 消息称华为与中兴均将裁员解困

热门文章

  1. (面经总结)一篇文章带你整理面试过程中关于Java 中多线程的创建方式的最全整理
  2. textract_比较亚马逊textract与tesseract ocr ocr nlp用例
  3. 关于Java调用微信、支付宝支付提现
  4. Android中的Handler、Looper和MessageQueue的使用以及原理
  5. 数字图书馆是计算机技术多媒体技术网络技术,计算机技术在数字图书馆上的应用...
  6. centOS防火墙命令大全
  7. [Vulnhub] DC-5
  8. 微信小程序自定义导航栏单独设置某些页面胶囊背景色,微信小程序setNavigationBarColor无效,微信小程序更改右上角按钮背景色
  9. 阿里巴巴测验题猴子摘桃问题(LIS问题)
  10. 泛函分析(3)-泛函分析的主要知识点