当前位置: 首页 > article >正文

Python中使用vlc库实现视频播放功能

文章目录

  • 前言
  • 1. 环境准备
    • 1.1Python安装
    • 1.2选择Python开发环境
    • 1.3安装必要库
  • 2. 基础播放示例
  • 3. 常用播放控制功能
  • 4. 事件监听
  • 5. 播放网络流媒体
  • 6. 结合 GUI 库制作视频播放器(以 Tkinter 为例)


前言

本教程主要包含打开文件、播放和停止按钮,能够实现基本的视频播放控制功能。


1. 环境准备

1.1Python安装

访问 Python 官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载并安装 Python 3.x 版本。安装时勾选 “Add Python to PATH”,方便在命令行中使用 Python。

Python 3.11安装教程:https://blog.csdn.net/u014164303/article/details/145549489
Python 3.13安装教程:https://blog.csdn.net/u014164303/article/details/146024500

Python 3.11下载地址:https://pan.quark.cn/s/9c44793cb24c
Python 3.13下载地址:https://pan.quark.cn/s/bce37ebd7f70

1.2选择Python开发环境

PyCharm 社区版(免费)或专业版(需付费或申请教育版)。安装完成后,打开 PyCharm,创建一个新的项目,在项目设置中选择之前创建的虚拟环境作为项目的 Python 解释器。PyCharm 功能强大,提供代码自动补全、调试等功能,适合开发大型项目。

Pycharm安装教程:https://blog.csdn.net/u014164303/article/details/145674773
PyCharm下载地址:https://pan.quark.cn/s/5756c8cf8b2a

1.3安装必要库

安装 VLC 媒体播放器:python-vlc 库依赖于 vlc 媒体播放器。
安装 python-vlc 库:打开命令行工具,使用 pip 命令安装,执行pip install python-vlc。

2. 基础播放示例

下面是实现基础视频播放功能的代码:

import vlc
import time

# 创建VLC实例
instance = vlc.Instance()
# 创建播放器
player = instance.media_player_new()
# 设置要播放的视频文件(需替换为实际路径)
media = instance.media_new("你的视频路径.mp4")
player.set_media(media)
# 开始播放
player.play()
# 等待5秒
time.sleep(5)
# 暂停播放
player.pause()
# 再等待3秒
time.sleep(3)
# 继续播放
player.play()

上述代码中,先创建了 vlc 实例和媒体播放器,然后指定要播放的视频文件,调用play方法开始播放,通过pause方法暂停播放。

3. 常用播放控制功能

import vlc

# 创建VLC实例
instance = vlc.Instance()
# 创建播放器
player = instance.media_player_new()
# 设置要播放的视频文件(需替换为实际路径)
media = instance.media_new("你的视频路径.mp4")
player.set_media(media)
player.play()

# 获取视频时长(毫秒)
duration = player.get_length()
print(f"视频时长: {duration} 毫秒")

# 获取当前播放位置(毫秒)
current_time = player.get_time()
print(f"当前播放位置: {current_time} 毫秒")

# 跳转到指定位置(毫秒),例如跳转到10秒处(10 * 1000)
player.set_time(10 * 1000) 

# 设置音量(0 - 100)
player.audio_set_volume(50) 

# 获取当前音量
volume = player.audio_get_volume()
print(f"当前音量: {volume}")

# 设置播放速度(1.0为正常速度,0.5是半速,2.0是倍速)
player.set_rate(1.5) 

这些代码展示了获取视频时长、当前播放位置、控制播放进度、调整音量和播放速度的方法。

4. 事件监听

可以监听播放过程中的各种事件,比如播放结束、遇到错误等,示例如下:

import vlc
import time

# 创建VLC实例
instance = vlc.Instance()
# 创建播放器
player = instance.media_player_new()
# 设置要播放的视频文件(需替换为实际路径)
media = instance.media_new("你的视频路径.mp4")
player.set_media(media)

# 定义事件处理函数
def end_reached_callback(event):
    print("播放结束!")

def error_callback(event):
    print("播放遇到错误!")

# 创建事件管理器
event_manager = player.event_manager()
# 注册事件监听器
event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, end_reached_callback)
event_manager.event_attach(vlc.EventType.MediaPlayerEncounteredError, error_callback)

# 播放视频
player.play()

# 保持程序运行,以便监听事件
while True:
    time.sleep(1)

上述代码中,定义了播放结束和播放错误的回调函数,并通过事件管理器注册了对应的事件监听器。

5. 播放网络流媒体

python-vlc 也支持播放网络流媒体,示例如下:

import vlc

# 创建VLC实例
instance = vlc.Instance()
# 创建播放器
player = instance.media_player_new()
# 设置要播放的网络流媒体地址
media = instance.media_new("网络流媒体地址")
player.set_media(media)
player.play()

将网络流媒体地址替换为实际有效的流媒体链接,即可播放网络视频。

6. 结合 GUI 库制作视频播放器(以 Tkinter 为例)

下面是一个简单的结合 Tkinter 库实现的视频播放器示例,用户可以选择视频文件并播放:

import tkinter as tk
from tkinter import filedialog
import vlc
import platform

class VideoPlayer(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Python视频播放器")
        self.geometry("800x600")
        
        # 创建vlc实例
        self.instance = vlc.Instance()
        self.player = self.instance.media_player_new()
        
        # 创建视频显示区域
        self.video_frame = tk.Frame(self, bg='black')
        self.video_frame.pack(fill=tk.BOTH, expand=True)
        
        # 控制按钮区域
        self.control_frame = tk.Frame(self)
        self.control_frame.pack(fill=tk.X, side=tk.BOTTOM)
        
        # 创建按钮
        self.play_button = tk.Button(self.control_frame, text="播放", command=self.play_video)
        self.play_button.pack(side=tk.LEFT, padx=5, pady=5)
        
        self.stop_button = tk.Button(self.control_frame, text="停止", command=self.stop_video)
        self.stop_button.pack(side=tk.LEFT, padx=5, pady=5)
        
        self.open_button = tk.Button(self.control_frame, text="打开文件", command=self.open_file)
        self.open_button.pack(side=tk.LEFT, padx=5, pady=5)
        
        if platform.system() == "Windows":
            self.hwnd = self.video_frame.winfo_id()
            self.player.set_hwnd(self.hwnd)
        elif platform.system() == "Linux":
            self.player.set_xwindow(self.video_frame.winfo_id())
        elif platform.system() == "Darwin":
            self.player.set_nsobject(self.video_frame.winfo_id())
    
    def open_file(self):
        filename = filedialog.askopenfilename(title="选择视频文件", filetypes=[("视频文件", "*.mp4 *.avi *.mkv")])
        if filename:
            media = self.instance.media_new(filename)
            self.player.set_media(media)
    
    def play_video(self):
        self.player.play()
    
    def stop_video(self):
        self.player.stop()

if __name__ == "__main__":
    app = VideoPlayer()
    app.mainloop()


http://www.kler.cn/a/589971.html

相关文章:

  • STM32 DAC详解:从原理到实战输出正弦波
  • Description of a Poisson Imagery Super Resolution Algorithm 论文阅读
  • 深入解析网络相关概念​​
  • Unity Webgl在编辑器中报错:Cannot connect to destination host
  • 双模型协作机制的deepseek图片识别
  • Unity组件大全之 Effects特效 |(46)Trail Renderer:绘制动态轨迹的艺术
  • Blender材质 - 层权重
  • 关于微信小程序端base64解码问题
  • BI选型建议
  • 【NLP】 1. 文本在计算机里的表示: One-Hot, sparse vector, bag of words
  • 前端解决页面请求大规模并发问题
  • Linux 如何上传本地文件以及下载文件到本地命令总结
  • CAD-随缘:CAD导出PDF 与 PDF导入成CAD
  • 猎豹移动(Cheetah Mobile)
  • LeetCode hot 100 每日一题(10)——56. 合并区间
  • 【VSCode】VSCode常用插件
  • 合成复用原则
  • 云原生函数计算:无服务器架构的基因重组
  • Flask+Vue-Router+JWT实现登录验证
  • [网络] socket编程--udp_echo_server