日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/14 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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做一个视频播放器...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。