概覽
本文將介紹如何使用騰訊云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://<BucketName-APPID>.cos.<Region>.myqcloud.com/xxx.mp4
2.?獲取上面?生成字幕文件?創(chuàng)建的字幕文件地址:?https://<BucketName-APPID>.cos.<Region>.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ǔ)桶為私有讀寫,則對象地址需要攜帶簽名,詳情請參見?請求簽名?。