上一篇讲了如何解析 YouTube 字幕,那个字幕对应的是 youtuber 自己设置好的字幕文件,字幕是标准的。

在 youtube 上还有另外一种字幕是平台自动生成的。这种字幕文件不是以句子为单位,而是以单词为单位的。那么上一篇中的解析方法就不适用了。为此我又写了一个把不规范的字幕文件转为规范的字幕文件,然后再用上一篇的方法进行解析,最终生成标准的字幕文件。

先来看一下自动生成的字幕是什么样的子的。

可以看到每一个单词都是分开的,我们要的是一个完整的句子,就像下面的图。

直接看代码吧,注释都写了。主要的处理就是用循环的方法把每一个单词拼接成一句话,然后添加到对应的数组中。其中还有一点是字幕显示的时间,自动生成的字幕是两行两行显示的,所以如果直接按照 json 中的时间显示的话,会同时显示两行字幕,看起来很乱,我是忍受不了这样的显示方式,所以我时间又处理了一下,变成一行显示。

function convertJson(resourcePath, outPath) {pReadFile(resourcePath).then(function (data) {// console.log('data'+ data);var data = JSON.parse(data);var sub = data.events;console.log(sub.length);var length = sub.length;for (let i = 0; i < length; i++) {if (sub[i].segs) {var utf8 = '';// console.log(sub[i].segs.length);for (let j = 0; j < sub[i].segs.length; j++) {utf8 += sub[i].segs[j].utf8;}sub[i].segs = [{ "utf8": utf8 }];}}/*** arr.splice(index,len,item)* splice 方法在删除或替换数组里的元素后会改变原来数组的值* 如果用正常的正序循环删除的话,会由于数组元素的下标发生变化而出错* 所以可以用倒序的方法来实现循环删除* * 用 while 来循环更简单*/while (length--) {if (sub[length].segs) {if (sub[length].segs[0].utf8 == '\n') {sub.splice(length, 1);}}}// 去掉第一项,第一项不是字幕sub.shift();// 自动生成的字幕是以两行的形式显示的,有点乱,所以把它改成一行显示// 两行显示的原因是字幕持续时间是两行的时间,改为一行的时间就可以了for (let i = 0; i < sub.length; i++) {if (i < sub.length - 1) {sub[i].dDurationMs = sub[i + 1].tStartMs - sub[i].tStartMs;}}data.events = sub;if (fs.existsSync('../subtitle/subtitle.json')) {fs.writeFileSync('../subtitle/subtitle.json', '');}fs.writeFileSync('../subtitle/subtitle.json', JSON.stringify(data));}, function (err) {});
}

另外在代码中使用了 promise 。封装了一个读取文件的 promise 方法,这个方法是从别的项目里拿过来的。这里当然也可以不用,直接就用传统的方法读取也没有关系。

function pReadFile(filePath) {return new Promise(function (resolved, rejected) {fs.readFile(filePath, 'utf8', function (err, data) {if (err) {rejected(err)} else {resolved(data)}})})
}

把不规则的 json 文件处理成规则的之后,再用上一篇的方法,进行解析就可以了。

PS:关注公众号 windymiao,回复『字幕2』获取完整源码

解析 youtube 字幕2相关推荐

  1. 解析 youtube 字幕

    我们在看 YouTube 视频的时候,经常有下载字幕的需求,一般会使用一些浏览器插件来帮助下载,但是这些插件经常会失效,又要重新去找其他的插件,很浪费时间.做为一个程序员,自己实现一个解析字幕的小程序 ...

  2. youtube 字幕视频搬运

    环境准备 FFmpeg www.downsub.com.com www.youtube.com 下载视频 利用火狐浏览器的Youtube 插件(Easy Youtube Video Downloade ...

  3. 用DownSub 导出TED和youtube字幕

    DownSub 是一个免费的网络应用程序,可以直接从 Youtube.VIU.Viki.Vlive 等下载字幕.我们支持下载所有字幕格式,例如:SRT.TXT.VTT. Download subtit ...

  4. gihosoft tubeget为什么不能解析YouTube视频呢

    求问各位大佬,为什么用gihosoft tubeget准备下载youtube视频显示一直在解析链接,但是b站视频可以正常下载,该如何解决呢?

  5. python youtube字幕_用Python将单个Webvtt格式字幕转成Srt格式字幕

    从Youtube中下载的字幕是Webvtt格式,我用的射手影音播放器无法正确加载该字幕,所以用Python写了一个脚本将vtt格式的字幕转化为srt格式的字幕.我所使用Python程序编写平台是PSF ...

  6. html5视频播放器字幕,HTML5 带字幕播放器(类youtube字幕)

    暂时转帖,稍后修改 使用video实现实时字幕的效果 #box{ border: 1px solid red; width: 400px; height: 400px; position: absol ...

  7. 基于 python 和 UDP 协议实现简易聊天室(多人群聊)----详细解析带字幕

    聊天室项目 功能介绍: 1.进入聊天室:输入姓名,用户名(不能重复) 2.某个成员进入聊天室后给其他所有所有成员发送消息 3.任何一个人发消息,其他人都会收到 4.某人退出聊天室,其他成员也会收到通知 ...

  8. android 解析ksc字幕文件,KSC字模发布帖(注:KSC字幕可以用KAJConvert3转成KAJ)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 左右为难 ------------------------------------------ karaoke := CreateKaraokeObjec ...

  9. SRT视频字幕的解析与同步原理

    转自:http://www.eoeandroid.com/thread-171556-1-1.html 在论坛搜索srt字幕的解析,没有资源,于是自己琢磨,有点结果,与大家分享. srt字幕文件的格式 ...

最新文章

  1. 用洪小文,人工智能予力永续未来
  2. php用中文分割字符串,利用php怎么对中文字符串进行分割
  3. Java中有哪些无锁技术来解决并发问题?如何使用?
  4. matlab 角度转四元数_基于Matlab的机械臂路径规划
  5. linux操作系统中文件系统管理--实训
  6. ROS:定制自己的消息类型msg
  7. 数据科学 IPython 笔记本 9.2 NumPy 简介
  8. android小游戏模版—重力感应
  9. HTML怎么写入形状,css3写各种形状(收集篇...)
  10. idea 搜索不到gsonformat_Android Studio 4.1没有GsonFormat插件的解决
  11. JS 实现右击菜单功能
  12. C#毕业设计——基于C#+ASP.NET+SQL Server的酒店入住信息管理系统设计与实现(毕业论文+程序源码)——酒店入住信息管理系统
  13. Python数字转换中文大写
  14. 科技前沿一周必知:微软市值破万亿美元
  15. grldr引导iso PE img 文件
  16. nvme1.3 Feature - Telemetry
  17. aodv协议源代码分析
  18. tomcatServlet
  19. FreeEIM - 沟通最简单
  20. 8.1 幽灵(no.1~no.10)

热门文章

  1. 单播 广播 组播区别
  2. js判断元素是否隐藏
  3. 前端本地缓存知识:indexDB、localStorage、sessionStorage
  4. error: *EXECUTABLE* uses VFP register arguments
  5. mysql的终端窗口是什么意思_什么叫终端窗口
  6. dcloud mui html5plus 5+sdk
  7. OpenFlow交换机概述
  8. java学习#day01(Java常用计算机基础知识、JDk的下载与安装、环境变量的配置、IDEA的下载与安装)
  9. 微信公众号玩付费阅读:标题党横行还是内容春天来到
  10. 用这4个方法撰写文案,获得客户信任