概述
人声分离可以快速将音频和视频中的人声、背景音乐(伴奏)、乐器声部分分离为若干个文件,而且不会损失或破坏音质,轻松实现二次创作。本文将介绍如何基于COS Javascript SDK 调用腾讯云数据万象(CI)人声分离功能, 实现人声、背景音、伴奏的智能提取,以满足二次创作、降噪等业务场景。
应用场景
后期混音
理解多种不同风格的歌曲,从中分离伴奏和人声,并针对分离后的人声、背景音、伴奏等做变声、混音等多种风格艺术加工。
影视节目发行宣传
针对不同影视平台的用户观看兴趣取向,将源视频音频进行剥离后叠加所需 BGM 背景声进行素材混剪提升观看点击率。
准备工作
已创建和绑定存储桶,详情请参见 存储桶操作。
已 开通智能语音 功能。
已 上传视频、音频文件。
生成人声分离文件
步骤 1:初始化 COS SDK 并配置相关信息
<!--COS SDK--><script src="https://cdn.jsdelivr.net/npm/cos-js-sdk-v5/dist/cos-js-sdk-v5.min.js"></script>// 密钥请在访问管理控制台获取。https://console.cloud.tencent.com/cam/capiconst cos = new COS({SecretId: 'AKID*******',SecretKey: '**********',});
步骤 2:创建人声分离任务
// 存储桶配置请在cos控制台获取。https://console.cloud.tencent.com/cos/bucket// 格式参考:Bucket: 'abc-1250000000', Region: 'ap-shanghai'// 源文件相关配置const InputConf = {Bucket: '***-125********',Region: '**-*****',FileName: 'demo.mp4',};// 人声分离结果文件相关配置,注意:需与源文件所在存储桶为同地域const OutputConf = {Bucket: '***-125********',Region: 'ap-chongqing',AuObject: '', // 人声结果文件名Object: '', // 背景音结果文件名BassObject: '', // Bass声结果文件名DrumObject: '' // 鼓声结果文件名};//需在地址前拼接/jobs,即:`https://<BucketName-APPID>.ci.<Region>.myqcloud.com/jobsconst host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com';const url = 'https://' + host + '/jobs';// 使用cos sdk 发起人声分离任务请求// 人声分离参数,包括人声、背景声、人声和背景声、贝斯,鼓点const body = COS.util.json2xml({Request: {"Tag": "VoiceSeparate", /* 创建任务的 Transcode ,必须*/"Input": {"Object": InputConf.FileName, /* 需要的文档文件,存储桶里的路径,必须 */},"Operation": {"Output": {"Region": OutputConf.Region, /* 存储桶的地域,必须 */"Bucket": OutputConf.Bucket, /* 存储结果的存储桶,必须 */"Object": OutputConf.Object, /* 背景音结果文件名,非必须 */"AuObject": OutputConf.AuObject /* 人声结果文件名,非必须 */"BassObject": OutputConf.BassObject, /* Bass声结果文件名,非必须 */"DrumObject": OutputConf.DrumObject /* 鼓声结果文件名,非必须 *//* Object、AuObject、BassObject、DrumObject 不可以同时为空。 */},"VoiceSeparate": {"AudioConfig": {"Codec": "mp3" // 编解码格式,取值aac, mp3, flac, amr。当 Request.AudioMode 为 MusicMode 时,仅支持 mp3、wav、acc},"AudioMode": "IsAudio" // 输出音频模式,取值IsAudio(输出人声), IsBackground(输出背景声), AudioAndBackground(输出人声和背景声), MusicMode(输出人声、背景声、Bass声、鼓声)。},}},});const body = COS.util.json2xml(param);cos.request({Bucket: InputConf.Bucket,Region: InputConf.Region,Method: 'POST',Url: 'https://' + host + '/jobs',Key: '/jobs', /** 固定值,必须 */ContentType: 'application/xml', /** 固定值,必须 */Body: body},(err, data) => {console.log(err || data);});
说明:
人声分离计费规则详见 智能语音费用 - 人声分离。
接口返回参数请参见 响应参数,响应参数中的 JobsDetail 节点信息为任务接口响应信息。其中 JobId 为关键信息,步骤 3 获取人声分离结果时会用到。
步骤 3:获取人声分离文件
https://${OutputConf.Bucket}.cos.${OutputConf.Region}.myqcloud.com/${OutputConf.Object/AuObject/BassObject/DrumObject}
// 需在对象地址前面拼接 jobs/<jobId>,即:`https://<BucketName-APPID>.ci.<Region>.myqcloud.com/jobs/<jobId>`// jobId 即为刚刚创建的任务 IDconst host = InputConf.Bucket + '.ci.' + InputConf.Region + '.myqcloud.com';const url = 'https://' + host + '/jobs/' + JobId;cos.request({Bucket: InputConf.Bucket,Region: InputConf.Region,Method: 'GET',Url: url,Key: '/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://${OutputConf.Bucket}.cos.${OutputConf.Region}.myqcloud.com/${OutputConf.Object/AuObject/BassObject/DrumObject}`;});
操作结果
源视频如下:
<video src="https://cosbrowser-1253960454.file.myqcloud.com/sites/pr/voice-separate-demo.mov" width="350px" controls></video>
提取出来的人声如下:
<audio src="https://cosbrowser-1253960454.file.myqcloud.com/sites/pr/voice-separate-voice.mp3" controls="controls" style="display:block;width:100%"></audio>
提取出来的背景声如下:
<audio src="https://cosbrowser-1253960454.file.myqcloud.com/sites/pr/voice-separate-bak.mp3" controls="controls" style="display:block;width:100%"></audio>
提取出来的Bass声如下:
<audio src="https://cosbrowser-1253960454.file.myqcloud.com/sites/pr/voice-separate-bass.mp3" controls="controls" style="display:block;width:100%"></audio>
提取出来的鼓声如下:
<audio src="https://cosbrowser-1253960454.file.myqcloud.com/sites/pr/voice-separate-drum.mp3" controls="controls" style="display:block;width:100%"></audio>
费用相关
人声分离计费规则详见 智能语音费用 - 人声分离。
音视频文件存储在 COS 上,涉及 对象存储相关费用。
Demo 体验