python中cv2 播放视频,并同步播放音频

news/2025/3/13 16:37:58/文章来源:https://www.cnblogs.com/lambertlt/p/18770263
import cv2
import pygame 
import threading 
from queue import Queue class VideoPlayer:def __init__(self, video_path):# 初始化视频参数 self.cap  = cv2.VideoCapture(video_path)self.fps  = self.cap.get(cv2.CAP_PROP_FPS) self.width  = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)) self.height  = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # Pygame初始化 pygame.init() self.screen  = pygame.display.set_mode((self.width,  self.height)) self.clock  = pygame.time.Clock() # 线程控制 self.running  = True self.frame_queue  = Queue(maxsize=30)  # 帧缓冲队列 self.audio_queue  = Queue()# 启动线程 threading.Thread(target=self.video_thread).start() threading.Thread(target=self.audio_thread).start() self.main_loop() def video_thread(self):"""视频解码线程"""while self.running: ret, frame = self.cap.read() if not ret:break # 转换颜色空间并放入队列 frame = cv2.cvtColor(frame,  cv2.COLOR_BGR2RGB)self.frame_queue.put(pygame.image.frombuffer(frame.tobytes(),  (self.width,  self.height),  'RGB'))def audio_thread(self):"""音频播放线程(需要单独提取音频)"""# 此处需要音频处理逻辑(示例代码)pygame.mixer.init() while self.running: # 实际应用中需要从视频中提取音频 # 这里使用静音占位 self.clock.tick(self.fps) def main_loop(self):"""主渲染循环"""while self.running: for event in pygame.event.get(): if event.type  == pygame.QUIT:self.running  = False if not self.frame_queue.empty(): frame = self.frame_queue.get() self.screen.blit(frame,  (0, 0))pygame.display.flip() self.clock.tick(self.fps) # 释放资源 self.cap.release() pygame.quit() if __name__ == "__main__":VideoPlayer("your_video.mp4") 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898231.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25 年湛江一模第8题(函数奇偶性+恒成立)

25 年湛江一模第8题(函数奇偶性+恒成立)专题:概率+数列 题型:马尔可夫链 难度系数:★★★★ 题目 (2025 年湛江一模第8题) 已知定义在\(\mathbf{R}\)上的函数\(f(x)\)为奇函数,且当\(x>0\)时,\(f(x)=e^{x}-a\),若\(\forall x \in \mathbf…

每美搭(1)

一、团队介绍 1.1 团队概况 1.1.1 博客展示链接 团队名:每美搭子们,组长博客链接 https://www.cnblogs.com/0623-k 1.1.2 团队项目描述 每美搭:每美搭是一款专注于服装搭配推荐的APP。它能精准获取用户个人基本体型、上传服装类型等多维度数据,结合地区天气、用户心情、服装…

嵌入向量计算示例

嵌入向量计算示例 1. 问题设定场景:电影推荐系统中用户对电影类型的偏好嵌入 输入特征:4种电影类型(动作片、喜剧片、科幻片、爱情片) 嵌入维度:n_e = 2 词汇大小:n_v = 42. 数据表示 (1)独热编码电影类型 独热编码向量动作片 [1, 0, 0, 0]喜剧片 [0, 1, 0, 0]科幻片 […

塔石串口服务器的工作模式有哪些

串口服务器通过支持多种工作模式,实现了串行接口与网络接口之间的数据透明传输,提供了灵活的网络通信解决方案。以下是串口服务器的几种常见工作模式:| TCP Server模式 在TCP Server模式下,串口服务器作为TCP服务器,等待客户端的连接请求。这种模式下,串口服务器会监听一…

【正点原子】全志T113-i开发板震撼上市!异核开发、工控设计方案!新品上市,限时低价!

【正点原子】全志T113-i开发板震撼上市!异核开发、工控设计方案!新品上市,限时低价!ATK-DLT113IS开发板是正点原子基于全志T113-i处理器而研发的一款用于嵌入式Linux领域的开发板,其拥有高性能、高可靠性、低成本和丰富的接口资源,适用于嵌入式系统开发!T113-i芯片框架 …

Stochastic Orders 理解和相关运算(_随时补充)

Recall数学里,用\(o\)和\(O\)表示the order the terms. \(a_n = o(1)\). \(a_n = O(1)\).Stochastic order notation 是一种用来表示随机变量序列概率收敛的速记方法。 \(O_p(1)\)依概率有界; \(o_p(1)\)依概率收敛到0. \(X_n= O_p(a_n)\Leftrightarrow \frac{X_n}{a_n} =O_p…

DCC控制器模型铁路-蓝牙版本

蓝牙版本: 该单元加上App提供了一个完整的DCC控制器,具有击败更昂贵系统的功能。物有所值,可靠,使用简单,定制系统,以匹配您的火车头花名册。 包括F1到F32功能按钮兼容最新的声音解码器 添加您自己的loco名称和函数标题。 -在Android设备(手机或平板电脑)上安装App 对于初…

jMeter的下载和安装

jMeter简介: JMeter 是一款由 Apache 软件基金会开发的开源性能测试工具,主要用于模拟高负载场景下的应用程序行为,帮助开发者评估系统的性能、稳定性和可靠性。 核心功能1. 协议支持广泛:支持 HTTP/HTTPS、FTP、JDBC、SOAP、REST、WebSocket 等多种协议,可对 Web 应用、A…

测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。

合集 - LeetCode 题集(10)1.LeetCode题集-1- 两数之和2024-08-312.LeetCode题集-2 - 两数相加2024-09-053.LeetCode题集-3 - 无重复字符的最长子串2024-09-094.4 - 寻找两个有序数组的中位数,图文并茂,六种解法,万字讲解2024-09-165.LeetCode题集-5 - 最长回文子串(一)202…

主从搭建innobackupex恢复从库报错Unable to open undo tablespace undologundo001

近日,用innobackupex重新搭建从库时报Unable to open undo tablespace undologundo001错误 下面是解决的过程: 启动从库时报错如下2025-01-16T14:43:16.367875+08:00 0 [ERROR] InnoDB: Unable to open undo tablespace undolog/undo001. 2025-01-16T14:43:16.367904+08:00 0…

DIY自动药丸分配器

经过三年的工作,我终于完成了我的自动给药机。我有时候很健忘。每次出门前,我都要提醒自己带上钱包、手机、钥匙和眼镜,通常至少要提醒五次。在大多数情况下,我已经建立了常规和流程来帮助我处理它,当然,除了我的日常补品(你知道,多种维生素,ω - 3,以及类似的东西)。…

Laravel11 从0开发 Swoole-Reverb 扩展包(五) - Laravel Echo 介绍

前情提要 上一节我们完整的梳理了整个通信过程,接下来我们需要来看前端的处理过程。 Laravel Echo Laravel Echo 是一个 JavaScript 库,它让您可以轻松订阅频道并监听服务器端广播驱动程序广播的事件。您可以通过 NPM 包管理器安装 Echo。在此示例中,我们还将安装 pusher-js…