我正在使用一个自定义HTML5应用程序在本地网络上传输视频,现在我正在添加字幕支持。
我有大约500个从. srt转换而来的.vtt字幕。在我把它们从.srt转换过来之后,我注意到它们显示在屏幕的底部,我希望它们有一点margin-bottom
。
我可以用css的伪元素::cue来设计字幕,但是只适用于字体大小,颜色,背景。似乎不支持任何边距,填充或定位规则。
在编写一个脚本来修改所有.vtt文件以将line:XX%
添加到cues之前(这是我迄今为止找到的移动它们的唯一方法),我想知道是否有一种方法可以在不必修改所有.vtt文件的情况下定位字幕。
- 如果我禁用了自定义控件,并尝试使用默认控件。当显示字幕时,我将鼠标放在视频上以显示控件,字幕确实会上移,当控件在几秒钟后自动隐藏时,那行字幕会停留在原来的位置。但下一行会下移。这就是我想知道是否可以在不编辑.vtt文件的情况下移动它们的原因。因为显示控件会使它们上移,所以也许有一种方法可以通过编程来实现。*
因此问题是,除了修改.vtt文件之外,还可以使用CSS或其他任何方法定位.vtt字幕吗?
这是我用于测试的基本代码:
<video controls autoplay>
<source src="http://192.168.0.1/video.mp4" type="video/mp4" />
<track src="http://192.168.0.1/subtitles.vtt" kind="subtitles" srclang="en" label="English" default />
</video>
<style>
video::cue {
font-size:100%;
color:white;
}
</style>
5条答案
按热度按时间wkyowqbh1#
这不是css,但如果新的访问者想要一个解决方案与JS:
ijnw1ujt2#
你可以使用textTrack.activeCues[0].text从单个cue中提取文本,并将它们显示在div中并设置div的位置。
ac1kyiln3#
您可以将line-height赋给::cue,但这样做的问题是,如果字幕进入多行,则行之间差距会增加。
yizd12fk4#
我能想到的最好的解决方案(在React+Typescript中,原则应该在任何地方都适用。虽然有些笨拙,但确实有效)。主要思想是:
1.等待加载事件在
track
元素上激发1.获取航迹的VTT线索
1.设置每个cue的行属性
xyhw6mcr5#
您可以使用CSS样式自定义
.vtt
字幕的外观,CSS样式可以在嵌入HTML页面中定义 *,也可以直接嵌入.vtt
文件中 *。VTT规范有一些内置的对齐选项,如下所示(摘自https://www.delphiki.com/webvtt/#cue-settings):
以上所示的方法适用于您希望样式与其他帧不同的特定字幕帧。如果您需要样式应用于所有字幕,请参阅下面关于如何从包含的页面设置样式的内容。
在VTT文件中设置样式
请️务必读取mozilla vtt docs,因为VTT中对空行有严格的规定。vtt validator有助于检测错误。
在HTML容器页面中设置样式
如果原生路线选项不够,则可以应用您自己的自定义样式。
另请参见