首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >安装pytube后,xml到srt的转换不起作用

安装pytube后,xml到srt的转换不起作用
EN

Stack Overflow用户
提问于 2021-08-13 22:14:40
回答 2查看 620关注 0票数 1

我已经安装了pytube来从一些youtube视频中提取字幕。下面的两段代码都给出了xml标题。

代码语言:javascript
运行
AI代码解释
复制
from pytube import YouTube
yt = YouTube('https://www.youtube.com/watch?v=4ZQQofkz9eE')
caption = yt.captions['a.en']
print(caption.xml_captions)

也正如在文档中提到的

代码语言:javascript
运行
AI代码解释
复制
yt = YouTube('http://youtube.com/watch?v=2lAe1cqCOXo')
caption = yt.captions.get_by_language_code('en')
caption.xml_captions

但在这两种情况下,我都会得到xml输出以及何时使用

代码语言:javascript
运行
AI代码解释
复制
print(caption.generate_srt_captions())

我得到一个错误,如下所示。你能帮助解压srt格式吗?

代码语言:javascript
运行
AI代码解释
复制
KeyError
~/anaconda3/envs/myenv/lib/python3.6/site-packages/pytube/captions.py in 
generate_srt_captions(self)
49         recompiles them into the "SubRip Subtitle" format.
50         """
51         return self.xml_caption_to_srt(self.xml_captions)
52 
53     @staticmethod

~/anaconda3/envs/myenv/lib/python3.6/site-packages/pytube/captions.py in 
xml_caption_to_srt(self, xml_captions)
81             except KeyError:
82                 duration = 0.0
83             start = float(child.attrib["start"])
84             end = start + duration
85             sequence_number = i + 1  # convert from 0-indexed to 1.

KeyError: 'start'
EN

回答 2

Stack Overflow用户

发布于 2021-08-28 10:29:56

这是库本身的一个bug。下面的一切都是在pytube 11.01中完成的。在captions.py文件的第76行中,替换:

代码语言:javascript
运行
AI代码解释
复制
for i, child in enumerate(list(root)):

至:

代码语言:javascript
运行
AI代码解释
复制
for i, child in enumerate(list(root.findall('body/p'))):

然后在第83行,替换为:

代码语言:javascript
运行
AI代码解释
复制
duration = float(child.attrib["dur"])

至:

代码语言:javascript
运行
AI代码解释
复制
duration = float(child.attrib["d"])

然后在第86行,替换为:

代码语言:javascript
运行
AI代码解释
复制
start = float(child.attrib["start"])

至:

代码语言:javascript
运行
AI代码解释
复制
start = float(child.attrib["t"])

如果只显示行数和时间,而不显示字幕文本,则替换第77行:

代码语言:javascript
运行
AI代码解释
复制
text = child.text or ""

至:

代码语言:javascript
运行
AI代码解释
复制
text = ''.join(child.itertext()).strip()
if not text:
    continue

它适用于我,python 3.9,pytube 11.01。祝你好运!

票数 2
EN

Stack Overflow用户

发布于 2021-08-31 11:23:39

我在captions.py文件的源代码上做了一些工作。只需将此文件的整个代码替换为以下代码:

代码语言:javascript
运行
AI代码解释
复制
import math
import os
import time
import xml.etree.ElementTree as ElementTree
from html import unescape
from typing import Dict, Optional

from pytube import request
from pytube.helpers import safe_filename, target_directory


class Caption:

    def __init__(self, caption_track: Dict):

        self.url = caption_track.get("baseUrl")

        name_dict = caption_track['name']
        if 'simpleText' in name_dict:
            self.name = name_dict['simpleText']
        else:
            for el in name_dict['runs']:
                if 'text' in el:
                    self.name = el['text']

        self.code = caption_track["vssId"]

        self.code = self.code.strip('.')

    @property
    def xml_captions(self) -> str:

        return request.get(self.url)

    def generate_srt_captions(self) -> str:

        return self.xml_caption_to_srt(self.xml_captions)

    @staticmethod
    def float_to_srt_time_format(d: float) -> str:

        fraction, whole = math.modf(d/1000)
        time_fmt = time.strftime("%H:%M:%S,", time.gmtime(whole))
        ms = f"{fraction:.3f}".replace("0.", "")
        return time_fmt + ms

    def xml_caption_to_srt(self, xml_captions: str) -> str:

        segments = []
        root = ElementTree.fromstring(xml_captions)
        count_line = 0
        for i, child in enumerate(list(root.findall('body/p'))):
        
            text = ''.join(child.itertext()).strip()
            if not text:
                continue
            count_line += 1
            caption = unescape(text.replace("\n", " ").replace("  ", " "),)
            try:
                duration = float(child.attrib["d"])
            except KeyError:
                duration = 0.0
            start = float(child.attrib["t"])
            end = start + duration
            try:
                end2 = float(root.findall('body/p')[i+2].attrib['t'])
            except:
                end2 = float(root.findall('body/p')[i].attrib['t']) + duration
            sequence_number = i + 1  # convert from 0-indexed to 1.
            line = "{seq}\n{start} --> {end}\n{text}\n".format(
                seq=count_line,
                start=self.float_to_srt_time_format(start),
                end=self.float_to_srt_time_format(end2),
                text=caption,
            )
            segments.append(line)

        return "\n".join(segments).strip()

    def download(
        self,
        title: str,
        srt: bool = True,
        output_path: Optional[str] = None,
        filename_prefix: Optional[str] = None,
    ) -> str:

        if title.endswith(".srt") or title.endswith(".xml"):
            filename = ".".join(title.split(".")[:-1])
        else:
            filename = title

        if filename_prefix:
            filename = f"{safe_filename(filename_prefix)}{filename}"

        filename = safe_filename(filename)

        filename += f" ({self.code})"

        if srt:
            filename += ".srt"
        else:
            filename += ".xml"

        file_path = os.path.join(target_directory(output_path), filename)

        with open(file_path, "w", encoding="utf-8") as file_handle:
            if srt:
                file_handle.write(self.generate_srt_captions())
            else:
                file_handle.write(self.xml_captions)

        return file_path

    def __repr__(self):
        return '<Caption lang="{s.name}" code="{s.code}">'.format(s=self)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68780808

复制
相关文章
Rasa NLU 实践
learn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code
Michael阿明
2022/11/18
1.4K0
Rasa NLU 实践
使用Botkit和Rasa NLU构建智能聊天机器人
我们每天都会听到关于有能力涉及旅游、社交、法律​​、支持、销售等领域的新型机器人推出的新闻。根据我最后一次查阅的数据,单单Facebook Messenger就拥有超过11000个机器人,然而到我写这篇文章的时候,估计又已经增加了几千台。第一代的机器人由于它们只能根据对话中的关键字来分析有限的一些问题,因此显得十分的愚笨。但是随着像Wit.ai, API.ai, Luis.ai, Amazon Lex, IBM Watson等机器学习服务和NLP自然语言处理(Natural Language Processing)的商品化,促进了像donotpay 和 chatShopper这样的智能机器人的发展 。
花落花飞去
2018/01/29
5.8K0
使用Botkit和Rasa NLU构建智能聊天机器人
什么是Rasa智能机器人?如何与LLM结合?
之前写过一篇介绍用Rasa结合类似于GPT这种LLM应用的项目:RasaGpt——一款基于Rasa和LLM的聊天机器人平台
山行AI
2023/06/14
6.3K0
什么是Rasa智能机器人?如何与LLM结合?
rasa 介绍文档
1. Rasa介绍 1.1 架构 Rasa Open Source: NLU (理解语义) + Core (决定对话中每一步执行的actions) Rasa SDK: Action Server (调用自定义的 actions) Rasa NLU 理解用户的对话,提取出感兴趣的信息 (如意图分类、实体提取等),以pipeline的方式处理用户对话,在config.yml中配置。 Rasa Core 根据NLU输出的信息、以及Tracker记录的历史信息,得到上下文的语境:预测用户当前最可能表达的
小爷毛毛_卓寿杰
2022/05/10
2.5K0
rasa 介绍文档
Rasa 聊天机器人专栏(二):命令行界面
rasa init命令将询问你是否要使用此数据训练初始模型。如果你回答否,则models目录将为空。
磐创AI
2019/12/12
3.9K0
Rasa 聊天机器人专栏(二):命令行界面
Rasa 聊天机器人专栏(一):基本原理介绍
本页面解释了用Rasa构建助手的基本原理,并展示了Rasa项目的结构。你可以在这里测试它,而不需要安装任何东西。你也可以安装Rasa并在命令行中执行。
磐创AI
2019/12/10
3.3K0
Rasa 聊天机器人专栏(一):基本原理介绍
Rasa Core实践 报时机器人
learn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code
Michael阿明
2022/12/01
1.2K0
用 TensorFlow_text(3) 构建 Rasa 中文分词 tokenizer
前一段时间简单了解 tensorflow_text 简单中文分词使用[1],再结合 Rasa 的学习,就萌生出模仿 Rasa 的结巴分词 tokenizer,造一个 Tensorflow_text_tokenizer。
coding01
2021/02/24
1.5K0
Rasa 聊天机器人专栏(五):模型评估
机器学习中的标准技术是将一些数据作为测试集分开。你可以使用以下方法将NLU训练数据拆分为训练集和测试集:
磐创AI
2019/12/23
2.3K0
Rasa 聊天机器人专栏(五):模型评估
Rasa Stack:创建支持上下文的人工智能助理和聊天机器人教程
Rasa Stack 是一组开放源码机器学习工具,供开发人员创建支持上下文的人工智能助理和聊天机器人:
磐创AI
2019/05/15
1.9K0
基于RASA的task-orient对话系统解析(一)
由于换工作以及家里的事,很久没有写东西了。最近因为工作内容,需要做任务型对话系统的相关研究和开发。趁此机会,总结一下rasa框架的基本内容,包括基本架构,代码级别的分析,以及使用上的一些tips。需要注意,本文不会详细描述如何简单构建一个小demo的流程,这个在rasa的doc和一些博客上都有很好的例子,我这里就不重复引用了。贴一些链接,有兴趣的同学可以去这些地方看看。
AINLP
2019/08/28
3.2K0
基于RASA的task-orient对话系统解析(一)
Rasa 聊天机器人专栏开篇
Rasa 是最火的聊天机器人框架,是基于机器学习和自然语言处理技术开发的系统。Rasa 中文官方文档包括聊天机器人,上下文管理,多伦对话,意图识别,填槽,中文聊天机器人开发必备手册。
磐创AI
2019/12/06
2.8K0
Rasa 聊天机器人专栏(六):验证数据
要验证域文件,NLU数据或故事数据中是否存在任何错误,请运行验证脚本。你可以使用以下命令运行它:
磐创AI
2020/03/04
7350
北邮张庆恒:如何基于 rasa 搭建一个中文对话系统 (有源码视频)| 分享总结
对话系统是自然语言处理的一个热门话题,而自然语言理解则是对话系统的关键组成部分,现有的很多自然语言理解工具往往以服务的方式获取(Google 的 API.ai, Facebook 的 Wit.ai 等),使用这些服务往往需要向服务提供商提供自己的数据,并且根据自己业务调试模型很不方便。本文为大家介绍了一种新方法,即如何基于 rasa 搭建一个中文对话系统。 在近期 AI 研习社举办的线上免费公开课上,来自北京邮电大学网络技术研究院的张庆恒分享了基于 rasa nlu 构建自己的自然语言理解工具,并结合 r
AI研习社
2018/03/16
4.7K0
北邮张庆恒:如何基于 rasa 搭建一个中文对话系统 (有源码视频)| 分享总结
RasaGpt——一款基于Rasa和LLM的聊天机器人平台
在ChatGpt引领的AI浪潮下,一大批优秀的AI应用应运而生,其中不泛一些在某些行业或领域中探索AI技术或应用落地的案例。不得不说,AI正在重塑各个行业。众所周知,Rasa是一个非常优秀的,用于构建开源AI助手的框架,它允许开发人员创建自然语言对话系统,包括聊天机器人、语音助手和智能助手。本文介绍的是一个基于Rasa和Langchain之上,通过将LLM的能力赋予Rasa建立的聊天机器人平台。
山行AI
2023/06/14
4.5K0
RasaGpt——一款基于Rasa和LLM的聊天机器人平台
Rasa 基于规则的对话管理: 天气预报机器人
learn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code
Michael阿明
2022/12/13
2.1K0
Rasa 基于规则的对话管理: 天气预报机器人
Rasa 基于知识库的问答 音乐百科机器人
learn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code
Michael阿明
2022/12/25
1.4K0
Rasa 基于知识库的问答 音乐百科机器人
Rasa 使用ResponseSelector实现FAQ和闲聊
learn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code
Michael阿明
2022/12/01
8970
Rasa 使用ResponseSelector实现FAQ和闲聊
Awesome-Chinese-NLP:中文自然语言处理相关资料
推荐Github上一个很棒的中文自然语言处理相关资料的Awesome资源:Awesome-Chinese-NLP ,Github链接地址,点击文末"阅读原文"可直达:
AINLP
2019/10/10
5.7K1
Awesome-Chinese-NLP:中文自然语言处理相关资料
Rasa 聊天机器人专栏(八):在Docker上运行Rasa
这是如何使用Docker构建Rasa助手的指南。如果你之前没有使用过Rasa,我们建议你先Rasa教程开始。
磐创AI
2020/03/04
5.8K0

相似问题

Rasa NLU模型

11

Rasa nlu服务器故障

369

数据隐私Rasa NLU

168

Rasa核与Rasa nlu的区别

510

Rasa NLU安装问题

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档