如何自动识别视频语音内容并生成字幕

概览

本文将介绍如何使用腾讯云COS SDK调用数据万象的语音识别 能力生成视频字幕文件,并使用腾讯云点播超级播放器(TCPlayer) 播放挂载了字幕的视频。


业务场景

适用于短视频制作时,原始视频无字幕,需要自动识别视频语音内容并生成字幕的场景。可应用于 PGC/UGC 平台、视频网站、短视频应用、资讯平台等对媒体内容制作有较高智能化和时效性需求的行业。


准备工作

已创建和绑定存储桶,详情请参见 存储桶操作

已 开通语音识别 功能。

上传视频文件

在页面中引入 腾讯云COS SDK 与 TCPlayer 相关脚本文件:






设置播放器容器节点: 在需要展示播放器的页面位置加入播放器容器。例如,在 index.html 中加入如下代码(容器 ID 以及宽高都可以自定义)。



生成字幕文件步骤

步骤 1:初始化 腾讯云COS SDK 并配置相关信息


// 密钥请在访问管理控制台获取。

const cos = new COS({

SecretId: 'AKID*******',

SecretKey: '**********',

});

步骤 2:创建语音识别任务

构造提交语音识别任务接口并发起请求 请求参数


// 存储桶配置请在 cos 控制台获取。

// 格式参考:Bucket: 'abc-1250000000', Region: 'ap-shanghai'

const config = {

// 需要替换成您自己的存储桶信息

Bucket: '***-125********' /* 存储桶,必须 */,

Region: '**-*****' /* 存储桶所在地域,必须字段 */,

FileName: 'demo.mp4' /* 文件名 */,

};

//需在地址前拼接/asr_jobs,即:`https://<BucketName-APPID>.ci.<Region>.myqcloud.com/

const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com';

const url = 'https://' + host + '/asr_jobs';

//使用 cos sdk 发起语音识别任务请求

const body = COS.util.json2xml({

Request: {

Tag: 'SpeechRecognition' /* 创建任务的 Tag:SpeechRecognition ,必须*/,

Input: {

Object:config.FileName /* 需要语音识别的视频文件,存储桶里的路径 */,

},

Operation: {

SpeechRecognition: {

EngineModelType: '16k_zh_video' /* 引擎模型类型:16k 音视频领域 ,必须 */,

ChannelNum: 1 /* 语音声道数,必须 */,

ResTextFormat: 1 /* 识别结果返回形式,必须 */,

OutputFileType: 'srt',

},

Output: {

Bucket: config.Bucket /* 存储结果的存储桶 ,必须 */,

Region: config.Region /* 存储结果存储桶地域 ,必须 */,

Object: `demo.srt` /* 结果文件的名称 ,必须 */,

},

},

QueueId: '******************' /* 任务所在的队列 ID ,必须 */,

},

});

cos.request(

{

Bucket: config.Bucket,

Region: config.Region,

Method: 'POST',

Url: url,

Key: '/asr_jobs' /** 固定值,必须 */,

ContentType: 'application/xml' /** 固定值,必须 */,

Body: body,

},

(err, data) => {

console.log(err || data);

}

);


请求方式为 POST,Content-Type 为 application/xml,Tag 为 SpeechRecognition 语音识别,Input.Object 为 准备工作中上传的 视频文件,Operation.Output 为结果输出地址可以填准备工作中创建的存储桶,需要注意 Output.Object 文件名称后缀名应为 .srt 格式,Operation.SpeechRecognition 为语音识别配置参数。

接口响应参数,JobsDetail 节点下为下面 获取提语音识别任务接口接口响应 任务信息。其中 JobId 为关键信息,下面 构造查询语音识别任务链接 会用到。

步骤 3:获取字幕文件

查询语音识别任务执行是否完成,获取字幕文件


// 存储桶配置请在 cos 控制台获取。

// 格式参考:Bucket: 'abc-1250000000', Region: 'ap-shanghai'

const config = {

// 需要替换成您自己的存储桶信息

Bucket: '***-125********' /* 存储桶,必须 */,

Region: '**-*****' /* 存储桶所在地域,必须字段 */,

FileName: 'demo.srt' /* 文件名 */,

};

// 需在对象地址前面拼接 ai_jobs/<jobId>,即:`https://<BucketName-APPID>.ci.<Region>.myqcloud.com/ai_jobs/<jobId>`

// jobId 即为刚刚创建的任务 ID


const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com';

const url = 'https://' + host + '/asr_jobs/' + JobId;

cos.request(

{

Bucket: config.Bucket,

Region: config.Region,

Method: 'GET',

Url: url,

Key: '/asr_jobs/' + JobId /** 固定值,必须 */,

ContentType: 'application/xml' /** 固定值,必须 */,

},

(err, data) => {

if (err) {

// 语音识别任务查询失败,请在 console 查看报错信息;

console.log(JSON.stringify(err));

return;

}

const resp = data.Response || {};

//判断语音识别任务是否执行中

if (resp.JobsDetail.State !== 'Success') {

console.log('...语音识别任务执行中');

return;

}

//任务执行完成 字幕文件地址为

const srtUrl = `https://${config.Bucket}.cos.${config.Region}.myqcloud.com/${config.FileName}`;

}

);

返回体 Content-Type 为 application/xml,其中 State 为 Success 代表已经完成语音识别,读取到通过语音识别的字幕文件地址为 https://${Operation.Output.Bucket}.cos.${Operation.Output.Region}.myqcloud.com/${Operation.Output.Object}。


注意:

目前腾讯云有COS特惠活动,新人1元起

使用 TCPlayer 播放挂载了字幕的视频

1. 获取上面 准备工作 创建的视频文件地址: https://&lt;BucketName-APPID&gt;.cos.&lt;Region&gt;.myqcloud.com/xxx.mp4

2. 获取上面 生成字幕文件 创建的字幕文件地址: https://&lt;BucketName-APPID&gt;.cos.&lt;Region&gt;.myqcloud.com/xxx.srt

3. 初始化播放器,并设置视频地址和字幕文件:


// TODO: 使用 Web 播放器时,为获取更佳的兼容性,可将普通 srt 格式字幕文件转换为 webvtt 格式

const getWebvvtUrl = url => {

return fetch(url)

.then(response => response.text())

.then(text => {

const arr = text.split('\n');

text = arr.slice(0, arr.length - 4).join('\n');

const vvtText = 'WEBVTT\n' + '\n' + text.replace(/,/g, '.') + '\n';

console.log(vvtText);

return URL.createObjectURL(new Blob([vvtText]));

});

};

// srt 文件格式转 webvvt 格式,非必须,TCPlayer 播放器字幕文件暂只支持 webvvt 格式

const webvvtUrl = await getWebvvtUrl(`https://.cos..myqcloud.com/xxx.srt`);

// 初始化播放并设置播放地址及字幕文件

const Player = TCPlayer('player-container', {});

Player.src(`https://.cos..myqcloud.com/xxx.mp4`);

Player.on('ready', function () {

// 添加语音识别任务生成的字幕文件

const subTrack = Player.addRemoteTextTrack(

{

src: webvvtUrl, // 字幕文件

kind: 'subtitles',

srclang: 'zh-cn',

label: '中文',

default: 'true',

},

true

);

});

若存在跨域问题,则需要进行存储桶跨域访问 CORS 设置,详情请参见 设置跨域访问 。

若存储桶为私有读写,则对象地址需要携带签名,详情请参见 请求签名 。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容