本文档是关于全妙视频混剪代码调用的操作介绍文档。
传统视频剪辑痛点
传统视频剪辑通常高度依赖专业剪辑软件,操作门槛高、流程繁琐,需要人工完成素材筛选、剪辑、转场、字幕添加等环节,耗时耗力。同时,传统方式难以实现批量处理和自动化生成,尤其在面对大量短视频生产需求时,效率低下且成本高昂。
视频混剪优势
视频混剪通过AI技术有效解决了上述痛点:它无需安装复杂软件,支持一键自动剪辑,能够智能识别精彩片段、自动配乐、生成字幕、优化画面节奏,并可基于模板快速批量产出高质量视频。这不仅大幅降低了剪辑门槛,还显著提升了内容生产效率,满足了企业及个人在短视频时代对高效、智能化视频制作的需求。
视频混剪支持场景及效果
目前视频混剪适合的领域是营销广告领域,主要支持三个视频剪辑场景:
基于一个长视频素材,用户输入脚本的主题要求,系统会结合长视频素材和生成的脚本,最后剪辑成一个短视频;
基于若干素材视频,用户输入脚本的主题要求,系统会结合多个视频素材和生成的脚本,最后剪辑成一个短视频;
模型首先会学习用户上传的样本视频和视频内脚本的特点,基于用户上传的视频素材,用户输入脚本的主题要求,系统会结合学习到的样本视频的特点,以及新的视频素材和脚本内容,最后剪辑成一个新的短视频。
前提条件
获取WorkSpaceId 获取Workspace ID;
引入全妙SDK 注意获取最新SDK版本。
使⽤视频混剪功能,是使⽤SDK⽅式,MAVEN依赖如下:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-aimiaobi20230801</artifactId>
<version>1.0.68</version>
</dependency>调用前必读
接口调用顺序:asyncUploadVideo(上传素材阶段)-> asyncCreateClipsTimeLine(生成剪辑timeline阶段)-> asyncCreateClipsTask(生成剪辑视频阶段);
定时使用getAutoClipsTaskInfo获取每个阶段的任务状态,每个阶段结束才能进入下一阶段;
视频混剪的接口地址:妙笔-视频混剪。
接口调用的步骤
第一步上传视频素材
上传视频素材;
视频素材的大小要求:一个视频素材不超过200M,全部视频素材总时长不超过20分钟。
package com.aliyun.sdk.service.aimiaobi20230801;
import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.aimiaobi20230801.models.AsyncUploadVideoRequest;
import com.aliyun.sdk.service.aimiaobi20230801.models.AsyncUploadVideoResponse;
import com.aliyun.sdk.service.aimiaobi20230801.utils.Util;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import com.aliyun.sdk.service.aimiaobi20230801.models.AsyncUploadVideoRequest.SourceVideos;
import com.aliyun.sdk.service.aimiaobi20230801.models.AsyncUploadVideoRequest.ReferenceVideo;
public class asyncUploadVideo {
public static void main(String[] args) {
try{
String akSwap = "xxxx";
String skSwap = "xxxx";
StaticCredentialProvider provider = StaticCredentialProvider.create(
Credential.builder()
.accessKeyId(akSwap)
.accessKeySecret(skSwap)
.build()
);
AsyncClient client = AsyncClient.builder()
.region("cn-beijing")
.credentialsProvider(provider)
// Service-level configuration
.serviceConfiguration(Configuration.create()
.setSignatureVersion(SignatureVersion.V3)
)
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setProtocol("HTTPS")
.setEndpointOverride("aimiaobi.cn-beijing.aliyuncs.com")
)
.build();
List<SourceVideos> sourceVideos = new ArrayList<>();
SourceVideos sv001= SourceVideos.builder()
.videoUrl("https://xxx")
.videoName("万国觉醒-骑兵.mp4")
.build();
sourceVideos.add(sv001);
SourceVideos sv002 = SourceVideos.builder()
.videoUrl("https://xxx")
.videoName("万国觉醒-连弩.mp4")
.build();
sourceVideos.add(sv002);
SourceVideos sv003 = SourceVideos.builder()
.videoUrl("https://xxx")
.videoName("万国觉醒-白起.mp4")
.build();
sourceVideos.add(sv003);
/*
ReferenceVideo refVideo = ReferenceVideo .builder()
.videoUrl("https://xxx")
.videoName("小紫瓶精华第六代-参考.mp4")
.build();
*/
AsyncUploadVideoRequest request = AsyncUploadVideoRequest.builder()
.workspaceId("llm-xxxx")
.splitInterval(1)
.sourceVideos(sourceVideos)
//.referenceVideo(refVideo)
.build();
CompletableFuture<AsyncUploadVideoResponse> future = client.asyncUploadVideo(request);
AsyncUploadVideoResponse response = future.get();
System.out.println("ALL***********************");
System.out.println("请求成功的请求头值:");
System.out.println(response.getStatusCode());
System.out.println(response.getHeaders());
String jsonStr = JSON.toJSONString(response.getBody());
System.out.println(jsonStr);
}catch (Exception ex){
System.out.println("///////exception happen is " + ex);
}
}
}
确认视频是否上传成功,上传完成后可操作第二步。
package com.aliyun.sdk.service.aimiaobi20230801;
import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.aimiaobi20230801.models.GetAutoClipsTaskInfoRequest;
import com.aliyun.sdk.service.aimiaobi20230801.models.GetAutoClipsTaskInfoResponse;
import com.aliyun.sdk.service.aimiaobi20230801.utils.Util;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;
public class getAutoClipsTaskInfo {
public static void main(String[] args) {
try{
String akSwap = "xxxx";
String skSwap = "xxxx";
StaticCredentialProvider provider = StaticCredentialProvider.create(
Credential.builder()
.accessKeyId(akSwap)
.accessKeySecret(skSwap)
.build()
);
AsyncClient client = AsyncClient.builder()
.region("cn-beijing")
.credentialsProvider(provider)
// Service-level configuration
.serviceConfiguration(Configuration.create()
.setSignatureVersion(SignatureVersion.V3)
)
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setProtocol("HTTPS")
.setEndpointOverride("aimiaobi.cn-beijing.aliyuncs.com")
)
.build();
GetAutoClipsTaskInfoRequest request = GetAutoClipsTaskInfoRequest.builder()
.workspaceId("llm-xxxx")
.taskId("xxxx")
.build();
CompletableFuture<GetAutoClipsTaskInfoResponse> future = client.getAutoClipsTaskInfo(request);
GetAutoClipsTaskInfoResponse response = future.get();
System.out.println("ALL***********************");
System.out.println("请求成功的请求头值:");
System.out.println(response.getStatusCode());
System.out.println(response.getHeaders());
String jsonStr = JSON.toJSONString(response.getBody());
System.out.println(jsonStr);
}catch (Exception ex){
System.out.println("///////exception happen is " + ex);
}
}
}
第二步生成剪辑timeline阶段
调用接口生成剪辑的timeline;
package com.aliyun.sdk.service.aimiaobi20230801;
import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.aimiaobi20230801.models.AsyncCreateClipsTimeLineRequest;
import com.aliyun.sdk.service.aimiaobi20230801.models.AsyncCreateClipsTimeLineResponse;
import com.aliyun.sdk.service.aimiaobi20230801.utils.Util;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;
public class asyncCreateClipsTimeLine {
public static void main(String[] args) {
try{
String akSwap = "xxxx";
String skSwap = "xxxx";
StaticCredentialProvider provider = StaticCredentialProvider.create(
Credential.builder()
.accessKeyId(akSwap)
.accessKeySecret(skSwap)
.build()
);
AsyncClient client = AsyncClient.builder()
.region("cn-beijing")// Region ID
.credentialsProvider(provider)
// Service-level configuration
.serviceConfiguration(Configuration.create()
.setSignatureVersion(SignatureVersion.V3)
)
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setProtocol("HTTPS")
.setEndpointOverride("aimiaobi.cn-beijing.aliyuncs.com")
)
.build();
AsyncCreateClipsTimeLineRequest request = AsyncCreateClipsTimeLineRequest.builder()
.workspaceId("llm-xxxx")
.taskId("xxxx")
.processPrompt("口播内容是游戏《万国觉醒》的宣传广告,视频中间不要出现\"万国觉醒字样\",视频的结束画面要有《万国觉醒》字样的画面。")
//.processModel("qwen-plus-latest")
.customContent("有小伙伴问古代战场,什么兵种可以克制步兵,当然是骑兵!在游戏《万国觉醒》中霍去病带领的大汉铁骑,\n" +
"曹操统帅的虎豹骑,不但有10%的行军速度,还有30%的攻击加成,是战场上的碾压步兵的无敌兵种。那小伙伴们又问了《万国觉醒》中有什么兵种可以克制骑兵吗,\n" +
"当然有,诸葛亮率领的连弩兵活力迅猛且杀伤力极强,可以在远程对骑兵形成有效压制,骑兵还没有冲过来就已经被诸葛亮的连弩射中身亡了,连弩绝对是杀伤骑兵最有效的兵种。\n" +
"虽然骑兵和连弩兵各有特色,一旦以少胜多敌多,还是力不从心。但你可能不知道《万国觉醒》中有一位英雄最擅长以少敌多,他就是杀神白起,白起率领的部队击杀敌人越多,普通伤害就越高,白起更能全面强化\n" +
"残血部队的攻防,让其成为名副其实的战场绞肉机,敌人越多约厉害。想体验这一切吗,快来《万国觉醒》战个痛快。")
.build();
CompletableFuture<AsyncCreateClipsTimeLineResponse> future = client.asyncCreateClipsTimeLine(request);
AsyncCreateClipsTimeLineResponse response = future.get();
System.out.println("ALL***********************");
System.out.println("请求成功的请求头值:");
System.out.println(response.getStatusCode());
System.out.println(response.getHeaders());
String jsonStr = JSON.toJSONString(response.getBody());
System.out.println(jsonStr);
}catch (Exception ex){
System.out.println("///////exception happen is " + ex);
}
}
}
确认视频剪辑的timeline是否生成完成,生成完成后可操作第三步。
package com.aliyun.sdk.service.aimiaobi20230801;
import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.aimiaobi20230801.models.GetAutoClipsTaskInfoRequest;
import com.aliyun.sdk.service.aimiaobi20230801.models.GetAutoClipsTaskInfoResponse;
import com.aliyun.sdk.service.aimiaobi20230801.utils.Util;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;
public class getAutoClipsTaskInfo {
public static void main(String[] args) {
try{
String akSwap = "xxxx";
String skSwap = "xxxx";
StaticCredentialProvider provider = StaticCredentialProvider.create(
Credential.builder()
.accessKeyId(akSwap)
.accessKeySecret(skSwap)
.build()
);
AsyncClient client = AsyncClient.builder()
.region("cn-beijing")
.credentialsProvider(provider)
// Service-level configuration
.serviceConfiguration(Configuration.create()
.setSignatureVersion(SignatureVersion.V3)
)
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setProtocol("HTTPS")
.setEndpointOverride("aimiaobi.cn-beijing.aliyuncs.com")
)
.build();
GetAutoClipsTaskInfoRequest request = GetAutoClipsTaskInfoRequest.builder()
.workspaceId("llm-xxxx")
.taskId("xxxx")
.build();
CompletableFuture<GetAutoClipsTaskInfoResponse> future = client.getAutoClipsTaskInfo(request);
GetAutoClipsTaskInfoResponse response = future.get();
System.out.println("ALL***********************");
System.out.println("请求成功的请求头值:");
System.out.println(response.getStatusCode());
System.out.println(response.getHeaders());
String jsonStr = JSON.toJSONString(response.getBody());
System.out.println(jsonStr);
}catch (Exception ex){
System.out.println("///////exception happen is " + ex);
}
}
}
第三步生成剪辑视频阶段
最后生成新视频;
package com.aliyun.sdk.service.aimiaobi20230801;
import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.aimiaobi20230801.models.*;
import com.aliyun.sdk.service.aimiaobi20230801.utils.Util;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class asyncCreateClipsTask {
public static void main(String[] args) {
try{
String akSwap = "xxx";
String skSwap = "xxx";
StaticCredentialProvider provider = StaticCredentialProvider.create(
Credential.builder()
.accessKeyId(akSwap)
.accessKeySecret(skSwap)
.build()
);
AsyncClient client = AsyncClient.builder()
.region("cn-beijing")// Region ID
.credentialsProvider(provider)
// Service-level configuration
.serviceConfiguration(Configuration.create()
.setSignatureVersion(SignatureVersion.V3)
)
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setProtocol("HTTPS")
.setEndpointOverride("aimiaobi.cn-beijing.aliyuncs.com")
)
.build();
List<AsyncCreateClipsTaskRequest.ColorWords> colorWords = new ArrayList<>();
AsyncCreateClipsTaskRequest.ColorWords cw = AsyncCreateClipsTaskRequest.ColorWords.builder()
.y(0.1F)
.x(0.1F)
.content("冰川保湿露,随时补水")
.effectColorStyle("CS0002-000007")
.fontSize(120)
.timelineIn(0)
.timelineOut(5)
.build();
colorWords.add(cw);
AsyncCreateClipsTaskRequest request = AsyncCreateClipsTaskRequest.builder()
.workspaceId("llm-xxx")
.taskId("xxx")
//.colorWords(colorWords)
.build();
CompletableFuture<AsyncCreateClipsTaskResponse> future = client.asyncCreateClipsTask(request);
AsyncCreateClipsTaskResponse response = future.get();
System.out.println("ALL***********************");
System.out.println("请求成功的请求头值:");
System.out.println(response.getStatusCode());
System.out.println(response.getHeaders());
String jsonStr = JSON.toJSONString(response.getBody());
System.out.println(jsonStr);
}catch (Exception ex){
System.out.println("///////exception happen is " + ex);
}
}
}
确认新视频是否剪辑完成。
package com.aliyun.sdk.service.aimiaobi20230801;
import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.aimiaobi20230801.models.GetAutoClipsTaskInfoRequest;
import com.aliyun.sdk.service.aimiaobi20230801.models.GetAutoClipsTaskInfoResponse;
import com.aliyun.sdk.service.aimiaobi20230801.utils.Util;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;
public class getAutoClipsTaskInfo {
public static void main(String[] args) {
try{
String akSwap = "xxxx";
String skSwap = "xxxx";
StaticCredentialProvider provider = StaticCredentialProvider.create(
Credential.builder()
.accessKeyId(akSwap)
.accessKeySecret(skSwap)
.build()
);
AsyncClient client = AsyncClient.builder()
.region("cn-beijing")
.credentialsProvider(provider)
// Service-level configuration
.serviceConfiguration(Configuration.create()
.setSignatureVersion(SignatureVersion.V3)
)
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setProtocol("HTTPS")
.setEndpointOverride("aimiaobi.cn-beijing.aliyuncs.com")
)
.build();
GetAutoClipsTaskInfoRequest request = GetAutoClipsTaskInfoRequest.builder()
.workspaceId("llm-xxxx")
.taskId("xxxx")
.build();
CompletableFuture<GetAutoClipsTaskInfoResponse> future = client.getAutoClipsTaskInfo(request);
GetAutoClipsTaskInfoResponse response = future.get();
System.out.println("ALL***********************");
System.out.println("请求成功的请求头值:");
System.out.println(response.getStatusCode());
System.out.println(response.getHeaders());
String jsonStr = JSON.toJSONString(response.getBody());
System.out.println(jsonStr);
}catch (Exception ex){
System.out.println("///////exception happen is " + ex);
}
}
}