在Python中为Kivy Videoplayer添加注释/副标题

时间:2017-09-22 14:43:27

标签: python kivy kivy-language

我正在尝试从网址向Kivy的视频播放器添加字幕。这就是我到目前为止所做的。首先,我只是将字幕链接添加到属性,就像我要添加视频的源链接

一样
VideoPlayer:
    source: root.vid_source
    options: {'allow_stretch': True, 'eos': 'loop'}
    annotations: root.subs_source  ## This doesnt work

根据Kivy文档,我需要一个'jsa'文件,其中包含这样的列表,我想

[
    {"start": 0, "duration": 2,
    "text": "This is an example of annotation"},
    {"start": 2, "duration": 2,
    "bgcolor": [0.5, 0.2, 0.4, 0.5],
    "text": "You can change the background color"}
]

但源链接包含此格式的文本(带有'captions'键的字典是我需要的)

{"captions":[{"duration":1961,"content":"When you have 21 minutes to speak,","startOfParagraph":true,"startTime":1610},{"duration":2976,"content":"two million years seems\nlike a really long time.","startOfParagraph":false,"startTime":3595}

所以我创建了一个新的类来解析给定格式的字幕

class Subtitles:

    def __init__(self, url):
        self.parsed_subs = []
        req = UrlRequest(url, self.got_subtitles)

    def got_subtitles(self, req, results):
        self.parsed_subs = [{"start":sub["startTime"],"duration":sub["duration"], "text": sub["content"]} for sub in results['captions']]

    def get_subtitles(self):
        return self.parsed_subs

对我的Kv文件进行以下更改

#:import playerapp playerapp

VideoPlayer:
  .......
  #### str conversion since it says it accepts only string####
  annotations: str(playerapp.Subtitles(root.subs_source).get_subtitles())

但它没有用。

在看了一下VideoPlayer的源代码之后,我看到在初始化VideoPlayer时它会创建self._annotations_labels,它会填充VideoAnnotation类返回的内容,所以也许我需要把上面的{{1在parsed_subs内,但我在这里感到困惑。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。首先,UrlRequest无法正常工作,因为我在Kivy应用程序之外使用它,结果证明它不能像那样工作。所以我使用urllib库或者你可以使用请求库,这就是它,我犯的错误。 在解析之后,我将文件保存在subtitles.jsa文件中,这是“注释”属性所需要的,现在可以正常工作。