一、短视频二次创作
在视频文件中混入别的音频文件,利用搞怪的配音对视频进行恶搞创作,或将原音频替换为混音后的音频,来实现不同的后期效果。
二、前提条件
·已创建和绑定 CI 存储桶,详情请参见 存储桶操作。
·已经 开通媒体处理 功能。
·已 上传视频文件 到存储桶中。
三、步骤一:初始化 COS SDK 并配置相关信息
初始化 COS JavaScript 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: '************************************', SecretKey: '**********',});// 存储桶配置请在cos控制台获取。https://console.cloud.tencent.com/cos/bucket// 格式参考:Bucket: 'abc-1250000000', Region: 'ap-shanghai'const config = { // 需要替换成你自己的存储桶信息 Bucket: "******125********", // 存储桶 Region: "**-*********", // 存储桶所在地域 FileName: "demo1.mp4", // 源文件 MixFileName: "demo2.mp4", // 混音文件 ResultName: "demo3.mp4", // 混音之后自定义文件名};
注意:说明:
四、步骤二:提交音视频转码任务
提交音视频转码任务,参数详情参见 提交任务接口。接口请求参数格式为:
/** * 支持使用cos桶文件,如果文件为私有读,需要使用cos.getObjectUrl方法得到一个带有签名信息的url * 如果为其他在线资源,可忽略此步骤 */const AkUrl = await cos.getObjectUrl({ Bucket: config.Bucket, Region: config.Region, Key: config.MixFileName, Sign: true,});const key = `jobs`; // 固定值,必须const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;const url = `https://${host}/${key}`;const body = COS.util.json2xml({ Request: { // 创建任务的Tag Tag: "Transcode", // 待操作的文件信息 Input: { // 源文件路径 Object: config.FileName, }, // 操作规则 Operation: { // 转码参数 Transcode: { Container: { Format: "mp4", }, Video: { Codec: "H.264", }, Audio: { Codec: "aac", }, // 混音参数 AudioMix: { AudioSource: AkUrl, // 混音文件路径 Replace: true, // 是否保留被混音视频的源音频 }, }, // 结果输出配置 Output: { // 存储桶的地域 Region: config.Region, // 存储结果的存储桶 Bucket: config.Bucket, // 输出结果的文件名 Object: config.ResultName, }, }, },});const res = await cos.request({ Method: "POST", // 固定值 Key: key, // 固定值 Url: url, // 请求的url Body: body, // 请求体参数 ContentType: "application/xml", // 固定值});
注意:说明:
五、步骤三:查询音视频转码任务执行结果
步骤二中提交任务后返回的 JobId 作为任务唯一标识,通过 JobId 查询转码任务,参数详情请参见 查询任务接口。
可定时查询任务的状态,当返回的 State 为 Success 时代表文件转码成功,混音之后的视频文件地址为:https://${config.Bucket}.cos.${config.Region}.myqcloud.com/${config.ResultName}。
轮询任务执行结果的代码可参考:
// 轮询任务执行结果function queryTranceTrack(jobId) { setTimeout(() => { const key = `jobs/${jobId}`; // jobId: 需要查询的jobId; const host = config.Bucket + ".ci." + config.Region + ".myqcloud.com"; const url = `https://${host}/${key}`; cos.request( { Bucket: config.Bucket, Region: config.Region, Method: "GET", Url: url, Key: key /** 固定值,必须 */, ContentType: "application/xml" /** 固定值,必须 */, }, async (err, data) => { if (err) { msgText.innerHTML = "任务查询失败,请在console查看报错信息"; console.log(JSON.stringify(err)); return; } const resp = data.Response || {}; //判断任务是否在执行中 if (resp.JobsDetail.State !== "Success") { msgText.innerHTML = "任务执行中…"; queryTranceTrack(jobId); return; } // 任务执行完成 初始化播放器 msgText.innerHTML = "任务完成"; } ); }, 2000);}
注意:说明:
注意:推荐使用 API Explorer 调试。
六、费用相关
·对象存储相关费用
·音视频转码费用
七、Demo 体验
具体代码可参考 cos demo。