在 python-vlc 中使用字幕的问题

问题描述 投票:0回答:1

这里完全是新手……

我目前正在尝试使用 python-vlc 和 PyQt5(在 Mac 上)创建一个视频播放器,并且进展顺利...... 我的代码非常混乱和令人尴尬,并且充满了命名尴尬的变量,所以我必须彻底清理它才能敢将其发布到这里(对此表示歉意)。然而,与此同时,我正在努力解决一个具体问题,我希望有人可以帮助我:

每当有事情发生时(向前跳动、改变速度、音量等),我都会尝试在屏幕上获得一些文本反馈。在我看来,最简单的方法是使用 Vlc 内置的“marquee”功能,但我真的无法让它工作。 我到处搜索有关如何使用它的示例或文档,但发现的页面很少,其中大部分都指向“python-vlc”发行版(iirc)附带的巨大 vlc.py 文件。显然,这超出了我的能力范围,因为我不太清楚那里发生了什么,或者如何从中提取我需要的信息。

我想知道任何人都可以提供或向我指出一个将 marquee 与 python-vlc 一起使用的非常简单的示例。比如播放视频 -> 按按钮 -> 出现字幕文本。非常感谢!!!

让我快速概述一下我所做的尝试:

我尝试在创建 vlc 实例时添加选取框选项:

self.Instance = vlc.Instance("--sub-source marq") 

和:

self.Instance = vlc.Instance("--sub-filter=marq")

我也尝试过:

self.instance = vlc.Instance("--video-title-show --video-title-timeout 1 --sub-source marq --verbose -1")
#按照某处的建议

还尝试在创建媒体播放器时添加选项:

self.mediaplayer = self.instance.media_player_new("sub-filter=marq") #completely breaks video playback

和:

self.mediaplayer = self.instance.media_player_new(sys.argv[1], "sub-filter=marq") # IndexError: list index out of range

我分别尝试了每一种以及不同的组合,但都无济于事......

当我添加该行时(无论是在

__init__
方法还是任何其他方法中):

self.mediaplayer.video_set_marquee_int(vlc.VideoMarqueeOption.Enable, 1)

没有生成错误,也没有发生任何事情......

当我尝试添加另一行包含选取框选项时,例如:

self.mediaplayer.video_set_marquee_string(VideoMarqueeOption.Text, "Some Text")

我明白了

NameError: name 'VideoMarqueeOption' is not defined

所以我真的不明白这里发生了什么......

此时,我们将不胜感激任何有关此问题的帮助(只是请不要再次向我推荐该

vlc.py
文件……)

python overlay libvlc marquee python-vlc
1个回答
0
投票

这是我能想到的最简单的例子。

import vlc
import time

instance = vlc.Instance('--no-xlib --quiet --sub-source=marq')
player = instance.media_player_new()
media = instance.media_new("/home/rolf/BBB.ogv")
player.set_media(media)
player.video_set_marquee_int(0, 1) #Enable
player.video_set_marquee_int(6, 48)  # size in pixels
player.video_set_marquee_int(4, 8) # position | bottom
player.video_set_marquee_int(7, 0) # timeout

#player.video_set_marquee_string(1, 'First marquee String') # using a fixed parameter
player.video_set_marquee_string(vlc.VideoMarqueeOption.Text, 'First marquee String') # using the vlc function

player.play()
for iter in range(45):
    if iter == 15:
        player.video_set_marquee_string(1, "Marquee Changes") # new text
    if iter == 30:
        player.video_set_marquee_string(1, "Final Marquee Change") # new text
    time.sleep(0.5)

我收到 NameError:名称“VideoMarqueeOption”未定义

这是因为

VideoMarqueeOption
是 vlc.py 中的一个函数,它将命名选项转换为数字。

您也会遇到类似的问题

Position

因此,要么使用 vlc 函数,即

vlc.VideoMarqueeOption
,要么使用固定参数,例如1

在这一点上,我会破灭你的希望,并建议你参考 vlc 文档或 vlc.py 来获取选项及其等效数字的完整列表。 :)

© www.soinside.com 2019 - 2024. All rights reserved.