繁体   English   中英

HTML5 视频:同时显示两个不同的字幕

[英]HTML5 Video: Displaying two different subtitles simultaneously

我正在使用标准的 HTML5 视频字幕功能在内置的 HTML5 视频播放器中显示字幕(在 srt 和 vtt 中提供)。

<video width="100%" height="100%" autobuffer="" controls="" preload="auto" id="media" class="media embed-responsive-item">
     <source type="video/ogg" src="podm.h264.mp4&amp;t=ogv"></source>
     <source type="video/mp4" src="podm.h264.mp4&amp;t=mp4"></source>
     <track default="" label="English" srclang="en" kind="subtitle" src="podm.h264.vtt"></track>
     <track default="" label="English" srclang="en" kind="subtitle" src="podm.h264.srt"></track>
     <p>Your browser does not support HTML5 video</p>
</video>

现在我需要同时显示两个不同的字幕,所以第二个字幕显示在第一个字幕之上。

(出乎意料)我在 web 上找不到任何有用的信息,用于在 HTML5 视频中显示多个字幕。 我很确定我需要为此目的定制 hack。

我正在寻找如何实现此功能的建议和/或参考资料(不使用非自由/仅适用于 Windows 的库和播放器,如 DivX)。

使用浏览器的内置<video>控件,您不能 select 两个文本轨道。

要显示两个文本轨道,例如第一个和第二个,您可以使用 javascript:

video.textTracks[0].mode = 'showing';
video.textTracks[1].mode = 'showing';

它在 Firefox 中工作,在 Chrome 中部分工作,在 Safari 中不工作。

 function main(){ let video = document.querySelector('#video'); video.textTracks[0].mode = 'showing'; video.textTracks[1].mode = 'showing'; /* fix cue overlap for Chrome */ if(window.chrome){ let sheet = document.querySelector('#videoStyle').sheet; let rule = Array.prototype.find.call(sheet.rules, (r) => r.selectorText === 'video::-webkit-media-text-track-display'); let observer = new ResizeObserver((entries) => { let height = entries[0].contentRect.height; let controlsHeight = 72; let maxCueLines = 4; // TODO adjust this according to your vtt rule.style.setProperty('top', `calc(${Math.floor((1 - controlsHeight / height) * 100)}% - ${maxCueLines}em)`, 'important'); }); observer.observe(video); } } document.addEventListener('DOMContentLoaded', main);
 <div> <strong>Showing two text tracks</strong><br/> Firefox: supported, built-in<br/> Chrome: partially supported, need trick to fix<br/> Safari: not supported yet<br/> </div> <video id="video" width="640" height="360" controls="" src="https://storage.googleapis.com/media-session/caminandes/short.mp4" crossorigin="anonymous" preload="metadata"> <track kind="captions" srclang="en" src="https://static.3playmedia.com/p/files/6157318/threeplay_transcripts/18335056.vtt?project_id=10127&format_id=51&refresh=1620709875" default="" /> <track kind="captions" srclang="en-GB" src="https://static.3playmedia.com/p/files/6157318/threeplay_transcripts/18335056.vtt?project_id=10127&format_id=51&refresh=1620709875" /> </video> <style id="videoStyle"> video::cue { background-color: transparent; text-shadow: 1px 1px 2px #666666; } /* fix cue overlap for Chrome */ video::-webkit-media-text-track-display { position: relative;important: transform; none!important; } </style>

如您所知,HTML5中有一些代码标准,谁愿意同时显示2srt?

解决方案:只提供一个字幕,在每个字幕中还包括第二个字幕作为文本!!

示例srt脚本包括ENG + FR字幕:

1
00:00:30,342 --> 00:00:33,082
I came from city
Je suis venu de la ville

2
00:00:33,202 --> 00:00:36,530
do you play football?
ne vous jouez au football?

3
00:00:36,650 --> 00:00:39,965
to pay rent
de payer le loyer

我不确定,对于换行符,您可以尝试使用:| 或\\ n或\\ N

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM