• 周六. 4 月 25th, 2026

物嫩软件资讯网

软件资讯来物嫩

python开发网页视频播放器_暴风影音没了,我们就用Python做个播放器吧

admin@wunen

5 月 20, 2025

视频播放在编程领域往往听着是高大上的技术,因为厂商和视频格式太多太杂了。但牛人的世界我们是从来不懂的,ffmpeg就是个牛人打造的框架,基本市面上八成的播放器都是基于ffmpeg的封装。那我们也来做一个吧。

随便搜搜就找到了FFPlayer这个库,使用也很简单,给定文件后就可以取出每帧的字节。

from ffpyplayer.player import MediaPlayer

import time

player = MediaPlayer(filename)

val = ”

while val != ‘eof’:

frame, val = player.get_frame()

if val != ‘eof’ and frame is not None:

img, t = frame

还记着物理课怎么讲电影的原理吗?就是利用了人眼的视觉残留原理,每秒给出24个连续画面,人就认为是活动影像了。所以我们只要用一个窗口定时播放上面代码取出的帧图像就可以了。

Python支持很多的图形库,而QT5最出名,而且已经官方支持Python了。代码很简单

from ffpyplayer.player import MediaPlayer

import sys

from PyQt5.QtWidgets import *

from PyQt5.QtGui import QPixmap, QImage, QImageReader

from PyQt5.QtCore import QTimer

class MyApp(QWidget):

def __init__(self, name, parent=None):

super(MyApp, self).__init__(parent)

self.label = QLabel()

self.qimg = QImage()

self.val = ”

self.player = MediaPlayer(name)

self.timer = QTimer()

self.timer.setInterval(50)

self.timer.start()

self.timer.timeout.connect(self.showFrame)

layout = QVBoxLayout()

layout.addWidget(self.label)

self.setLayout(layout)

self.setWindowTitle(name)

# self.showFullScreen()

def showFrame(self):

frame, self.val = self.player.get_frame()

if frame is not None:

img, t = frame

self.qimg = QImage(bytes(img.to_bytearray()[0]), img.get_size()[0], img.get_size()[1],

QImage.Format_RGB888)

self.label.setPixmap(QPixmap.fromImage(self.qimg))

if __name__ == ‘__main__’:

app = QApplication(sys.argv)

t = MyApp(sys.argv[1])

t.show()

sys.exit(app.exec_())

MyApp是QT需要的窗口对象,在Main方法调用显示就好。 而窗口布局我们用了QVBoxLayout(), 里面放一个QLabel. 因为一秒等于1000毫秒,每秒24帧就是每50毫秒更新下图片,那就设QTimer的interval为50就好了,然后在QTimer的timeout connect里取出图片数据更新QLabel就可以了。

在showFrame, QLabel是用QImage来显示图片的。QImage的构造函数参数分别是图片的字体数据,宽,高,以及图片格式。

这样一个简单的播放器就实现了,至于菜单和字幕则需要了解QT的相关知识了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注