如何自動(dòng)識(shí)別視頻語音內(nèi)容并生成字幕

概覽

本文將介紹如何使用騰訊云COS SDK調(diào)用數(shù)據(jù)萬象的語音識(shí)別?能力生成視頻字幕文件,并使用騰訊云點(diǎn)播超級(jí)播放器(TCPlayer)?播放掛載了字幕的視頻。


業(yè)務(wù)場景

適用于短視頻制作時(shí),原始視頻無字幕,需要自動(dòng)識(shí)別視頻語音內(nèi)容并生成字幕的場景??蓱?yīng)用于 PGC/UGC 平臺(tái)、視頻網(wǎng)站、短視頻應(yīng)用、資訊平臺(tái)等對媒體內(nèi)容制作有較高智能化和時(shí)效性需求的行業(yè)。


準(zhǔn)備工作

已創(chuàng)建和綁定存儲(chǔ)桶,詳情請參見?存儲(chǔ)桶操作

已?開通語音識(shí)別?功能。

上傳視頻文件

在頁面中引入 騰訊云COS SDK?與?TCPlayer?相關(guān)腳本文件:






設(shè)置播放器容器節(jié)點(diǎn): 在需要展示播放器的頁面位置加入播放器容器。例如,在 index.html 中加入如下代碼(容器 ID 以及寬高都可以自定義)。



生成字幕文件步驟

步驟 1:初始化 騰訊云COS SDK 并配置相關(guān)信息


// 密鑰請?jiān)?a target="_blank">訪問管理控制臺(tái)獲取。

const?cos?=?new?COS({

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

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

});

步驟 2:創(chuàng)建語音識(shí)別任務(wù)

構(gòu)造提交語音識(shí)別任務(wù)接口并發(fā)起請求?請求參數(shù)


// 存儲(chǔ)桶配置請?jiān)?a target="_blank">?cos 控制臺(tái)獲取。

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

const?config?=?{

// 需要替換成您自己的存儲(chǔ)桶信息

Bucket:?'***-125********'?/* 存儲(chǔ)桶,必須 */,

Region:?'**-*****'?/* 存儲(chǔ)桶所在地域,必須字段 */,

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 發(fā)起語音識(shí)別任務(wù)請求

const?body?=?COS.util.json2xml({

Request:?{

Tag:?'SpeechRecognition'?/* 創(chuàng)建任務(wù)的 Tag:SpeechRecognition ,必須*/,

Input:?{

Object:config.FileName?/* 需要語音識(shí)別的視頻文件,存儲(chǔ)桶里的路徑 */,

},

Operation:?{

SpeechRecognition:?{

EngineModelType:?'16k_zh_video'?/* 引擎模型類型:16k 音視頻領(lǐng)域 ,必須 */,

ChannelNum:?1?/* 語音聲道數(shù),必須 */,

ResTextFormat:?1?/* 識(shí)別結(jié)果返回形式,必須 */,

OutputFileType:?'srt',

},

Output:?{

Bucket:?config.Bucket?/* 存儲(chǔ)結(jié)果的存儲(chǔ)桶 ,必須 */,

Region:?config.Region?/* 存儲(chǔ)結(jié)果存儲(chǔ)桶地域 ,必須 */,

Object:?`demo.srt`?/* 結(jié)果文件的名稱 ,必須 */,

},

},

QueueId:?'******************'?/* 任務(wù)所在的隊(duì)列 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 語音識(shí)別,Input.Object 為 準(zhǔn)備工作中上傳的 視頻文件,Operation.Output 為結(jié)果輸出地址可以填準(zhǔn)備工作中創(chuàng)建的存儲(chǔ)桶,需要注意 Output.Object 文件名稱后綴名應(yīng)為?.srt?格式,Operation.SpeechRecognition 為語音識(shí)別配置參數(shù)。

接口響應(yīng)參數(shù),JobsDetail 節(jié)點(diǎn)下為下面?獲取提語音識(shí)別任務(wù)接口接口響應(yīng)?任務(wù)信息。其中 JobId 為關(guān)鍵信息,下面?構(gòu)造查詢語音識(shí)別任務(wù)鏈接?會(huì)用到。

步驟 3:獲取字幕文件

查詢語音識(shí)別任務(wù)執(zhí)行是否完成,獲取字幕文件


// 存儲(chǔ)桶配置請?jiān)?cos 控制臺(tái)獲取。

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

const?config?=?{

// 需要替換成您自己的存儲(chǔ)桶信息

Bucket:?'***-125********'?/* 存儲(chǔ)桶,必須 */,

Region:?'**-*****'?/* 存儲(chǔ)桶所在地域,必須字段 */,

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

};

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

// jobId 即為剛剛創(chuàng)建的任務(wù) 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)?{

// 語音識(shí)別任務(wù)查詢失敗,請?jiān)?console 查看報(bào)錯(cuò)信息;

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

return;

}

const?resp?=?data.Response?||?{};

//判斷語音識(shí)別任務(wù)是否執(zhí)行中

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

console.log('...語音識(shí)別任務(wù)執(zhí)行中');

return;

}

//任務(wù)執(zhí)行完成 字幕文件地址為

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

}

);

返回體 Content-Type 為 application/xml,其中 State 為 Success 代表已經(jīng)完成語音識(shí)別,讀取到通過語音識(shí)別的字幕文件地址為 https://${Operation.Output.Bucket}.cos.${Operation.Output.Region}.myqcloud.com/${Operation.Output.Object}。


注意:

目前騰訊云有COS特惠活動(dòng),新人1元起

使用 TCPlayer 播放掛載了字幕的視頻

1.?獲取上面?準(zhǔn)備工作?創(chuàng)建的視頻文件地址:?https://&lt;BucketName-APPID&gt;.cos.&lt;Region&gt;.myqcloud.com/xxx.mp4

2.?獲取上面?生成字幕文件?創(chuàng)建的字幕文件地址:?https://&lt;BucketName-APPID&gt;.cos.&lt;Region&gt;.myqcloud.com/xxx.srt

3.?初始化播放器,并設(shè)置視頻地址和字幕文件:


// TODO: 使用 Web 播放器時(shí),為獲取更佳的兼容性,可將普通 srt 格式字幕文件轉(zhuǎn)換為 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 文件格式轉(zhuǎn) webvvt 格式,非必須,TCPlayer 播放器字幕文件暫只支持 webvvt 格式

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

// 初始化播放并設(shè)置播放地址及字幕文件

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

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

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

// 添加語音識(shí)別任務(wù)生成的字幕文件

const?subTrack?=?Player.addRemoteTextTrack(

{

src:?webvvtUrl,?// 字幕文件

kind:?'subtitles',

srclang:?'zh-cn',

label:?'中文',

default:?'true',

},

true

);

});

若存在跨域問題,則需要進(jìn)行存儲(chǔ)桶跨域訪問 CORS 設(shè)置,詳情請參見?設(shè)置跨域訪問?。

若存儲(chǔ)桶為私有讀寫,則對象地址需要攜帶簽名,詳情請參見?請求簽名?。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容