这是一个重复的如果你不是YouTube的所有者,它禁止下载视频标题吗?、获取YouTube标题和如果你不是YouTube的所有者,它禁止下载视频标题吗?问题,它们基本上都说,除非您是所有者,或者没有启用第三方贡献,否则通过YouTube API下载标题是不可能的;然而,我的问题是如何让http://downsub.com/或http://www.lilsubs.com/这样的站点能够访问所有的标题?
换句话说,当我自己访问YouTube API (即使使用youtubepartner
和youtube.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版本?他们是自己从视频里刮下来的还是怎么的?
发布于 2017-10-24 15:56:29
发送GET请求:
http://video.google.com/timedtext?lang={LANG}&v={VIDEOID}
注释中的视频示例:qWZjRA
让我们看看您的另一个例子,即https://www.youtube.com/watch?v=7068mw-6lmI (我同意您的评论中的区分部分)。
该视频有多个字幕可用。
这些表示字幕name
参数(即name=English)。
lang
代表国家代码。在您的示例中:https://www.youtube.com/api/timedtext?lang=es-MX&v=7068mw-6lmI&name=Spanish
如果字幕轨道可用,则可以对其进行转换,即使用tlang
参数。
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注释示例中:
https://www.youtube.com/api/timedtext?lang=en&v=vx6NCUyg1NE&tlang=lv
看起来,最后一个例子是特殊的,因为两个字幕轨道都是asr
(checked with Chrome -> Inspect -> Network
),因此您需要省略字幕name
参数部分。不幸的是,这种差异在YouTube视频的设置轮中是不可见的。
发布于 2022-01-18 14:13:49
2022年的答复:
选项1:向网页发送一个curl请求:curl -L "https://youtu.be/YbJOTdZBX1g"
,在结果中搜索timedtext
,您将得到一个URL。将\u0026
替换为&
,您将获得副标题的链接。
选项2:使用yt-dlp
包:
# 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"])
发布于 2017-10-25 05:37:23
Youtube使用了一个非官方API:
https://www.youtube.com/api/timedtext?lang={LANG}&v={VIDEO_ID}
LANG
,这是ISO 639-1 2字母国家代码。就你的例子而言,应该是:
您可以在“网络”选项卡中检查它,同时切换关闭的标题按钮:
https://stackoverflow.com/questions/46864428
复制相似问题