解析youtube字幕

YouTube fbbusiness123 3年前 (2021-06-11) 470次浏览 0个评论

解析youtube字幕

许多人平时在浏览youtube视频时都有进行下载字幕的需要。用户都是会通过一些技巧来帮助进行下载来进行解析。

解析youtube网站字幕

用户在观看youtube视频的时候,经常有下载字幕的需求,正常情况下,人们会运用一些浏览器插件来相助进行下载,然而这些插件时常会出现失效现象,又要重新去找其他的插件,非常浪费时间。做为一个程序员,自己来实现一个解析字幕的小程序还是不算太难,用户可以用底下解析youtube网站字幕。

解析youtube字幕

解析youtube字幕如何操作

第1步.用户需要找到视频对应的字幕

用户需要打开控制台

1.用户需要选择 Network

2.用户需要进入XHR

3.用户需要点击 timedtext 那一条

4.用户需要点击右边 Response

这样就能够找到字幕文件了,把字幕复制到一个文件中,例如subtitle.json。

第2步.解析 json

a. json 格式分析

json 的格式是这样的

用户需要的就是里面的 events 对象,events 是一个数组对象,每一条对应一条字幕,里面含有字幕开始时间,时长跟内容。熟悉字幕的同学都晓得字幕的格式

1  序号

00:00:10,120 –> 00:00:13,840  时间

All of us, from a very early age  字幕内容

空行

紧接着必须解决的就是把 json 中的 events 转换成字幕格式,继而输出到一个文件中,比如subtitle.srt。

处理思路:

字幕中的序号对应 events 数组的 index

开始时间对应 tStartMs 的值

结束时间对应 tStartMs + dDurationMs 的值

内容对应 segs 中的第一个元素

b. 具体实现

因为在这里用的是 node.js 来解决文件,所以需要安装 node.js,安装方法这里就不具体说明了,网上有许多教程。

1.引入 fs 模块

 var fs = require(‘fs’)

2.处理 json

 fs.readFile(sourcePath, ‘utf8’, function (err, data) {

     if (err) console.log(err);

     var test1 = JSON.parse(data);//读取的值

     // console.log(test1.events)

     subtitle = test1.events

     // 下面写入文件使用的是追加,因此用户在写之前若是文件已经存在的话就清空一下。

     // 预防执行多次后文件内的重复内容太多,重点是在调试的时候或许会忘记,继而就或许存在懵的状态。

     if (fs.existsSync(resultPath)) {

         fs.writeFileSync(resultPath,”)

       }

     for (let i = 0; i << span=””> subtitle.length; i++) {

         const s = subtitle[i];

         // console.log(s.segs[0].utf8) //字幕内容

         // i :字幕的位置

         // console.log(s.tStartMs) 起始时间

         // console.log(s.tStartMs + s.dDurationMs) 结束时间

         // 字幕格式

         // 1

         // 00:00:09,779 –> 00:00:15,899

         // 内容

         // 空行

         // 这个是生成标准的字幕文件

         if(isTime){

             fs.appendFileSync(resultPath,i + ‘\n’ + convertTime(s.tStartMs) + ‘ –> ‘ + convertTime(s.tStartMs + s.dDurationMs)

             + ‘\n’ + s.segs[0].utf8 + ‘\n\n’,err => {

                 if(err){

                     console.log(err)

                 }

             })

         }else{ // 这个是生成纯文本内容,不带时间轴和序号

             fs.appendFileSync(resultPath,s.segs[0].utf8 + ‘\n\n’,err => {

                 if(err){

                     console.log(err)

                 }

             })

         }

     }

});

c. 处理时间的方法

function convertTime(time) {

    var s, m, h

    h = Math.floor(time / 1000 / 60 / 60)

    console.log(‘h:’ + h)

    m = Math.floor(((time / 1000 / 60 / 60) % 1) * 60)

    // console.log(‘m:’ + m)

    s = ((((time / 1000 / 60 / 60) % 1) * 60) % 1) * 60// 通过跟 1 取余获取小数部分

    s = s.toFixed(3)

    s = s.toString().replace(‘.’, ‘,’).substring(0, 6)

    console.log(‘s:’ + s)

    if (h << span=””> 10) {

        h = ‘0’ + h

    }

    if (m << span=””> 10) {

        m = ‘0’ + m

    }

    var timeString = h + ‘:’ + m + ‘:’ + s

    // console.log(timeString)

    return timeString

}

d. 运行脚本在终端输入

 node parse_subtitle.js

e.当前目录下就会生成相应的字幕文件

以上是关于解析youtube字幕的操作流程等相关信息,在这里提供给各位进行实践收看。

youtube字幕,youtube应用,youtube用户,youtube视频,youtube

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址