python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...
前言
本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理。
以下文章來源于Charles的皮卡丘 ,作者白露未晞me
Python爬蟲、數據分析、網站開發等案例教程視頻免費在線觀看
https://space.bilibili.com/523606542
這里我們主要利用PyQt5來帶大家寫個簡單的視頻播放器。首先,我們來初始化一下視頻播放器的窗口:
# 初始化窗口
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)
其中setWindowTitle函數用于設置窗口標題,而setWindowIcon函數則用于設置窗口圖標:
接著,我們來定義一些必要的組件,即視頻播放插件:
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)
接著,我們來實現一下各個控件可以觸發的功能。首先是播放和暫停功能,這個很簡單,代碼如下:
'''播放視頻'''
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 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 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)
接著是拖動視頻播放進度條的功能:
'''播放進度條按下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 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 resizeEvent(self, event):
size = event.size()
self.video_widget.setGeometry(5, 5, size.width() - 5, size.height() - 80)
總結
以上是生活随笔為你收集整理的python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Atlas:手淘Native容器化框架和
- 下一篇: mysql 使用rads_bi-rads