【问题标题】:Youtube: args to force auto-generated subtitlesYoutube:args 强制自动生成字幕
【发布时间】:2018-08-25 19:32:39
【问题描述】:

如果我的视频有英文字幕,我可以强制显示它们,代码如下:

hl=en&cc_lang_pref=en&cc_load_policy=1

所以完整的代码是:

<iframe 
    width="560" height="315"
    src="https://www.youtube.com/embed/3I3Rjw_4Ucw?hl=en&cc_lang_pref=en&cc_load_policy=1"
    frameborder="0" gesture="media"
    allow="encrypted-media" allowfullscreen>
</iframe>

但是,如果视频没有字幕,它似乎不起作用。在这种情况下,我想强制显示来自 Youtube 的自动生成的字幕。有可能吗?

【问题讨论】:

标签: iframe youtube youtube-api youtube-iframe-api


【解决方案1】:

没有官方或记录在案的方法可以强制嵌入视频中的自动生成字幕。但是有一个 setOption 方法的解决方案现在可以使用,但不能保证它在将来会起作用,因为这是该方法的未记录调用:

<iframe id="existing-iframe"
        width="640" height="360"
        src="https://www.youtube.com/embed/q2C0EO0zzAY?enablejsapi=1&cc_load_policy=1"
        frameborder="0"
        style="border: solid 4px #37474F"
></iframe>

<script type="text/javascript">
  var tag = document.createElement('script');
  tag.src = 'https://www.youtube.com/iframe_api';
  var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

  let player

  const onApiChange = _ => {   
    if (typeof player.setOption === 'function') {
      player.setOption('captions', 'track', {languageCode: 'en'}) // undocumented call
    }  
  }

  function onYouTubeIframeAPIReady() {
    player = new YT.Player('existing-iframe', {events: {onApiChange}})
  }
</script>

this jsFiddle 中查看此代码。

在使用 setOption 函数之前,您必须等待 onApiChange 事件。 (参见:https://developers.google.com/youtube/iframe_api_reference#Events)根据文档,仅支持 'fontSize' 和 'reload' 参数。但是,更改字幕轨道也有效,它会打开字幕作为副作用。我只尝试了“en”语言代码,当然如果有可用的,这将更改为正常的英文字幕轨道,但在没有预定义轨道的情况下会显示自动生成的英文字幕。

(您也可以使用 getOption 方法查询活动字幕轨道,但如果使用自动生成的字幕,它将不会返回任何内容。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2017-08-12
    相关资源
    最近更新 更多