Youtube:强制自动生成字幕的参数
Youtube: args to force auto-generated subtitles
如果我的视频有英文字幕,我可以用如下代码强制显示它们:
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 自动生成的字幕。可能吗?
没有官方或记录在案的方法来强制在嵌入式视频中自动生成字幕。然而,现在有一个使用 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 中工作。
您必须等待 onApiChange 事件才能使用 setOption 函数。 (参见:https://developers.google.com/youtube/iframe_api_reference#Events)根据文档,仅支持 'fontSize' 和 'reload' 参数。但是,更改字幕轨道也有效,它会打开字幕作为副作用。我只尝试了 'en' languageCode,当然,如果有可用的,这将更改为正常的英文字幕轨道,但在没有预定义轨道的情况下,将显示自动生成的英文字幕。
(您也可以使用 getOption 方法查询活动的字幕轨道,但如果使用自动生成的字幕,则不会return任何内容。)
如果我的视频有英文字幕,我可以用如下代码强制显示它们:
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 自动生成的字幕。可能吗?
没有官方或记录在案的方法来强制在嵌入式视频中自动生成字幕。然而,现在有一个使用 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 中工作。
您必须等待 onApiChange 事件才能使用 setOption 函数。 (参见:https://developers.google.com/youtube/iframe_api_reference#Events)根据文档,仅支持 'fontSize' 和 'reload' 参数。但是,更改字幕轨道也有效,它会打开字幕作为副作用。我只尝试了 'en' languageCode,当然,如果有可用的,这将更改为正常的英文字幕轨道,但在没有预定义轨道的情况下,将显示自动生成的英文字幕。
(您也可以使用 getOption 方法查询活动的字幕轨道,但如果使用自动生成的字幕,则不会return任何内容。)