YouTube双字幕实现方法

2021-09-30 | 2,866浏览 | 0评论 | 标签: YouTube双字幕 油管双字幕

YouTube双字幕实现方法

前言

昨天把《 油管评论翻译机》插件2.0版本发布了,这个版本最重要的升级就是支持YouTube双字幕,实现过程比预计的要简单许多,现将实现方法总结一下。

实现方法

最简单的方法就是使用我写的插件,哈哈,开个玩笑。进入正题。

按f12可知,YouTube通过接口https://www.youtube.com/api/timedtext获得字幕,其中参数langtlang分别对应原始语种和目标语种,返回数据结构为:

{
  "events": [
    {
      "tStartMs": 0,
      "dDurationMs": 3600,
      "segs": [{
        "utf8": "How are you? \n Your name?"
      },
    {
      "tStartMs": 3600,
      "dDurationMs": 2500,
      "segs": [{
        "utf8": "I’m Susan."
      }]
    }
    ... ...
    ]
}

结构清晰明了,segs中的utf8即为字幕,其\n为换行符。既然这样,我们只需要把其它语种的字幕插入到utf8,并用\n隔开就行了。

要实现拦截接口并修改内容后返回,这里推荐XHR注入工具 @jpillora/xhook,能实现接口request和response的控制。具体代码如下:

xhook.after((request, response) = >{
    const { url } = request;   //所有XHR请求都会通过这里,可拿到字幕接口url
    if (url.includes("/api/timedtext")) {
        const params = new URLSearchParams(url);
        const lang = (params.get("lang"));
        const tlang = (params.get("tlang"));
        try {
            const res1data = JSON.parse(response.data);       //原始字幕
            const res2data = this.fetch({lang,tlang});        //加载目标语种字幕 (fetch为ajax函数)
            const textJson = this.merge(res2data, res1data);  //将两个字幕数据合并 (merge为合并函数)
            response.text = JSON.stringify(textJson);         //返回修改后的字幕数据
        } catch(err) {}
    }
});

至此,返回数据变成了:

{
  "events": [
    {
      "tStartMs": 0,
      "dDurationMs": 3600,
      "segs": [{
        "utf8": "How are you? Your name? \n 你好,你叫什么名字?"
      },
    {
      "tStartMs": 3600,
      "dDurationMs": 2500,
      "segs": [{
        "utf8": "I’m Susan. \n 我叫苏三"
      }]
    }
    ... ...
    ]
}

现在,我们再做一些润色,加一些文本颜色、字体大小等样式。打开万能的F12可知,YouTube字幕html结构为:

<span class="captions-text">
  <span class="caption-visual-line">
    <span class="ytp-caption-segment">How are you? Your name?</span>
  </span>
  <span class="caption-visual-line">
    <span class="ytp-caption-segment">你好,你叫什么名字?</span>
  </span>
<span>

第n行字幕节点为.caption-visual-line:nth-child(n),接下来就是前端基本功了。

为了方便操作,我给YouTube播放器控制菜单上,加个双字幕切换按钮,就像这样:

YouTube双字幕实现方法

实现方式我就不再啰嗦,无非是节点元素增删改查。善用F12,会有无限发挥空间。

最终效果演示

YouTube双字幕实现方法

总结

最近的时间都用在这个插件上了,陆续写了几篇相关文章,喜欢插件开发的朋友可以一起交流交流。喜欢看YouTube的朋友也欢迎下载使用。

(本篇完。有疑问欢迎 留言探讨)

热门文章

  • 微信小程序“拍照识图”上线(62,716)
  • YouTube评论翻译插件《油管评论翻译机》上线了(56,036)
  • 基金助手--chrome浏览器插件(42,823)
  • 拍照识别彩票结果在线工具(31,107)
  • vue+tabs动态组件方案漫谈(25,789)
  • 网页打印插件Print.js(23,262)
  • 《油管评论翻译机》使用说明书(23,215)
  • 自用YouTube抓取评论+翻译工具(22,424)
  • px转rem/vw方法小结(17,366)
  • YouTube评论导出免费在线工具(16,188)
取消回复

留言:

*

* (方便回复通知)

打赏
编辑代码 运行结果
退出

玻璃钢生产厂家四川户外商场美陈多少钱佛山透明玻璃钢雕塑摆件洛阳人物玻璃钢雕塑滨州神像玻璃钢雕塑湛江革命主题玻璃钢卡通雕塑苏州商场春节美陈荷叶玻璃钢雕塑定制厂家人物雕塑玻璃钢李时珍雕塑石家庄玻璃钢仿真水果雕塑厂家浙江商场主题创意商业美陈服务玻璃钢桃子雕塑厂家保定佛像玻璃钢雕塑蓬莱玻璃钢胸像雕塑玻璃钢仿铜雕塑做出来要多久玻璃钢雕塑运输注意事项吉林省玻璃钢雕塑加工定西玻璃钢雕塑设计动漫玻璃钢雕塑怎么制作商场周年庆美陈打卡点韶关玻璃钢动物雕塑参考价台湾玻璃钢仿铜雕塑厂家惠州玻璃钢长颈鹿雕塑宁夏卡通玻璃钢雕塑定做商场美陈推荐哪家公司玻璃钢动物雕塑厂家制作评论专业不锈钢玻璃钢彩绘雕塑定制衡水玻璃钢雕塑人物弥勒市玻璃钢雕塑设计怎么样甘肃玻璃钢海盗船雕塑中山精美木纹玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化