導語?
各位新老朋友下午好,我是木木子!掌聲在哪里~
咳咳咳.....算了沒掌聲我也還是要繼續叨叨!
大家電腦上應該都有視頻播放器吧,什么QQ影音、迅雷影音、暴風影音等各種影音,
還記得上學那會,寢室的同學都用的暴風影音,那個時候暴風是真良心,無廣告、支持的視頻格式多,總之用起來非常棒,
慢慢地暴風廣告越來越多,用起來也越來越卡,也就棄坑了,

?
今天要給大家分享的是制作一款專屬自己的無廣告、無彈窗的視頻播放器,來繼續往下看!
正文
本文是基于Pyqt5的界面化小程式專屬播放器,大家可以多多優化修改界面使其更完美吖!
準備好簡單的播放器素材按鈕:

附主原始碼:
class VideoPlayer(QWidget):
def __init__(self, parent=None, **kwargs):
super(VideoPlayer, self).__init__(parent)
# 初始化視窗
self.setWindowTitle('專屬視頻播放器 ')
self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'images/icon.png')))
self.setGeometry(300, 50, 810, 600)
self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
palette = QPalette()
palette.setColor(QPalette.Background, Qt.gray)
self.setPalette(palette)
# 定義組件
# --視頻播放插件
self.video_widget = QVideoWidget(self)
self.video_widget.setGeometry(QRect(5, 5, 800, 520))
palette = QPalette()
palette.setColor(QPalette.Background, Qt.black)
self.video_widget.setPalette(palette)
self.video_widget.setStyleSheet('background-color:#000000')
self.player = QMediaPlayer(self)
self.player.setVideoOutput(self.video_widget)
self.player.setVolume(50)
# --當前的視頻路徑
self.video_line_edit = QLineEdit('')
# --選擇視頻按鈕
self.select_video_btn = QPushButton('選擇')
# --播放按鈕
self.play_btn = QPushButton(self)
self.play_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/play.png')))
self.play_btn.setIconSize(QSize(25, 25))
self.play_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;border-radius:35px;}''')
self.play_btn.setCursor(QCursor(Qt.PointingHandCursor))
self.play_btn.setToolTip('播放')
self.play_btn.setFlat(True)
# --暫停按鈕
self.pause_btn = QPushButton('')
self.pause_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/pause.png')))
self.pause_btn.setIconSize(QSize(25, 25))
self.pause_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;}''')
self.pause_btn.setCursor(QCursor(Qt.PointingHandCursor))
self.pause_btn.setToolTip('暫停')
self.pause_btn.setFlat(True)
self.pause_btn.hide()
# --播放進度
self.play_progress_label = QLabel('00:00 / 00: 00')
self.play_progress_slider = QSlider(Qt.Horizontal, self)
self.play_progress_slider.setMinimum(0)
self.play_progress_slider.setSingleStep(1)
self.play_progress_slider.setGeometry(QRect(0, 0, 200, 10))
# --音量控制
self.volume_slider = QSlider(Qt.Horizontal)
self.volume_slider.setMinimum(0)
self.volume_slider.setMaximum(100)
self.volume_slider.setValue(50)
self.mute_btn = QPushButton('')
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/sound.png')))
self.mute_btn.setIconSize(QSize(25, 25))
self.mute_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;}''')
self.mute_btn.setCursor(QCursor(Qt.PointingHandCursor))
self.mute_btn.setToolTip('禁音')
self.mute_btn.setFlat(True)
self.volume_label = QLabel('50')
# --布局
v_layout = QVBoxLayout()
v_layout.setSpacing(0)
v_layout.addStretch()
h_layout = QHBoxLayout()
h_layout.setSpacing(15)
h_layout.addWidget(self.video_line_edit, 2, Qt.AlignVCenter | Qt.AlignVCenter)
h_layout.addWidget(self.select_video_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
v_layout.addLayout(h_layout)
h_layout = QHBoxLayout()
h_layout.setSpacing(2)
h_layout.addWidget(self.play_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.pause_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.play_progress_label, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.play_progress_slider, 15, Qt.AlignVCenter | Qt.AlignVCenter)
h_layout.addWidget(self.mute_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.volume_slider, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.volume_label, 0, Qt.AlignCenter | Qt.AlignVCenter)
v_layout.addLayout(h_layout)
self.setLayout(v_layout)
# 事件系結
self.player.durationChanged.connect(self.setVideoLength)
self.player.positionChanged.connect(self.setPlayProgress)
self.select_video_btn.clicked.connect(self.openvideo)
self.play_btn.clicked.connect(self.playvideo)
self.pause_btn.clicked.connect(self.pausevideo)
self.mute_btn.clicked.connect(self.mute)
self.volume_slider.valueChanged.connect(self.setVolume)
self.play_progress_slider.sliderPressed.connect(self.playProgressSliderPressed)
self.play_progress_slider.sliderReleased.connect(self.playProgressSliderReleased)
'''播放進度條按下ing事件'''
def playProgressSliderPressed(self):
if self.player.state() != 0: self.player.pause()
'''播放進度條按下釋放事件'''
def playProgressSliderReleased(self):
if self.player.state() != 0:
self.player.setPosition(self.play_progress_slider.value())
self.player.play()
'''播放視頻'''
def playvideo(self):
if self.player.duration() == 0: return
self.play_btn.hide()
self.pause_btn.show()
self.player.play()
'''暫停視頻'''
def pausevideo(self):
if self.player.duration() == 0: return
self.play_btn.show()
self.pause_btn.hide()
self.player.pause()
'''禁音'''
def mute(self):
if self.player.isMuted():
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/sound.png')))
self.player.setMuted(False)
self.volume_label.setText('50')
self.volume_slider.setValue(50)
self.player.setVolume(50)
else:
self.player.setMuted(True)
self.volume_label.setText('0')
self.volume_slider.setValue(0)
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/mute.png')))
'''打開視頻檔案'''
def openvideo(self):
# 打開并顯示視頻路徑
filepath = QFileDialog.getOpenFileName(self, '請選擇視頻', '.')
if filepath[0]:
self.video_line_edit.setText(filepath[0])
# 將視頻路徑初始化進視頻播放插件
filepath = self.video_line_edit.text()
if not os.path.exists(filepath): return
fileurl = QUrl.fromLocalFile(filepath)
if fileurl.isValid():
self.player.setMedia(QMediaContent(fileurl))
self.player.setVolume(50)
'''設定音量'''
def setVolume(self):
value = self.volume_slider.value()
if value:
self.player.setMuted(False)
self.player.setVolume(value)
self.volume_label.setText(str(value))
self.volume_slider.setValue(value)
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/sound.png')))
else:
self.player.setMuted(True)
self.volume_label.setText('0')
self.volume_slider.setValue(0)
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/mute.png')))
'''播放進度設定'''
def setPlayProgress(self):
_, right = self.play_progress_label.text().split('/')
position = self.player.position() + 1
second = int(position / 1000 % 60)
minute = int(position / 1000 / 60)
left = str(minute).zfill(2) + ':' + str(second).zfill(2)
self.play_progress_label.setText(left + ' /' + right)
self.play_progress_slider.setValue(position)
'''視頻時長顯示更改'''
def setVideoLength(self):
left, _ = self.play_progress_label.text().split('/')
duration = self.player.duration()
self.play_progress_slider.setMaximum(duration)
second = int(duration / 1000 % 60)
minute = int(duration / 1000 / 60)
right = str(minute).zfill(2) + ':' + str(second).zfill(2)
self.play_progress_label.setText(left + '/ ' + right)
'''關閉視窗'''
def closeEvent(self, event):
self.player.stop()
'''改變視窗大小'''
def resizeEvent(self, event):
size = event.size()
self.video_widget.setGeometry(5, 5, size.width() - 5, size.height() - 80)
效果如下:


?啊~~擊中我的心臟,我“死了”~真好看~
總結
好啦!我又活過來了,這款專屬的視頻播放器你也想擁有嘛?
如需完整的專案原始碼+全部的素材老規矩原始碼基地見:#私信小編06#或者點擊藍色字體即可免費獲取打包的原始碼!
記得三連哦~mua 你們的支持是我最大的動力!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302596.html
標籤:其他
上一篇:看不懂手語怎么辦?用Python和Opencv完美復刻出來!這樣總看的懂了吧!
下一篇:【3D目標檢測/跟蹤】Center-based 3D Object Detection and Tracking閱讀筆記(2021)
