智能伴奏人声提取

2026-01-15   访问量:0


概述

人声分离可以快速将音频和视频中的人声、背景音乐(伴奏)、乐器声部分分离为若干个文件,而且不会损失或破坏音质,轻松实现二次创作。本文将介绍如何基于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: '************************************',

 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,您也可在 数据万象体验馆 中体验人声分离实际效果。


热门文章
更多>