首页 > 其他分享 >pygame播放视频并实现音视频同步

pygame播放视频并实现音视频同步

时间:2023-11-21 21:23:02浏览次数:32  
标签:视频 方案 音频 音视频 pygame 播放 进度

一、前言

在我接触pygame时最新的pygame已经不支持movie模块,这就导致在pygame播放视频变成一个问题,网上搜了下解决方案有两个:

一是使用opencv播放视频,再结合pygame.mixer来播放音频

二是使用moviepy播放视频,再结合pygame.mixer播放音频

上述两个方案其实都是先将mp4的视频分离成“画面帧”和“mp3音频”,所谓的播放实际上是不停地在切换“画面帧”,同时播放音频,最终实现音视频的同时播放。

但上述两个方案都存在“音画同步”的问题,因为无论是opencv还是moviepy都只负责将视频切片成帧,播放则是pygame自己在执行一个while循环来不停切换界面上展示出来的图片帧,这也就导致while循环很快就将帧播放完毕,而音频则还按着原有节奏缓慢播放。

解决是在while循环中加入合适的延时同时根据当前视频播放进度来设置音频的播放起点以实现同步,但这个方案据我实践在加入延时后就实现了较好的音画同步效果不知道为啥还要去设置音频的播放起点,另外在设置音频播放起点时一直提示错误也不知道为何,所以我这里提供两个方案:

方案一:在while循环中加入延时,短视频测试效果还行

方案二:根据音频的播放节奏来决定视频帧的播放节奏,这样音画肯定是同步的

我选择使用moviepy来做,因为moviepy从mp4中分离mp3比较简单。

 

二、方案一

在项目的目录下新建videos目录,并放入一个测试使用的mp4文件test.mp4

上述代码实际上是将整个游戏的帧率设置成与视频一致,这样可能存在一些隐患(直觉)。

 

三、方案二

代码如下:

上述代码的逻辑如下:

1、通过“pygame.mixer.music.get_pos()”获取当前音频的播放进度

2、通过音频播放进度除以视频的总时长,得到音频播放的百分比进度(音画同步的话,音频百分比进度就应该跟视频百分比进度一致)

3、百分比进度乘以视频总帧数可得到当前应当播放哪一个视频帧

4、再判断一下当前实际播放的帧是否已超过了理论应该播放的视频帧(是的话就跳过当前帧的播放)

注意音频播放结束或视频帧播放结束都要结束视频的播放。

 

四、总结

本篇提供了pygame播放视频的两个方案,第一个方案是网上找的现成的,第二个方案则是参考了opencv(主流方案)自己逆向思维做的,还未经过实际验证。

标签:视频,方案,音频,音视频,pygame,播放,进度
From: https://www.cnblogs.com/cation/p/17847637.html

相关文章

  • 超好用的音视频开发指南来咯,建议人手一份
    前言现在市面上的图像,音视频软件越来越多,最近两年也是直播,短视频的红利期。而图像、音视频一直是互联网视觉的入口,掌握并熟练运用音视频、图像技术已经是当前互联网时代不可或缺的技能,而且这个技能是具有沉淀性质的。对于一名合格的音视频开发者来说,我们要掌握的不单单只是一点,而且......
  • jsmpeg视频播放器使用方法和常见问题解决方案
    JSMpeg是一个使用JavaScript编写的视频播放器,它可以在浏览器中播放MPEG1视频和MP2音频流。JSMpeg的特点是它能够通过WebSockets实时传输视频流,并且可以在不支持HTML5视频播放器的浏览器上运行。以下是JSMpeg的基本使用方法和一些常见问题的解决方案:主要用来解决移移动端视频播放问......
  • 安防监控视频云存储平台EasyCVR页面播放卡顿的优化方法
    视频监控平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTT......
  • 安防监控视频云存储平台EasyCVR页面播放卡顿的优化方法
    视频监控平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTTP......
  • ffmpeg低延迟拉流播放
    1使用VLC的话可以设置缓冲,可以设置一下选项,对于rtsp播放还是有用的;但是对于RTMP播放,有些码流设置了也没效果,还会导致RTMP直接卡住(大GOP)2如果是大分辨率,可能与解码相关,可以选择各个播放器的硬解码,可能会好一些3ffmpeg有无缓冲模式播放,无论播放RTMP还是RTSP,几乎无缓冲(可以用......
  • 音乐播放设置 (5.0)
    本文学习于B站,记录,借鉴;视频链接:音乐播放_哔哩哔哩_bilibili 注意头文件的调用:先使用graphics.h或者easyx.h头文件,在他们下面再继续调用mmsystem.h头文件;下图中重点是最下面两个放置位置,不能放在graphics.h或者easyx.h之后否则无效 刚开始操作与图片的插入相同,将音乐放入同......
  • Avalonia 实现跨平台的IM即时通讯、语音视频通话(源码,支持信创国产OS,统信、银河麒麟)
       在Avalonia如火如荼的现在,之前使用CPF实现的简单IM,非常有必要基于Avalonia来实现了。Avalonia在跨平台上的表现非常出色,对信创国产操作系统(像银河麒麟、统信UOS、Deepin等)也很不错。   现在,我们就来使用Avalonia实现一个跨平台的简单IM,除了文字聊天外,还可......
  • 俄罗斯方块、pygame的学习与实践
    俄罗斯方块、pygame的学习与实践目录俄罗斯方块、pygame的学习与实践俄罗斯方块tkinterPygame介绍null俄罗斯方块相信绝大对数同学都玩过,现在学习用Python实现。tkinter发现参考资料使用tkinter,所以先学习tkinter(此处省略10086条tkintker学习)Pygame介绍Pygame是一个用......
  • 使用golang来解密m3u8视频播放列表里面的ts文件
    如果我有一个1.2G的mp4格式的电影,想要放在网站上进行播放,直接用video标签,src属性设置为视频的地址就可以了!这种观看体验,究竟怎么样,可以自己去尝试下。。。结果是令人崩溃的。。。加载巨慢,无法选择性观看自己想要看的部分,反正就是哪哪儿都不爽。 那么为了解决这个问题,现在有很......
  • 前景一片蓝海,Android音视频开发必备基础知识汇总
    前言转瞬间,2023只剩一个半月,再过去的一年里,音视频技术在经历一番风浪的侵袭过后,变得逐渐相对平静下来。“内卷”之外,大家似乎更多了一份“理性”指导我们去做一些正确的事,追求技术在商业中的更高价值。具体体现在我们要思考如何才能将自身能力更多、更快、更好的转化为产品。无论......