当前位置: 首页 > news >正文

【Python cv2播放视频修改帧率】

源代码

注意看cv2.waitkey()方法,方法中的32意味着延迟32毫秒,那么就是每32毫秒播放一帧,那么一秒就是1000/32≈31帧

import cv2
from playsound import playsound
from threading import Threaddef func1():cap = cv2.VideoCapture("start.mp4")ret, frame = cap.read()while (1):#cv2.namedWindow('frame', cv2.WINDOW_NORMAL)#cv2.setWindowProperty('frame', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)ret, frame = cap.read()cv2.imshow('frame', frame)if cv2.waitKey(32) & 0xFF == ord('q') or ret == False:cap.release()cv2.destroyAllWindows()breakcv2.imshow('frame', frame)def func2():playsound('start.MP3')if __name__ == '__main__':Thread(target=func1).start()#Thread(target=func2).start()

所以为了加速视频,不妨把cv2.waitkey()中的数字修改,比如改为16,这样就是1000/16≈62帧

import cv2
from playsound import playsound
from threading import Threaddef func1():cap = cv2.VideoCapture("start.mp4")ret, frame = cap.read()while (1):#cv2.namedWindow('frame', cv2.WINDOW_NORMAL)#cv2.setWindowProperty('frame', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)ret, frame = cap.read()cv2.imshow('frame', frame)if cv2.waitKey(16) & 0xFF == ord('q') or ret == False:cap.release()cv2.destroyAllWindows()breakcv2.imshow('frame', frame)def func2():playsound('start.MP3')if __name__ == '__main__':Thread(target=func1).start()#Thread(target=func2).start()

方法解析:

cv2.imshow(‘frame’, frame)

cv2.imshow('frame', frame) 这行代码的功能是在名为 'frame' 的窗口中显示图像 frame

例如,如果 frame 是一帧视频图像,那么通过不断调用 cv2.imshow('frame', frame) ,就可以实现视频的逐帧显示。

在实际应用中,需要结合其他的 cv2 函数,如 cv2.waitKey 来控制显示的帧率和响应键盘事件等。比如,如果不使用 cv2.waitKey 进行适当的延迟控制,窗口可能会一闪而过或者显示异常。

cv2.waitKey(16)

cv2.waitKey(16) 函数用于在显示图像或视频时等待一段时间,并返回用户按下的键的 ASCII 值。

参数 16 表示等待的时间,单位是毫秒。也就是说,这行代码会使程序暂停 16 毫秒。

通过合理设置这个等待时间,可以控制图像或视频的显示帧率。例如,通常视频的帧率约为 25 - 30 帧每秒,对应的每帧显示时间约为 40 - 33 毫秒。这里设置为 16 毫秒,理论上可以达到约 60 帧每秒的显示效果,但实际帧率还受到计算机性能、图像处理速度等因素的影响。

如果返回值不为 -1 ,表示在等待期间用户按下了某个键,可以通过后续的判断来执行相应的操作,比如当用户按下 'q' 键时退出程序。


http://www.mrgr.cn/news/1622.html

相关文章:

  • smallpdf: 免费高效的PDF水印添加工具
  • Nginx 请求转发配置指南
  • 光伏业务管理软件是如何提高企业管理效率的?
  • 技术爱好者完全用台式机部件定制游戏笔记本电脑
  • C++入门——19C++的类型转换
  • SQL - 查询
  • 基于Spring Boot的疗养院管理系统的设计与实现
  • 【JPCS出版】2024年自动化、电气控制系统与设备国际学术会议(AECSE 2024)
  • Dockerfile常用指令详解
  • telegraf、influxdb、grafana安装配置及后端监听器操作
  • Redis7基础篇(四)
  • Java-Web面试题汇总
  • Java-自定义注解(定义更复杂的自定义注解,例如带有多个成员变量的注解使用讲解)
  • 详细介绍Pytorch基于GPU训练的一般套路(device)
  • 后端开发刷题 | 反转链表【链表篇】
  • C:每日一题:双指针法的使用
  • 大语言模型 - 提示词(Prompt)工程入门
  • PostgreSQL 索引类型保姆级讲解
  • 数据库表优化实践指南
  • 【微信小程序】自定义组件 - 数据、方法和属性