智能伴奏人声提取

最近更新时间:2024-01-19 11:26:22

我的收藏

概述

人声分离可以快速将音频和视频中的人声、背景音乐(伴奏)、乐器声部分分离为若干个文件,而且不会损失或破坏音质,轻松实现二次创作。本文将介绍如何基于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/capi
const cos = new COS({
SecretId: 'AKID*******',
SecretKey: '**********',
});
说明:
注意:该初始化方式仅供联调测试使用,为了安全起见,请勿在生产环境直接暴露密钥。
生产环境请参考各语言 SDK 签名实现,详情请参见 SDK 签名实现

步骤 2:创建人声分离任务

构造提交人声分离任务接口并发起请求,相关请求参数请参见 API 文档
// 存储桶配置请在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/jobs
const 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:获取人声分离文件

通过 JobId 查询任务执行结果,详情请参见 查询任务接口 。 可定时查询任务的状态,当返回的 State 为 Success 时代表人声分离执行成功,音频地址为:
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 即为刚刚创建的任务 ID

const 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 体验

具体代码可参考 cos demo,您也可在 数据万象体验馆 中体验人声分离实际效果。