当前位置:网站首页>剪映专业版字幕导出随笔
剪映专业版字幕导出随笔
2022-08-04 05:29:00 【语歆】
剪映专业版字幕导出随笔
最近有个识别视频中人声转成字幕并导出的小需求,找了一圈发现头条系的剪映专业版真好用,借助剪映专业版的识别字幕功能,以及抓包工具 fiddler 获取到字幕的json文件,实现“字幕导出”。特以此文纪念一下,截止2021年03月14日12:19:26,此方法有效,不排除剪映升级后方法可能失效。
环境准备
首先必须安装剪映专业版,如果您还没用过剪映专业版,请自行搜索关键字【剪映】下载安装;另外需要安装抓包工具,笔者安装的是【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_time和end_time这两个字段即可。
小结
本次分享就到这,其实整个步骤也非常简单,只是在剪映专业版识别字幕的基础上对识别请求进行抓包,最终获得JOSN数据。如果您有更好的处理方式,欢迎评论区留言与我分享。
边栏推荐
- 【CV-Learning】Image Classification
- 字典特征提取,文本特征提取。
- 打金?工作室?账号被封?游戏灰黑产离我们有多近
- Attention Is All You Need(Transformer)
- 双向LSTM
- The pipeline mechanism in sklearn
- oracle的number与postgresql的numeric对比
- Install dlib step pit record, error: WARNING: pip is configured with locations that require TLS/SSL
- Android foundation [Super detailed android storage method analysis (SharedPreferences, SQLite database storage)]
- 动手学深度学习_softmax回归
猜你喜欢

【论文阅读】TransReID: Transformer-based Object Re-Identification

【CV-Learning】Image Classification

【CV-Learning】Convolutional Neural Network
![[Introduction to go language] 12. Pointer](/img/c8/4489993e66f1ef383ce49c95d78b1f.png)
[Introduction to go language] 12. Pointer

TensorFlow2学习笔记:8、tf.keras实现线性回归,Income数据集:受教育年限与收入数据集

tensorRT5.15 使用中的注意点

度量学习(Metric learning、损失函数、triplet、三元组损失、fastreid)

yolov3中数据读入(一)

Attention Is All You Need(Transformer)

【深度学习21天学习挑战赛】3、使用自制数据集——卷积神经网络(CNN)天气识别
随机推荐
典型CCN网络——efficientNet(2019-Google-已开源)
软著撰写注意事项
度量学习(Metric learning、损失函数、triplet、三元组损失、fastreid)
TensorFlow2学习笔记:4、第一个神经网模型,鸢尾花分类
thymeleaf中 th:href使用笔记
MAE 论文《Masked Autoencoders Are Scalable Vision Learners》
MFC读取点云,只能正常显示第一个,显示后面时报错
2020-10-29
Dictionary feature extraction, text feature extraction.
Usage of RecyclerView
Matplotlib中的fill_between;np.argsort()函数
RecyclerView的用法
The difference between oracle temporary table and pg temporary table
Android foundation [Super detailed android storage method analysis (SharedPreferences, SQLite database storage)]
图像线性融合
Usage of Thread, Handler and IntentService
【代码学习】
动手学深度学习_线性回归
Postgresql 快照
(TensorFlow) - detailed explanation of tf.variable_scope and tf.name_scope