剪映专业版字幕导出随笔

您所在的位置:网站首页 剪映导出来字幕滞后 剪映专业版字幕导出随笔

剪映专业版字幕导出随笔

2023-03-09 20:22| 来源: 网络整理| 查看: 265

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

剪映专业版字幕导出随笔

最近有个识别视频中人声转成字幕并导出的小需求,找了一圈发现头条系的剪映专业版真好用,借助剪映专业版的识别字幕功能,以及抓包工具 fiddler 获取到字幕的json文件,实现“字幕导出”。特以此文纪念一下,截止2021年03月14日12:19:26,此方法有效,不排除剪映升级后方法可能失效。

环境准备

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

环境截图如下:

剪映 剪映专业版--Copy攻城狮

Fiddler 抓包工具fiddler-Copy攻城狮 数据处理我使用的 NodeJS,此处就不展开介绍了,如果您不会代码,可以搜索一下【剪映字幕转srt】

字幕生成

首先,我们将视频导入到剪映素材中,如下图所示,导入成功之后会生成视频预览,并且左边小窗上回显示已添加。 剪映导入视频-Copy攻城狮 接着,我们切换到到【文本-识别字幕】,点击【开始识别】,此时剪映专业版就会识别视频中的人声,并自动在时间轴上生成字幕文件。 剪映识别字幕-Copy攻城狮

字幕捕获

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

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

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

字幕处理

最后一步了,其实我们只需复制上一步抓到的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文件如下图: 剪映专业版字幕转txt--Copy攻城狮 当然如果您需要处理时间,处理start_time和end_time这两个字段即可。

小结

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3