首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取字幕当前显示的文本

如何获取字幕当前显示的文本
EN

Stack Overflow用户
提问于 2020-02-14 03:19:44
回答 1查看 2.2K关注 0票数 0

我想提取一个暂停的视频框的外部网站(如youtube.com)通过console.log字幕文本。

假设外部网站通过webvtt或类似文件提供字幕。

由于字幕文本可能是DOM的一部分,所以可以在浏览器的开发人员控制台中使用JavaScript代码提取文本并在检测到暂停时间后通过console.log()显示它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-14 04:12:26

您可以访问视频的.textTracks,您可以从它的activeCues中获取它们的text值:

代码语言:javascript
复制
initTrack();
video.addEventListener('pause', e => {
 const track = [ ...video.textTracks ]
   .find( track => track.mode === "showing" );
 const texts = [...track.activeCues].map( cue => cue.text );
 console.log( texts.join('\n') );
});


// just to make a VTT accessible in Snippet
function initTrack() {
  const track = document.querySelector("track");
  let vttText = `WEBVTT`;
  for( let i=0; i<35; i++ ) {
    const t1 = (i + '').padStart(2 , '0');
    const t2 = ((i+1) + '').padStart(2 , '0');
    vttText += `
      00:00:${t1}.000 --> 00:00:${t2}.000
      Test${i}`
  }
  const vttBlob = new Blob([vttText], {
    type: 'text/plain'
  });
  track.src = URL.createObjectURL(vttBlob);
}
代码语言:javascript
复制
video { max-height: 150px;  }
::cue { font-size: 30px }
代码语言:javascript
复制
<div>
  <video id="video" controls>
    <source src="https://upload.wikimedia.org/wikipedia/commons/a/a4/BBH_gravitational_lensing_of_gw150914.webm">
    <track default kind="captions" label="English" srclang="en"/>
  </video>
</div>

如果您想在它播放时这样做,那么您可以收听事件:

代码语言:javascript
复制
initTrack();
video.addEventListener("loadedmetadata", (evt) => {
  const track = [...video.textTracks]
    .find(track => track.mode === "showing");
  track.oncuechange = (evt) => {
    const texts = [...track.activeCues].map(cue => cue.text);
    console.log(texts.join("\n"));
  };
});

// just to make a VTT accessible in Snippet
function initTrack() {
  const track = document.querySelector("track");
  let vttText = `WEBVTT`;
  for (let i = 0; i < 35; i++) {
    const t1 = (i + '').padStart(2, '0');
    const t2 = ((i + 1) + '').padStart(2, '0');
    vttText += `
      00:00:${t1}.000 --> 00:00:${t2}.000
      Test${i}`
  }
  const vttBlob = new Blob([vttText], {
    type: 'text/plain'
  });
  track.src = URL.createObjectURL(vttBlob);
}
代码语言:javascript
复制
video {
  max-height: 150px;
}

::cue {
  font-size: 30px
}
代码语言:javascript
复制
<div>
  <video id="video" controls>
    <source src="https://upload.wikimedia.org/wikipedia/commons/a/a4/BBH_gravitational_lensing_of_gw150914.webm">
    <track default kind="captions" label="English" srclang="en"/>
  </video>
</div>

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

https://stackoverflow.com/questions/60219519

复制
相关文章

相似问题

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