Python快速实现视频播放器

news/2025/1/10 22:43:50/

文章目录

  • 问题描述
  • 解决方案
  • 参考文献

问题描述

Python快速实现视频播放器,功能有:音画同步、播放暂停、进度条、音量调节




解决方案

安装

pip install pyglet

代码

import sys
import timeimport pyglet
from pyglet.window import key, mousefilename = '1.mp4'
source = pyglet.media.load(filename)
video_format = source.video_format
width, height = video_format.width, video_format.height
title = 'Video Player'
window = pyglet.window.Window(width, height, title, resizable=True)
player = pyglet.media.Player()
player.queue(source)
player.play()@window.event
def on_draw():window.clear()if player.source and player.source.video_format:player.get_texture().blit(0, 0, width=width, height=height)@window.event
def on_resize(_width, _height):global width, heightheight = _width * height / width  # 按比例缩放后的高width = _widthdef set_fullscreen():if window.fullscreen:window.set_fullscreen(False)else:window.set_fullscreen(True)@window.event
def on_key_press(symbol, modifier):window.key_begin = time.perf_counter()if symbol == key.SPACE:if player.playing:player.pause()else:player.play()elif symbol == key.ESCAPE:sys.exit()elif symbol == key.ENTER:set_fullscreen()@window.event
def on_key_release(symbol, modifier):def get_key_value():key_duration = time.perf_counter() - window.key_beginkey_value = 1 if key_duration < 0.1 else int(key_duration / 0.1)return key_valueif symbol == key.UP:player.volume = round(player.volume + 0.1 * get_key_value(), 2)print(player.volume)elif symbol == key.DOWN:player.volume = round(player.volume - 0.1 * get_key_value(), 2)if player.volume < 0:player.volume = 0.0print(player.volume)elif symbol == key.LEFT:source.seek(player.time - get_key_value())elif symbol == key.RIGHT:source.seek(player.time + get_key_value())@window.event
def on_mouse_release(x, y, button, modifiers):if button == mouse.LEFT:window.last_mouse_release = (x, y, time.perf_counter())elif button == mouse.MIDDLE:set_fullscreen()@window.event
def on_mouse_press(x, y, button, modifiers):if button == mouse.LEFT and hasattr(window, 'last_mouse_release'):if (x, y) == window.last_mouse_release[:-1]:if time.perf_counter() - window.last_mouse_release[-1] < 0.2:if player.playing:player.pause()else:player.play()pyglet.app.run()

操作

  • 左键双击播放暂停
  • 中键全屏
  • 空格播放暂停
  • 上下方向键调节音量
  • ESC 退出
  • FIXME: 等比调整画面(容易有黑边)
  • FIXME: 左右方向键调节进度(容易卡顿,且长按会音画不同步)




参考文献

  1. pyglet Documentation
  2. What’s the right way to detect double-click events with python pyglet?

http://www.ppmy.cn/news/498277.html

相关文章

html5播放器视频倍速播放功能

阿酷TONY 2021-3-24 1. 倍速播放功能可以让视频加速或者减速播放&#xff1b; 2. 在PC端&#xff0c;HTML5播放器能轻松实现倍速播放功能&#xff0c;您可以将视频的播放速度设定为0.5倍&#xff0c;1倍&#xff08;正常速&#xff09;&#xff0c;1.2倍&#xff0c;1.5倍&…

python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于Charles的皮卡丘 ,作者白露未晞me Python爬虫、数据分析、网站开发等案例教程视频免费在线观看 https://space.bilibili.com/523606542 这里我们主要…

C#实现视频播放器

C#实现视频播放器概述 使用C#实现播放器,有以下几种方式: 1、使用MediaPlayer ActiveX控件; 2、使用VLC ActiveX控件 3、使用LIB VLC库 4、使用FFMPEG库 第1、2种,都一定依赖客户端环境。如果客户端较少,可以人工维护的话,可以考虑。 第4种,使用ffmpeg,就拥有了…

Android开发之视频播放器

Android开发之视频播放器 一、效果图二、build.gradle中导入依赖三、主布局文件(activity_video)四、布局文件(video_item)五、布局文件(activity_play)六、布局文件(main_title_bar)七、java文件(VideoActivity)八、VideoAdapter九、PlayActivity十、Video十二、res文件夹下新…

JavaFX实现视频播放器

对于很多Java开发小伙伴来说&#xff0c;不少童鞋都了解过JavaFX&#xff0c;但介于JavaFX的局限性&#xff0c;可能大多数Java开发者也不是很了解&#xff0c;因而在JavaFX中自然也就缺乏实战经验&#xff0c;但是有时候呢我们也想自己研发一些小程序&#xff0c;比如说前面文…

Qt视频播放器[QMediaPlayer+QVideowidget]

目录 参考一、安装K-Lite 解码器二、Qt代码结构VideoPlayer.promain.cppvideoplayer.h 播放器videoplayer.cpp 播放器videoplayer.ui 播放器playerslider.h 自定义进度条playerslider.cpp 自定义进度条 效果源码文件错误解决 参考 Qt实现视频播放器 Qt播放视频报错 DirectShowP…

视频播放器基础知识

1.视频播放器原理 播放一个视频文件的流程如下&#xff1a; 2.常用播放器 1&#xff09; 跨平台系列&#xff08;非DirectShow框架&#xff09; VLC&#xff0c; Mplayer&#xff0c; ffplay…… 2&#xff09; Windows系列&#xff08;DirectShow框架&#xff09; 完美解码&am…

android视频播放器api,03.视频播放器Api说明

03.视频播放器Api说明 目录介绍01.最简单的播放 02.如何切换视频内核 03.切换视频模式 04.切换视频清晰度 05.视频播放监听 06.列表中播放处理 07.悬浮窗口播放 08.其他重要功能Api 09.播放多个视频 10.VideoPlayer相关Api 11.Controller相关Api 12.边播放边缓存api 13.类似抖音…