剪映专业版字幕导出随笔

目录

  • 剪映专业版字幕导出随笔
    • 环境准备
    • 字幕生成
    • 字幕捕获
    • 字幕处理
    • 小结

剪映专业版字幕导出随笔

环境准备

首先必须安装剪映专业版,如果您还没用过剪映专业版,请自行搜索关键字【剪映】下载安装;另外需要安装抓包工具,笔者安装的是【Fiddler】,值得注意的是需要开启 https 抓包模式。

环境截图如下:

  • 剪映

  • Fiddler

    数据处理我使用的 NodeJS,此处就不展开介绍了,如果您不会代码,可以搜索一下【剪映字幕转srt】

字幕生成

首先,我们将视频导入到剪映素材中,如下图所示,导入成功之后会生成视频预览,并且左边小窗上回显示已添加。

接着,我们切换到到【文本-识别字幕】,点击【开始识别】,此时剪映专业版就会识别视频中的人声,并自动在时间轴上生成字幕文件。

字幕捕获

然后呢,我们有条不紊地打开抓包工具,并开启 HTTPS 模式,这一步值得注意的是需要信任证书。

这时我们最好加个筛选条件,只显示lv-pc-api.ulikecam.com这域下的请求,也就是剪映字幕处理的接口。如果此时字幕已处理完毕,则重新点下上文步骤中的【开始识别】按钮。

由于笔者处理的视频比较长,大概有一个半小时,因此生成字幕的时间比较久,也是笔者不慌不忙的原因,稍等片刻,发现 fiddler 不再吐新的请求信息了,最终https://lv-pc-api.ulikecam.com/lv/v1/audio_subtitle/query 这个接口返回的就是我们的字幕。

字幕处理

最后一步了,其实我们只需复制上一步抓到的JSON数据就实现了字幕导出。处理这个JSON数据的方式有很多,比如可以借助一些公开的小工具,把这个JSON数据直接转成SRT字幕文件,也可以通过编程语言来自行编写程序按照自己的需要来处理。笔者比较熟悉的是JavaScript,因此使用NodeJS来处理,最终生成文本格式的文件。

先来看看笔者抓到的字幕数据格式:

{"ret": "0","errmsg": "success","svr_time": 1615699052,"log_id": "202103141317310102121441631D8D72AD","data": {"utterances": [{"text": "直播课堂","start_time": 0,"end_time": 896,"words": [{"text": "直","start_time": 0,"end_time": 258},{"text": "播","start_time": 258,"end_time": 360},{"text": "课","start_time": 360,"end_time": 520},{"text": "堂","start_time": 520,"end_time": 896}]},{"text": "又一次跟大家见面了","start_time": 2063,"end_time": 3680,"words": [{"text": "又","start_time": 2063,"end_time": 2240},{"text": "一","start_time": 2240,"end_time": 2400},{"text": "次","start_time": 2400,"end_time": 2576},{"text": "跟","start_time": 2663,"end_time": 2840},{"text": "大","start_time": 2840,"end_time": 2980},{"text": "家","start_time": 2980,"end_time": 3120},{"text": "见","start_time": 3120,"end_time": 3296},{"text": "面","start_time": 3303,"end_time": 3496},{"text": "了","start_time": 3503,"end_time": 3680}]},{"text": "我还是大家熟悉的主持人美娜","start_time": 3680,"end_time": 6656,"words": [{"text": "我","start_time": 3680,"end_time": 3856},{"text": "还","start_time": 3863,"end_time": 4056},{"text": "是","start_time": 4103,"end_time": 4296},{"text": "大","start_time": 4543,"end_time": 4700},{"text": "家","start_time": 4700,"end_time": 4856},{"text": "熟","start_time": 5023,"end_time": 5216},{"text": "悉","start_time": 5223,"end_time": 5380},{"text": "的","start_time": 5380,"end_time": 5500},{"text": "主","start_time": 5500,"end_time": 5620},{"text": "持","start_time": 5620,"end_time": 5740},{"text": "人","start_time": 5740,"end_time": 5896},{"text": "美","start_time": 6063,"end_time": 6256},{"text": "娜","start_time": 6263,"end_time": 6656}]}]}
}

因此,笔者的代码也非常简洁:

const fs = require('fs')
const rawdata = fs.readFileSync('./srt.json');
const {data} = JSON.parse(rawdata);const {utterances} = data
let txt = ''
for(let i of utterances) {txt += i.text + '\n'
}
fs.writeFile('srt.txt', txt, function (err) {if (err) {return console.error(err);}
});

最终生成的txt文件如下图:

当然如果您需要处理时间,处理start_timeend_time这两个字段即可。

小结

本次分享就到这,其实整个步骤也非常简单,只是在剪映专业版识别字幕的基础上对识别请求进行抓包,最终获得JOSN数据。如果您有更好的处理方式,欢迎评论区留言与我分享。

本文链接:https://my.lmcjl.com/post/8649.html

展开阅读全文

4 评论

留下您的评论.