文章目录

  • 前言
  • 一、某一帧
  • 二、某一秒
  • 三、某几秒
  • 总结

前言

有时,我们在看一段视频时,又好看的画面,可以当作桌面背景,或者是喜欢的明星,好看的美女姐姐等,我们都可以通过程序实现截取

说明:
1.某一帧是你具体知道的某一帧,比如在我做过的人脸标记工作中,在某一帧出错误了,就需要找到这一帧的画面,具体分析原因
2.这里需要了解一个概念,fps:每秒多少帧,了解了这个之后尼,根据自己的需求,参考一下代码,完成自己的需求
3.某一秒既可以指一秒的时间内的所有画面,也可以指一秒之内的任意画面(即任意帧)
4.本质上某几秒的画面,和某一秒之内所有画面有着异曲同工之妙
5.某一帧,某一秒中的任意一帧也有着异曲同工之妙


一、某一帧

连续的画面是有许多帧组成了,一帧就是一个画面,了解了这些,就开始操作了
注释很详细的哦!记得点赞哦!

import cv2
cap = cv2.VideoCapture('../test/04.mp4') #需要读取的视频路径
n=0 #帧数
while cap.isOpened():#成功打开摄像头,或者成功读取视频# 从摄像头或者视频读取一帧,ret是表明成功与否ret, frame = cap.read()if ret:#读取成功n+=1#表明是第一帧if n==20:#假设第二十帧是我们想要的画面#第一个参数里面一定要有要保存的照片格式,例如.jpg .jpeg .png#名称可以随便 cv2.imwrite(f"第{n}帧"+".jpg",frame) #cv2.imshow('frame',frame) #放到此处只展示第二十帧的画面 #cv2.waitKey(0)#展示画面,即显示cap读取的内容cv2.imshow('frame',frame)else:break# 监听键盘,按下q键退出if cv2.waitKey(25) & 0xFF == ord('q'):break
##释放
cap.release()
#销毁所有窗口
cv2.destroyAllWindows()

二、某一秒

import cv2def fps(path):video = cv2.VideoCapture(path)# 找到cv2版本号(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')if int(major_ver) < 3:FPS = video.get(cv2.cv.CAP_PROP_FPS)else:FPS = video.get(cv2.CAP_PROP_FPS)video.release()return FPS
Path="../test/04.mp4"
cap = cv2.VideoCapture(Path) #需要读取的视频路径
n=0 #帧数
s=2 #秒  需要获取那一秒的画面(所有)
fp = fps(Path)#需要通过fps计算秒数
#print(fp)
while cap.isOpened():#成功打开摄像头,或者成功读取视频# 从摄像头或者视频读取一帧,ret是表明成功与否ret, frame = cap.read()if ret:#读取成功n+=1#表明是第一帧if int(n/fp)==(s-1):#通过取整,获取当前的秒数,-1是因为计算机是从0开始,我们是从1开始,所以需要减一cv2.imwrite(f"第{int(n/fp)}秒_第{n}帧"+".jpg",frame)#这里保存的是某一秒之内的所有帧数画面,需要注意命名问题,如果命名重复,则会覆盖原来的图象#展示画面,即显示cap读取的内容cv2.imshow('frame',frame)else:break# 监听键盘,按下q键退出if cv2.waitKey(25) & 0xFF == ord('q'):break
##释放
cap.release()
#销毁所有窗口
cv2.destroyAllWindows()

三、某几秒

import cv2def fps(path):video = cv2.VideoCapture(path)# 找到cv2版本号(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')if int(major_ver) < 3:FPS = video.get(cv2.cv.CAP_PROP_FPS)else:FPS = video.get(cv2.CAP_PROP_FPS)video.release()return FPS
Path="../test/04.mp4"
cap = cv2.VideoCapture(Path) #需要读取的视频路径
n=0 #帧数
start = 2 #开始的秒
end =3 #结束的秒
a=0
fp = fps(Path)
print(fp)
while cap.isOpened():#成功打开摄像头,或者成功读取视频# 从摄像头或者视频读取一帧,ret是表明成功与否ret, frame = cap.read()if ret:#读取成功n+=1#表明是第一帧# 通过取整,获取当前的秒数,-1是因为计算机是从0开始,我们是从1开始,所以需要减一# end没有减一是因为python里面 in () 括号是一个左闭右开的区间,不需要减一#这里选区的是2-3秒,存在歧义,此处是1-2秒,2-3秒,总共2秒的时间#如果只需要start-end之间的秒的话,只需要把end改为end-1即可if int(n/fp) in (start-1,end):cv2.imwrite(f"第{int(n/fp)}_第{n}帧"+".jpg",frame)#展示画面,即显示cap读取的内容cv2.imshow('frame',frame)else:break# 监听键盘,按下q键退出if cv2.waitKey(25) & 0xFF == ord('q'):break
##释放
cap.release()
#销毁所有窗口
cv2.destroyAllWindows()

总结

以上几种方法都有异曲同工之妙,稍加注意就会发现
我们需要主义的是使用VideoCapture函数是,传参和不传参的区别(不传参:通过摄像头输入,传参:视频输入)
为了计算秒数,我们需要获取视频的fps
相关文章:
获取视频fps、总帧数

脸部标记详解——摄像头输入


写于2021.05.10 17:04
恰饭时间到~

获取某一帧、某一秒、某几秒画面相关推荐

  1. android 获取视频第一帧作为缩略图

    今天,简单讲讲android里如何获取一个视频文件的第一帧作为缩略图显示在界面上. 之前,我说个最近需要从服务器下载视频文件,但是下载后肯定需要显示视频的缩略图在界面上给用户看,于是想到显示视频的第一 ...

  2. php 获取视频首帧,PHP获取视频的第一帧与时长

    //获得视频文件的缩略图 function getVideoCover($file,$time,$name) { if(empty($time))$time = '1';//默认截取第一秒第一帧 $s ...

  3. Android之使用MediaMetadataRetriever类获取视频第一帧

    一.首先,来介绍一下MediaMetadataRetriever类,此类位于android.media包下,这里,先附上可查看此类的API地址:MediaMetadataRetriever类,大家可以 ...

  4. Android之使用ThumbnailUtils类来获取视频第一帧缩略图

    一.首先,来介绍ThumbnailUtils类,此类位于android.media包下,此类有一个公有的无参构造函数,有三个静态的公有方法,一个用来获取视频第一帧得到的Bitmap,另外两个方法用 ...

  5. python时间函数纳秒_在Python中以秒和纳秒获取POSIX / Unix时间?

    我一直在努力找到一种方法来获取自1970-01-01 00:00:00 UTC以来的时间,以秒为单位,在python中以纳秒为单位,我找不到能给我正确精度的任何东西. 我尝试过使用时间模块,但是精度只 ...

  6. 前端获取视频帧率/帧数

    实现方案:     使用C语言书写解析MP4文件的方法,编译为wasm,与JS协同用来解析上传的MP4文件,获取视频帧数. 优:体积较小(共30KB) 缺:现在功能相当有限,只实现了MP4获取帧数的功 ...

  7. [Go]获取当前时间戳秒/毫秒/纳秒 转成字符串string

    获取当前时间戳的函数 , 默认有秒和纳秒 , 毫秒需要处理一下 , 转成字符串需要转换一下 fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix() ...

  8. 小程序获取视频第一帧

    小程序获取视频第一帧 最近有个小程序项目,需要在页面中展示大量的视频,但是不用播放.后来遇到问题,小程序不可以在一个页面中放置超过5个video标签,否则播放视频加载不到. 经过度娘查询找到一篇大佬的 ...

  9. java获取视频首帧图片用于界面展示

    pom文件引入jar <!-- 获取视频第一帧依赖 --><dependency><groupId>org.bytedeco</groupId>< ...

最新文章

  1. 大神开源AI代码!这次我也可以亲自上手、模仿OpenAI利用文本合成图像啦!
  2. python123数字形式转换_python基本数据类型的使用、转换----数字(有待完善)
  3. Executor详细介绍 打造基于Executor的Web服务器
  4. php 在线繁体转换简体,php如何实现简体繁体转换
  5. 一分钟带你看懂UML图
  6. Internationalization(i18n) support in SAP CRM,UI5 and Hybris
  7. HTML与CSS基础之选择器优先级(十)
  8. nagios-3.4.3搭建
  9. vue 父链和子组件索引_vuejs填坑-父子组件之间的访问
  10. 道了 14 年歉的扎克伯格,继续犯错的 Facebook
  11. iview admin 使用爬坑
  12. Mysql 查询某个字段最长的记录
  13. ubuntu14.04安装显卡驱动(转载)
  14. 职场新人注意事项:抖包袱可以,抖机灵不要
  15. 芯片前沿 | 云端芯片功耗问题日益严重
  16. 解决 IE下ajaxfileupload不兼容的问题
  17. 摘自 禅与生命体悟
  18. 推荐一款看书学习必备的读书笔记app
  19. 如何将多个pdf合成一个pdf?
  20. Matlab-稀疏矩阵

热门文章

  1. 用python做模型_Python实现Kuramoto模型的思想前提
  2. 如何设置虚拟机为静态IP
  3. 程序员最值得听的歌曲TOP10
  4. 如何登录锐捷设备(云桌面篇)
  5. 有没有一种文件系统可以支持所有的操作系统(Win+Linux+Mac)而且支持大文件而且不需要辅助软件呢?
  6. 设计师:平面设计师、网页设计师、服装设计师、动画/3D设计师、UI设计师等设计师简介(工作内容、方向,知识储备)
  7. 微信支付出现的错误提示及解决方法
  8. 腾讯云服务器linux系统有图形界面,腾讯云CentOS7搭建图形化界面并远程连接
  9. 关于svchost占用巨大内存的问题
  10. 免费打造个人网站,免费域名,免费空间,ftp使用,数据库等,免费就能搭建个人网站