是否可以从Youtube视频中提取隐藏式字幕脚本?
我们在youtube上有200多个网络广播,每个网络广播至少有一个小时.Youtube已经关闭了所有视频的标题,但似乎用户无法获得它.
我在此博客中尝试过该网址,但它不适用于我们的视频.
http://googlesystem.blogspot.com/2010/10/download-youtube-captions.html
谢谢
在我看来,如果您不是它的所有者,YouTube API 禁止下载视频字幕:
视频的字幕只能由该视频的所有者创建,检索,修改和删除.
上面的链接会导致YouTube API v2.0的文档被弃用,但似乎在v3.0中此政策保持不变.如果您尝试下载视频的标题,则会收到以下403错误:
与请求关联的权限不足以下载字幕轨道.该请求可能未得到适当授权,或者视频订单可能未启用此标题的第三方贡献.
在同一时间,你只需要API_KEY到列出任何的YouTube视频字幕没有任何授权(实例化对象的YouTube在此官方例子):
youtube = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY,
new HttpRequestInitializer() {
public void initialize(HttpRequest request)
throws IOException {
}
}).setApplicationName("youtube-cmdline-search-sample").build();
CaptionListResponse captionListResponse = youtube
.captions()
.list("snippet", "jNhtbmXzIaM")
.setKey(API_KEY)
.execute();
List<Caption> captions = captionListResponse.getItems();
CaptionSnippet snippet;
for (Caption caption : captions) {
snippet = caption.getSnippet();
System.out.println("ID: " + caption.getId());
System.out.println("Name: " + snippet.getName());
System.out.println("Language: " + snippet.getLanguage());
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
那么YouTube API …
如何以编程方式获取正在播放的YouTube视频的字幕?
最初,我尝试通过YouTube API离线进行此操作,但似乎 YouTube禁止获取您不是所有者的视频的字幕。
现在,我正在尝试在线进行。我没有找到用于字幕的YouTube Player Api方法,我也试图通过videojs播放器的方式将 YouTube字幕作为TextTrack与TextTrack一起使用,但是以下方法不起作用:
<html>
<head>
<link href="//vjs.zencdn.net/4.12/video-js.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="//vjs.zencdn.net/4.12/video.js"></script>
<script type="text/javascript" src="../lib/youtube.js"></script>
</head>
<body>
<video id="myvideo"
class="video-js vjs-default-skin vjs-big-play-centered"
controls
preload="auto"
width="640"
height="360">
</video>
<script type="text/javascript">
var myvideo = videojs(
"myvideo",
{
"techOrder": ["youtube"],
"src": "https://www.youtube.com/watch?v=jNhtbmXzIaM"
},
function() {
console.log('Tracks: ' + this.textTracks().length); //zero here :(
/*var aTextTrack = this.textTracks()[0];
aTextTrack.on('loaded', function() {
console.log('here it is');
cues = aTextTrack.cues();
console.log('Ready State', aTextTrack.readyState())
console.log('Cues', …Run Code Online (Sandbox Code Playgroud)