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

news2025/3/18 8:45:53

文章目录

  • 前言
  • 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.coloradmin.cn/o/2317116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯真题——洛谷 Day10 并查集(枚举)

目录 P8651 [蓝桥杯 2017 省 B] 日期问题 P8635 [蓝桥杯 2016 省 AB] 四平方和 P8651 [蓝桥杯 2017 省 B] 日期问题 思路: 使用scanf读入,枚举从1960到2059,若符合题目形式,加入答案, 从小到大输出:存入结…

Linux应用:程序运行

kill kill命令的这种用法是向指定的进程发送特定信号编号的信号。信号在操作系统中是一种软件中断机制,用于通知进程发生了某种特定事件或要求进程执行特定操作。​ kill - 信号编号 进程 ID 信号编号的含义:不同的信号编号代表不同的事件或操作。例如…

基于SpringBoot+Vue3实现的宠物领养管理平台功能一

一、前言介绍: 1.1 项目摘要 随着社会经济的发展和人们生活水平的提高,越来越多的人开始关注并参与到宠物领养中。宠物已经成为许多家庭的重要成员,人们对于宠物的关爱和照顾也日益增加。然而,传统的宠物领养流程存在诸多不便&a…

SpringCloud 学习笔记2(Nacos)

Nacos Nacos 下载 Nacos Server 下载 | Nacos 官网 下载、解压、打开文件: 更改 Nacos 的启动方式 Nacos 的启动模式默认是集群模式。在学习时需要把他改为单机模式。 把 cluster 改为 standalone,记得保存! 启动startup.cmd Ubuntu 启动…

Blender-MCP服务源码4-初始化项目解读

Blender-MCP服务源码4-初始化项目解读 上篇文章针对Blender开发框架完成了一个基础模板的搭建,并在Blender中成功进行了运行,那这个初始化项目中是如何进行页面效果呈现的,尝试手动进行功能精简来拆解项目代码 1-核心知识点 1)如…

基于eNSP的IPV4和IPV6企业网络规划

基于eNSP的IPV4和IPV6企业网络规划 前言网络拓扑设计功能设计技术详解一、网络设备基础配置二、虚拟局域网(VLAN)与广播域划分三、冗余协议与链路故障检测四、IP地址自动分配与DHCP相关配置五、动态路由与安全认证六、广域网互联及VPN实现七、网络地址转…

C#特性和反射

1。特性概念理解? 特性(Attribute)是用于在【运行时】传递程序中各种元素(比如类、属性、方法、结构、枚举、组件等)行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所…

mysql5.x和mysql8.x查看和设置隔离级别

MySQL的隔离级别 级别标志值描述读未提交READ-UNCOMMITTED0存在脏读、不可重复读、幻读的问题读已提交READ-COMMITTED1解决脏读的问题,存在不可重复读、幻读的问题可重复读REPEATABLE-READ2mysql 默认级别,解决脏读、不可重复读的问题,存在幻…

3.17学习总结

写了两道题 刚开始用的之前做组合输出的方法&#xff0c;时间超限了&#xff0c;想不出怎么优化&#xff0c;后面看了题解&#xff0c;代码如下 #include <stdio.h> #include <stdlib.h> int n,min2e9; int a[11],b[11]; //搜索 void hly(int s,int x,int y) {//当…

Blender材质 - 层权重

层权重 混合着色器 可以让 面朝向的一面显示一种材质 另一面显示另一种材质 就能实现挺不错的材质效果 移动视角 材质会跟着变化 有点类似虚幻的视差节点BumpOffset

【JavaEE】Spring Boot 日志

目录 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 门面 / 外观 模式 2.3 日志级别2.3.1 六大分类2.3.2 使用 2.4 日志级别配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 简单打印日志 一、日志概述 ⽇志主要是为了发现问题, 分析问题, 定位问题…

如何用solidworks画齿轮

齿轮还是很有技术含量的,专业名词太多看不懂, 只会画 (这个东西不能自己想当然画, 齿轮之间不啮合是很有问题的,会积累磨损) 步骤1 打开设计库里的toolbox 选择正齿轮,右键生成零件 需要改的有几个关键的地方,我是只知道内圆外圆所以,对我来说最重要的是标称轴直径 (即正中间…

详解布隆过滤器及其模拟实现

目录 布隆过滤器 引入 概念 工作原理 模拟实现布隆过滤器 哈希函数集 布隆过滤器基本框架 add函数&#xff08;添加到布隆过滤器中&#xff09; contains函数&#xff08;判断是否存在该值&#xff09; 完整代码 布隆过滤器的删除 布隆过滤器的误判率 布隆过滤器的…

element-plus中DatePicker 日期选择器组件的使用

1.选择某一天 代码&#xff1a; <el-date-pickerv-model"invoice_date"type"date"placeholder"请选择日期"style"width: 200px;"clearable /> 运行效果&#xff1a; 问题所在&#xff1a;这个数据的格式不是我们后端需要的那种&…

SvelteKit 最新中文文档教程(4)—— 表单 actions

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …

力扣hot100二刷——二叉树

第二次刷题不在idea写代码&#xff0c;而是直接在leetcode网站上写&#xff0c;“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路&#xff0c;编程也很流利⭐⭐Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答⭐⭐⭐Sl…

字符串哈希从入门到精通

一、基本概念 字符串哈希是将任意长度的字符串映射为固定长度的哈希值&#xff08;通常为整数&#xff09;的技术&#xff0c;核心目标是实现O(1)时间的子串快速比较和高效查询。其本质是通过数学运算将字符串转换为唯一性较高的数值&#xff0c;例如&#xff1a; ​​​​​​…

C语言:编程设计猜数游戏

先由计算机想一个数给用户猜&#xff0c;如果猜对了&#xff0c;提示“right&#xff01;”&#xff0c;猜错了&#xff0c;提示“wrong&#xff01;及大小” 思路&#xff1a;用随机函数rand&#xff08;&#xff09;取到计算机想的数 代码&#xff1a; #include <stdio.…

win10 c++ VsCode 配置PCL open3d并显示

win10 c VsCode配置PCL open3d并显示 一、效果图二、配置步骤2.1 安装vscode2.2 pcl-open3d配置2.3 vscode中设置 三、测试代码四、注意事项及后续 一、效果图 二、配置步骤 2.1 安装vscode vscode下载链接 下载中文插件、c相关插件 2.2 pcl-open3d配置 1&#xff09;下载…

Vala 开发环境搭建

介绍 Vala 是一种使用现代高级抽象的编程语言&#xff0c;与用 C 语言编写的应用程序和库相比&#xff0c;没有施加额外的运行时要求&#xff0c;也不需要使用不同的 ABI。 Vala 使用 GObject 类型系统&#xff0c;并具有额外的代码生成例程&#xff0c;使面向 GNOME 堆栈变得简…