You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python 3.6中使用VLC等待音频文件播放完毕?

在Python 3.6中实现VLC音频播放结束等待的方案

我之前在Python 3.6里折腾VLC音频播放的时候,正好碰到过这个需求,分享几个亲测有效的实现方法给你:

方法一:利用VLC事件监听(推荐)

这是最稳妥的方式,VLC本身提供了事件回调机制,能精准捕捉播放结束的信号,不会有延迟或者误判。

首先确保你装对了兼容Python 3.6的python-vlc库——因为新版本已经不再支持3.6了,所以得指定版本安装:

pip install python-vlc==3.0.11115

然后看示例代码:

import vlc

# 定义播放结束的回调函数
def on_media_finished(event):
    print("音频播放结束啦!")
    global play_done
    play_done = True

# 初始化VLC实例和播放器
vlc_instance = vlc.Instance()
player = vlc_instance.media_player_new()

# 加载目标音频文件
audio_media = vlc_instance.media_new("你的音频文件路径.mp3")
player.set_media(audio_media)

# 绑定播放结束事件
event_manager = player.event_manager()
event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, on_media_finished)

# 标记播放状态
play_done = False

# 开始播放
player.play()

# 等待播放结束
while not play_done:
    pass

# 播放完成后可以执行后续逻辑
print("现在可以处理播放结束后的任务了")

原理很简单:当播放器触发MediaPlayerEndReached事件时,会调用我们定义的回调函数,把play_done设为True,主循环就会退出,继续执行后续代码。

方法二:轮询播放状态(简单粗暴版)

如果觉得事件监听有点繁琐,也可以直接轮询播放器的状态,判断是否还在播放:

import vlc
import time

vlc_instance = vlc.Instance()
player = vlc_instance.media_player_new()
audio_media = vlc_instance.media_new("你的音频文件路径.mp3")
player.set_media(audio_media)

player.play()

# 每隔0.5秒检查一次播放状态
while player.is_playing():
    time.sleep(0.5)

print("音频播放完成!")

这个方法代码更简洁,不过要注意time.sleep的间隔——别设太长,不然播放结束后会有明显延迟;设太短又会占用CPU,0.5秒是个比较均衡的选择。

几个注意点

  • 一定要确认音频文件路径正确,相对路径的话要注意脚本的工作目录,不然会加载失败。
  • 如果播放的是网络音频,player.is_playing()会等到媒体真正开始播放后才返回True,所以不用担心加载时间的问题。
  • Python 3.6的环境下,务必安装指定版本的python-vlc,不然会出现兼容性报错。

内容的提问来源于stack exchange,提问作者Moustafa Mahmoud

火山引擎 最新活动