如何在视频的 vtt 中强制换行

劳拉网络管理系统

我正在使用视频轨道标签在我的视频中插入字幕和标题。我有一个 vtt 文件,但我需要在第 1 行和第 2 行之间换行。文本显示在正确的位置,但在一行上。请问如何在演讲者和他的标题之间强制换行?vtt 文件中的一个简单中断不会这样做。

越野自行车:

WEBVTT   This must be the first line followed by 2 returns

1
00:00.100 --> 00:04.999 position:0% align:left size:70%
JOE BLOW
survivor

HTML:

<div id="vid-container1" class="vid-container">

         <div class="speakers">  
          <div class="cap-wrap">
            <span id="room-speakers" class="display-speakers">
              <span></span>
            </span>
          </div>
        </div>

        <video id="video" poster="img/screen3.png" autoplay="autoplay" loop preload="metadata" muted playsinline>
            <source src="video/room.mp4" type="video/mp4"/>


            <track id="track-roomspeakers" default 
                    src="video/room-speakers.vtt" 
                    kind="metadata" 
                    srclang="en"
                    label="English Captions"/>


        </video>
</div>

javascript:

showTrack('track-roomspeakers', 'room-speakers');

    function showTrack(trackID, displayID) {
        document.addEventListener("DOMContentLoaded", function () {  // don't run this until all DOM content is loaded
              var track = document.getElementById(trackID);
              track.addEventListener("cuechange", function () {
                var myTrack = this.track;             // track element is "this"
                var myCues = myTrack.activeCues;      // activeCues is an array of current cues.
                if (myCues.length > 0) {
                    console.log(displayID);
                  var disp = document.getElementById(displayID);
                  disp.style.display = "block";
                  var div = document.createElement('div')
                  for (var i = 0; i < myCues.length; i++) {
                    div.appendChild(myCues[i].getCueAsHTML());
                    //console.log(myCues[i]);
                  }
                  disp.replaceChild(div, disp.childNodes[1]);
                } else {
                  var disp = document.getElementById(displayID);
                  disp.style.display = "none";
                }

              }, false);
            }, false);

        var subtitles = document.getElementById(trackID);
        for (var i=0; i<video.textTracks.length; i++) {
          video.textTracks[i].mode='hidden';
        }
    }

css:

.display-speakers {
  font-family: 'proxima-nova', sans-serif;
  font-size: 18px;
  color: #FFFFFF;
  letter-spacing: 0;
  line-height: 21px;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.29);
  display: flex;
  justify-content: flex-end;
  align-items: center;
  flex-direction: column;
  width: 100%;
  position: absolute;
  top: 0;
  left: 10px;
  z-index: 10;
}
.speakers {
  display: flex;
  justify-content: flex-end;
  align-items: left;
  flex-direction: column;
  width: 100%;
  height: 60px;
  position: absolute;
  top: 0;
  margin-left: 60px;
}
.cap-wrap {
  width: 40%;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-direction: column;
}
劳拉网络管理系统

正如詹姆斯提到的,我不得不稍微更改我的 vtt 文件以添加一个警报字符串,然后用 a 替换<br>该字符串:

越野自行车:

WEBVTT   This must be the first line followed by 2 returns

1
00:00.100 --> 00:04.999 position:0% align:left size:70%
JOE BLOWtitlealert
survivor

javascript:

document.addEventListener("DOMContentLoaded", function () {  // don't run this until all DOM content is loaded
              var track = document.getElementById(trackID);
              track.addEventListener("cuechange", function () {
                var myTrack = this.track;             // track element is "this"
                var myCues = myTrack.activeCues;      // activeCues is an array of current cues.
                if (myCues.length > 0) {

                  var disp = document.getElementById(displayID);
                  disp.style.display = "block";
                  var div = document.createElement('div');

                  for (var i = 0; i < myCues.length; i++) {
                    div.appendChild(myCues[i].getCueAsHTML());
                    var mystring = div.innerHTML;
                    if (mystring.indexOf("titlealert") >= 0) {
                        mystring = mystring.replace("titlealert","<br>");//make titles appear with name on one line, title on second line; only do this for speaker titles
                        div.innerHTML = mystring;
                    } 
                }

                 disp.replaceChild(div, disp.childNodes[1]);

                } else {
                  var disp = document.getElementById(displayID);
                  disp.style.display = "none";
                }

              }, false);
            }, false);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在VLC中显示youtube-dl使用的VTT或其他字幕格式?

来自分类Dev

从vtt文件中抓取文本

来自分类Dev

如何在箱线图例中强制换行?

来自分类Dev

如何在Xcode中在文件末尾强制换行

来自分类Dev

使用Azure Media Service视频流上传.VTT字幕

来自分类Dev

使用youtube-dl将字幕vtt与视频合并的问题

来自分类Dev

如何在VLC或ffplay中强制播放16:9的视频?

来自分类Dev

如何强制 IntelliJ 在 *.txt 文件中换行很长的行?

来自分类Dev

如何强制换行?

来自分类Dev

如何强制换行?

来自分类Dev

如何强制换行?

来自分类Dev

从m3u8流中获取vtt字幕

来自分类Dev

如何在iframe编辑器中强制输入密钥以换行

来自分类Dev

如何在KableExtra的单元格中强制换行和粗体字符串

来自分类Dev

如何在 reStructuredText 中的定义列表上使用强制换行符渲染 LaTeX/PDF

来自分类Dev

node.js 使用 fs.writeFile - 如何在文件 (\n) 中强制换行?

来自分类Dev

如何在rmarkdown的标题中强制换行?

来自分类Dev

如何在长链接之前强制换行?

来自分类Dev

如何在tvOS中将外部.vtt字幕文件添加到AVPlayerViewController

来自分类Dev

如何在iOS中播放视频PHAsset?

来自分类Dev

如何在AVPlayer中停止视频?

来自分类Dev

如何在Phonegap中显示捕获视频?

来自分类Dev

如何在Android中显示YouTube视频?

来自分类Dev

如何在html中设置视频源?

来自分类Dev

如何在Qt中抓取视频帧?

来自分类Dev

如何在QML中播放视频?

来自分类Dev

如何在Javascript中暂停Vimeo视频?

来自分类Dev

如何在抖动中缓存视频

来自分类Dev

目前如何在Pygame中播放视频?