资讯专栏INFORMATION COLUMN

用了都说好的Python专属无广告视频播放器,良心到想为它疯狂打call!

ralap / 2118人阅读

摘要:还记得上学那会,寝室的同学都用的暴风影音,那个时候暴风是真良心,无广告支持的视频格式多,总之用起来非常棒。慢慢地暴风广告越来越多,用起来也越来越卡,也就弃坑了。

导语​

各位新老朋友下午好,我是木木子!掌声在哪里~

咳咳咳.....算了没掌声我也还是要继续叨叨!

大家电脑上应该都有视频播放器吧,什么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.ucloud.cn/yun/120953.html

相关文章

  • javascript对象不完全探索记录02:疯狂call!给谁call什么call

    摘要:注意该方法的作用和方法类似,只有一个区别,就是方法接受的是若干个参数的列表,而方法接受的是一个包含多个参数的数组。指定的参数列表。返回值返回值是你调用的方法的返回值,若该方法没有返回值,则返回。 温馨提示:作者的爬坑记录,对你等大神完全没有价值,别在我这浪费生命温馨提示-续:打call原本是属于我们偶像宅文化中的专业名词,指的是饭们在看live时在台下配合爱豆演出的节奏喊口号,举例:超...

    Shimmer 评论0 收藏0
  • 超好用谷歌浏览器、Sublime Text、Phpstorm、油猴插件合集

    摘要:分享一些超好用插件,打造一个不一样的浏览器编辑器。一谷歌浏览器插件谷歌访问助手强烈推荐一键安装,无需其他配置,即可访问谷歌。谷歌浏览器是很耗内存的,该插件会自动挂起长时间未使用的网页,来释放系统资源。 showImg(https://segmentfault.com/img/remote/1460000014011338); 分享一些超好用插件,打造一个不一样的 GitHub、浏览器、...

    Rango 评论0 收藏0
  • 超好用谷歌浏览器、Sublime Text、Phpstorm、油猴插件合集

    摘要:分享一些超好用插件,打造一个不一样的浏览器编辑器。一谷歌浏览器插件谷歌访问助手强烈推荐一键安装,无需其他配置,即可访问谷歌。谷歌浏览器是很耗内存的,该插件会自动挂起长时间未使用的网页,来释放系统资源。 showImg(https://segmentfault.com/img/remote/1460000014011338); 分享一些超好用插件,打造一个不一样的 GitHub、浏览器、...

    hss01248 评论0 收藏0
  • 新一代智能视频云发展现状分析:五大要素成关键

    摘要:远程医疗这一概念被提出后,已经被广泛应用。但是,如何提高视频传输性能,如何确保家庭基层医疗机构和户外应急的远程医疗快速接入,是当前的远程医疗业务系统面临的主要挑战。 编者按:近日,Gartner最新发布了一份《Five Key Essentials for the New Generation of Intelligent Video Cloud》白皮书报告,报告中针对各行业在视频应用...

    levy9527 评论0 收藏0
  • 2017 我所分享技术文章总结(下)

    摘要:对下半年所分享的文章进行整理,上半年总结的篇好文请点击这里,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细分,已基本可以查找了。 对下半年所分享的文章进行整理,上半年总结的 98 篇好文请点击这里,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细分,已基本可...

    XBaron 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<