视频自定义字幕,中英文,彩色的,你也可以,不会不知道吧

前言

关于【SSD系列】:
前端一些有意思的内容,旨在3-10分钟里,有所获,又不为所累。

字幕,大家见过吧,其实你也可以,真的可以,真的真的可以。不难,不难,真的不难。 我们一起来做点有意思的弹幕吧。

源码: 自定义字幕

字幕效果演示

字幕和特殊字符演示

下面的字幕效果,没用使用任何JS代码。

因gif的视频文件太大,拆分为两份。
zimy1.gif

zimy2.gif

字幕切换演示

还支持多种字幕,如下演示切换字幕:

zimy3.gif

原理 WebVTT

MDN的解释

Web视频文本跟踪格式 (WebVTT) 是一种使用<track>元素显示定时文本轨道(如字幕或标题)的格式。 WebVTT文件的主要用途是将文本叠加添加到<video>

基本使用:

    <video id="videoEL" controls autoplay crossorigin="anonymous" src="./gg.mp4" width="500">
        <track default src="./zh.vtt" label="中文字幕">
        <track default src="./en.vtt" label="英文字幕">
    </video>

可以看出来,track是video的子标签,其src属性引用了一个vtt类型的文件,额外注意一下label属性,这个属性值是切换字幕时的标题。

所以下一章节的vtt文件是重点。

vtt文件

先看一段范本:

WEBVTT

00:00.400 --> 00:00.900 line:38% position:35%
干什么呢

00:01.600 --> 00:01.600 line:40% position:35%
就你个小不点

vtt文件书写有很多规范,我们就抓住三个核心要素 TSP:

  1. 时间 T
  2. 样式 S
  3. 位置 P

连起来: 字幕 什么时间,在什么位置,什么身姿 出现。

时间

就是字幕应该什么时候出现, 我觉得你看一下就懂, [开始] --> [结束]

00:00.400 --> 00:00.900   // 400ms-900ms的时候出现

时间如下两种格式,至于各个字母的含义,我想作为前端都能理解。

  • mm:ss.ttt
  • hh:mm:ss.ttt

样式

就是字幕以什么的身姿出色

样式定义的方式

我们演示效果是有明显的颜色,所以肯定是有地方定义了样式。我们有两种方式定义样式

  1. 外挂样式,写在css文件或者style节点里面
    下面的代码就是定义默认字幕的样式
video::cue {
    background-color: transparent;
    color: yellow;
    font-size: 20px;
    text-shadow: peachpuff 0 1px;
}
  1. 内联样式,就是写在vtt文件里面的样式
    下面就是写在vtt文件里面默认字幕样式,注意其STYLE开头
STYLE
::cue {
    background-color: transparent;
    color: yellow;
    font-size: 20px;
    text-shadow: peachpuff 0 1px;
}
多种字幕样式

上面的样式都只提到了默认样式,演示效果上有两种颜色的字幕,这是怎么做到的,答案很简单,还可以给字幕自定义样式

格式如下:

<c.classname>text</c>

我们看一段完整代码,让字幕是白色,并有阴影效果。

vtt文件:

00:00.200 --> 00:00.800 line:58% position:80%
<c.mn>大块头</c.mn>

样式文件: c.mn 是关键哦。

 video::cue(c.mn) {  
    color: #FFF;
    text-shadow: peachpuff 0 1px;
}
可定义样式的属性

虽说可以自定义样式,主要是字体,背景色,outline, 文本相关的一些属性罢了。 更多参见 ::cue
css3的动画,你就别想了。

位置

就是字幕在哪出现

字幕可以水平展示,也可以垂直展示。

line

指定文本垂直显示的位置。如果设置垂直,则行指定文本水平显示的位置。

position

指定文本将水平显示的位置。如果设置为垂直,则位置指定文本将垂直显示的位置。

看一段代码分析:

这条字幕在距顶部38%,左边35% 的位置出现。

00:00.400 --> 00:00.900 line:38% position:35% 干什么呢
其他

到此为止,你掌握了三要素,能处理大部分情况了。
还有其他的可选字节顺序标记,注释等等, 重要吗?当然重要,需要的时候才重要。

完整代码

是的,就是这么简单。

最后附上完整的演示视频的代码:

    <style>
        video::cue {
            background-color: transparent;
            color: yellow;
            font-size: 20px;
            text-shadow: peachpuff 0 1px;
        }

        video::cue(c.mn) {
            color: #FFF;
            text-shadow: peachpuff 0 1px;
        }
    </style>
    
     <video id="videoEL" controls autoplay crossorigin="anonymous" src="./gg.mp4" width="500">
        <track default src="./zh.vtt" label="中文字幕">
        <track default src="./en.vtt" label="英文字幕">
    </video>
WEBVTT

00:00.400 --> 00:00.900 line:38% position:35%
干什么呢

00:01.600 --> 00:01.600 line:40% position:35%
就你个小不点

00:01.600 --> 00:03.000 line:30% position:30%
说啥

00:04.000 --> 00:04.800 line:34% position:30%
真嚣张

00:05.000 --> 00:06.000 line:34% position:30%
找教训


00:00.200 --> 00:00.800 line:58% position:80%
<c.mn>大块头</c.mn>

00:01.500 --> 00:02.000 line:58% position:80%
<c.mn>干架</c.mn>

00:02.500 --> 00:03.000 line:58% position:80%
<c.mn>来啊</c.mn>

00:04.000 --> 00:04.800 line:58% position:80%
<c.mn>来啊</c.mn>

00:04.000 --> 00:04.800 line:58% position:80%
<c.mn>来啊</c.mn>

00:05.000 --> 00:06.000 line:58% position:35%
🔨🔨

00:07.201 --> 00:07.400 line:58% position:35%
💔

00:07.401 --> 00:07.800 line:58% position:35%
💔

写在最后

写作不易,你的一言一评,就是最大的努力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/549676.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode1448.统计二叉树中的好节点数目

1. 题目描述 题目链接 2. 解题思路 首先看一下题目的“核心”&#xff0c;什么是好节点&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。也就是说&#xff0c;我们只要知道了从根节点到该节点的所有的值&#xff0c;就可以判断该节点是…

优斯特:防静电包装解决方案的巧妙运用

在现代电子产品生产与运输领域&#xff0c;防静电包装已成为保障产品安全的必备环节。优斯特凭借其创新的防静电包装解决方案&#xff0c;为客户提供了一种巧妙的方式来确保产品在存储和运输过程中不受静电影响&#xff0c;并且不会被刮花或损坏。 静电对产品的影响 静电对电子…

数学建模--深入剖析线性规划(模型全方位解读+代码分析)

1.简介 &#xff08;1&#xff09;线性规划三要素 &#xff08;2&#xff09;模型适用赛题 2.典例讲解 &#xff08;1&#xff09;问题分析 目标函数是净收益尽可能大&#xff0c;风险尽可能小&#xff1b; 约束条件是交易费的分段函数&#xff0c;以及每一笔投资都是非负数&am…

java绘图在ubuntu报错

把JRT网站部署到ubuntu桌面系统上&#xff0c;开始没测试绘图部分功能&#xff0c;只试了连PostGreSql部分正常。后面试了生成位图部分发现报错。 报下面错误&#xff1a; (ColorModel.java:220)\n\tat java.desktop/java.awt.image.BufferedImage.(BufferedImage.java:286)\n…

阿赵UE学习笔记——28、粒子系统Niagara简介

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。这次开始学习粒子系统的使用。 一、Cascade系统 在介绍UE5的Niagara系统之前&#xff0c;必须先介绍一下旧版本的粒子系统。   在UE4的时候&#xff0c;虚幻引擎的粒子系统叫做Cascade&#x…

【iOS】——SDWebImage源码学习

文章目录 一、SDWebIamge简介二、SDWebImage的调用流程SDWebImage源码分析1.UIImageViewWebCache层2.UIViewWebCache层3.SDWebManager层4.SDWebCache层5.SDWebImageDownloader层 一、SDWebIamge简介 SDWebImage是iOS中提供图片加载的第三方库&#xff0c;可以给UIKit框架中的控…

思维导图ai生成软件分享5款好用的!

思维导图ai生成软件分享5款好用的&#xff01; 在快节奏的信息时代&#xff0c;思维导图作为一种有效的思维整理工具&#xff0c;越来越受到人们的青睐。它能够将复杂的思维过程可视化&#xff0c;帮助我们更好地梳理思路、规划工作。近年来&#xff0c;随着人工智能技术的飞速…

整数运算超越存储单元表示范围:上溢出、下溢出、回绕

示例&#xff1a; /*** brief how about integer-underflow-overflow? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <std…

408数据结构,怎么练习算法大题?

其实考研的数据结构算法题是有得分技巧的 得分要点 会写结构定义&#xff08;没有就自己写上&#xff09;写清楚解题的算法思想描述清楚算法实现最后写出时间和空间复杂度 以上这四步是完成一道算法题的基本步骤&#xff0c;也是其中得分的主要地方就是后面两步。但是前面两…

java-spring 图灵 04

在Spring框架中&#xff0c;可以使用org.springframework.core.io.support.ResourcePatternResolver接口的resolveBasePackage方法来将指定的基础包解析为用于包搜索路径的模式规范。 例如&#xff0c;如果基础包是com.example.app&#xff0c;则可以使用resolveBasePackage方法…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵,网络攻击,流量异常【3】

之前用NSL-KDD数据集做入侵检测的项目是&#xff1a; 【1】https://qq742971636.blog.csdn.net/article/details/137082925 【2】https://qq742971636.blog.csdn.net/article/details/137170933 有人问我是不是可以改代码&#xff0c;我说可以。 训练 我将NSL_KDD_Final_1.i…

Open3D 无效点滤波(32)

Open3D 无效点滤波(32) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 这个算法的目标是从点云数据中去除无效的点,这些无效点可能是由于坐标值为无穷大(inf)或者不是数字(NaN)而产生的。这些无效点可能会导致后续处理步骤出现错误或异常,因此在处理点云数据时需…

品深茶创始人是谁?

据说&#xff0c;品深茶的创始人之前是一个程序员&#xff0c;他在软件行业工作十多年&#xff0c;由于常年熬夜加班再加上抽烟喝酒等不良习惯&#xff0c;导致在一次体检中被查出患上了肾癌&#xff0c;对他来说&#xff0c;期待的财务自由还没实现&#xff0c;身体就已经完蛋…

java(网络编程)

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

CSS基础:width,height尺寸属性详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web…

vue脚手架CLI的简单使用

目录 初始化脚手架说明具体步骤模板项目的结构main.js入口文件app.vuemain.jsrender main.js 修改默认配置 初始化脚手架 说明 Vue 脚手架是 Vue 官方提供的标准化开发工具&#xff08;开发平台&#xff09;。最新的版本是 4.x。文档: https://cli.vuejs.org/zh/。 具体步骤 …

QFS [VLDB‘13] 论文阅读笔记

原论文&#xff1a;The Quantcast File System (VLDB’13) QFS简介及技术要点 QFS&#xff08;Quantcast File System&#xff09;是由Quantcast开发的一个高效、可扩展的分布式文件系统&#xff0c;旨在提供与Hadoop分布式文件系统&#xff08;HDFS&#xff09;兼容的替代方案…

allure2教程-1-环境搭建

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 自动化测试执行完成后我们需要展示给其他人看&#xff0c;这就要有自动化测试报告了。复杂的测试报告当然可以自己代码实现&#xff0c;但用pytest-html或allure基本也能满足我们生成测试报告的要求了。本小节介绍…

如何基于香橙派AIpro将开源框架模型转换为昇腾模型

在前面的介绍中&#xff0c;我们知道了如何基于香橙派AIpro开发AI推理应用&#xff0c;也大致了解到在推理之前&#xff0c;需要把原始网络模型 (可能是 PyTorch 的、TensorFlow&#xff0c;可能是Caffe的等等) 转换成 .om 模型&#xff0c;然后才能调用昇腾的aclmdlExecute 等…

深度学习 Lecture 8 决策树

一、决策树模型&#xff08;Decision Tree Model) 椭圆形代表决策节点&#xff08;decison nodes)&#xff0c;矩形节点代表叶节点&#xff08;leaf nodes)&#xff0c;方向上的值代表属性的值&#xff0c; 构建决策树的学习过程&#xff1a; 第一步&#xff1a;决定在根节点…