openCV 视频播放练习01--进度条的使用

目标:
  通过拖动进度条,实现视频播放进度的调整
实现效果:
在这里插入图片描述

代码实现:

class PlayWithProgresBar(threading.Thread): 
	"""视频与进度条同步"""
	def __init__(self, str_rtsp):
		super().__init__()
		# 视频路径
		self.str_rtsp = str_rtsp
		self.trackbarName = 'cap video'
		self.windowName = 'cap video'
		# 当前帧
		self.n_currentframe = 0
		# 通过cv2中的类获取视频流操作对象cap
		self.cap = cv2.VideoCapture(self.str_rtsp)
		# 调用cv2方法获取cap的视频帧(帧:每秒多少张图片)
		self.fps = self.cap.get(cv2.CAP_PROP_FPS)
		# 获取总帧数
		self.totalFrame = self.cap.get(cv2.CAP_PROP_FRAME_COUNT)
		# 帧间隔
		self.pauseTime = int(1000 / self.fps)
		# 定义编码格式mpge-4
		self.fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2')
		cv2.namedWindow("cap video", 0)

	def track_bar_func(self, trackbarValue):
		# 视频定位到指定的帧
		self.cap.set(cv2.CAP_PROP_POS_FRAMES, trackbarValue)
		# 进度条同步
		cv2.setTrackbarPos(self.trackbarName, self.windowName, trackbarValue)
		self.n_currentframe = trackbarValue

	def run(self):

		ret, image = self.cap.read()
		n_currentframe = 0
		# 创建进度条
		cv2.createTrackbar(self.trackbarName, self.windowName, n_currentframe, int(self.totalFrame), self.track_bar_func)

		while ret:
			cv2.imshow('cap video', image)
			cv2.waitKey(self.pauseTime)
			# 更新进度条状态
			cv2.setTrackbarPos(self.trackbarName, self.windowName, self.n_currentframe)
			self.n_currentframe += 1
			ret,image = self.cap.read()
			if cv2.getWindowProperty('cap video', cv2.WINDOW_AUTOSIZE) or cv2.waitKey(self.pauseTime) & 0xFF == ord('q'):
				break
		self.cap.release()
		cv2.destroyAllWindows()

rtsp_str = r'D:\work\boradxt\note\drsu3-03221137.avi'
playback = PlayWithProgresBar(rtsp_str)
playback.start()

关键代码说明:
cv2.getWindowProperty('cap video', cv2.WINDOW_AUTOSIZE)
获得窗口cap video的 cv2.WINDOW_AUTOSIZE属性,窗口不存在时返回-1。
cv2.waitKey(self.pauseTime) & 0xFF == ord('q'):
判断键盘输入为q
getWindowProperty获取窗口的属性,第一个参数是窗口的名称,第二个参数是具体的窗口属性。

cv2.createTrackbar(self.trackbarName, self.windowName, n_currentframe, int(self.totalFrame), self.track_bar_func)
创建进度条,第一个参数是进度条名称,第二个是绑定的窗口名称,第三个参数是进度条初始位置,第四个是进度条最大值,最后一个参数是进度条回调方法(改变进度条后的响应操作)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值