首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有些网站是如何下载YouTube字幕的?

有些网站是如何下载YouTube字幕的?
EN

Stack Overflow用户
提问于 2017-10-21 14:41:01
回答 3查看 5.7K关注 0票数 16

这是一个重复的如果你不是YouTube的所有者,它禁止下载视频标题吗?获取YouTube标题如果你不是YouTube的所有者,它禁止下载视频标题吗?问题,它们基本上都说,除非您是所有者,或者没有启用第三方贡献,否则通过YouTube API下载标题是不可能的;然而,我的问题是如何让http://downsub.com/http://www.lilsubs.com/这样的站点能够访问所有的标题?

换句话说,当我自己访问YouTube API (即使使用youtubepartneryoutube.force-ssl作用域)时,我只能下载一些视频的标题,但是当我尝试在其他站点上使用403: The permissions associated with the request are not sufficient to download the caption track. The request might not be properly authorized, or the video order might not have enabled third-party contributions for this caption.失败的相同视频时,它就可以正常工作。我假设他们使用YouTube API来访问字幕,但是他们使用的是什么特殊的酱汁呢?某个特殊搭档的钥匙?不同的API版本?他们是自己从视频里刮下来的还是怎么的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-24 15:56:29

发送GET请求:

代码语言:javascript
运行
复制
http://video.google.com/timedtext?lang={LANG}&v={VIDEOID}

注释中的视频示例:qWZjRA

让我们看看您的另一个例子,即https://www.youtube.com/watch?v=7068mw-6lmI (我同意您的评论中的区分部分)。

该视频有多个字幕可用。

  • 英语
  • 韩语
  • 西班牙语
  • 韩语(自动生成)又称自动语音识别( asr )。

这些表示字幕name参数(即name=English)。

lang代表国家代码。在您的示例中:https://www.youtube.com/api/timedtext?lang=es-MX&v=7068mw-6lmI&name=Spanish

如果字幕轨道可用,则可以对其进行转换,即使用tlang参数。

代码语言:javascript
运行
复制
https://www.youtube.com/api/timedtext?lang=en&v=7068mw-6lmI&name=English&tlang=lv
https://www.youtube.com/api/timedtext?lang=ko&v=7068mw-6lmI&name=Korean&tlang=lv

这将是我的出价,这些网站正在使用,即翻译的可用字幕轨道(确认通过尝试使用一个视频没有字幕轨道作为输入他们的一个网站)。

至于asr签名似乎总是需要的,但是只要有一个字幕轨道可用,您就可以使用它进行翻译。例如,在您的OP注释示例中:

代码语言:javascript
运行
复制
https://www.youtube.com/api/timedtext?lang=en&v=vx6NCUyg1NE&tlang=lv

看起来,最后一个例子是特殊的,因为两个字幕轨道都是asr (checked with Chrome -> Inspect -> Network),因此您需要省略字幕name参数部分。不幸的是,这种差异在YouTube视频的设置轮中是不可见的。

票数 17
EN

Stack Overflow用户

发布于 2022-01-18 14:13:49

2022年的答复:

选项1:向网页发送一个curl请求:curl -L "https://youtu.be/YbJOTdZBX1g",在结果中搜索timedtext,您将得到一个URL。将\u0026替换为&,您将获得副标题的链接。

选项2:使用yt-dlp包:

代码语言:javascript
运行
复制
# For installing see: https://github.com/yt-dlp/yt-dlp#with-pip
from yt_dlp import YoutubeDL

ydl_opts = {
    "skip_download": True,
    "writesubtitles": True,
    "subtitleslangs": ["all", "-live_chat"],
    # Looks like formats available are vtt, ttml, srv3, srv2, srv1, json3
    "subtitlesformat": "json3",
    # You can skip the following option
    "sleep_interval_subtitles": 1,
}
with YoutubeDL(ydl_opts) as ydl:
    ydl.download(["YbJOTdZBX1g"])
票数 5
EN

Stack Overflow用户

发布于 2017-10-25 05:37:23

Youtube使用了一个非官方API:

代码语言:javascript
运行
复制
https://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEO_ID}

LANG,这是ISO 639-1 2字母国家代码。就你的例子而言,应该是:

qWZjRA

您可以在“网络”选项卡中检查它,同时切换关闭的标题按钮:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46864428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档