|
|
|
@ -101,7 +101,7 @@ public class ImgSpeak {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调用灵动人像LivePortrait唱歌视频合成API
|
|
|
|
|
* 调用灵动人像LivePortrait视频合成API
|
|
|
|
|
*
|
|
|
|
|
* @param imageUrl 图片URL
|
|
|
|
|
* @param audioUrl 音频URL
|
|
|
|
@ -160,26 +160,26 @@ public class ImgSpeak {
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
// 发送请求并获取响应
|
|
|
|
|
log.info("发送灵动人像LivePortrait唱歌视频合成请求: {}", requestBody.toJSONString());
|
|
|
|
|
log.info("发送灵动人像LivePortrait视频合成请求: {}", requestBody.toJSONString());
|
|
|
|
|
Response response = client.newCall(request).execute();
|
|
|
|
|
|
|
|
|
|
// 检查响应状态
|
|
|
|
|
if (!response.isSuccessful()) {
|
|
|
|
|
log.info(response.message());
|
|
|
|
|
String errorMsg = "灵动人像LivePortrait唱歌视频合成API请求失败,状态码: " + response.code();
|
|
|
|
|
String errorMsg = "灵动人像LivePortrait视频合成API请求失败,状态码: " + response.code();
|
|
|
|
|
log.error(errorMsg);
|
|
|
|
|
throw new Exception(errorMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 解析响应
|
|
|
|
|
String responseBody = response.body().string();
|
|
|
|
|
log.info("灵动人像LivePortrait唱歌视频合成响应: {}", responseBody);
|
|
|
|
|
log.info("灵动人像LivePortrait视频合成响应: {}", responseBody);
|
|
|
|
|
|
|
|
|
|
JSONObject responseJson = JSON.parseObject(responseBody);
|
|
|
|
|
|
|
|
|
|
// 获取任务ID
|
|
|
|
|
String taskId = responseJson.getJSONObject("output").getString("task_id");
|
|
|
|
|
log.info("灵动人像LivePortrait唱歌视频合成任务ID: {}", taskId);
|
|
|
|
|
log.info("灵动人像LivePortrait视频合成任务ID: {}", taskId);
|
|
|
|
|
|
|
|
|
|
return taskId;
|
|
|
|
|
}
|
|
|
|
@ -207,19 +207,19 @@ public class ImgSpeak {
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
// 发送请求并获取响应
|
|
|
|
|
log.info("查询灵动人像LivePortrait唱歌视频合成任务状态: {}", taskId);
|
|
|
|
|
log.info("查询灵动人像LivePortrait视频合成任务状态: {}", taskId);
|
|
|
|
|
Response response = client.newCall(request).execute();
|
|
|
|
|
|
|
|
|
|
// 检查响应状态
|
|
|
|
|
if (!response.isSuccessful()) {
|
|
|
|
|
String errorMsg = "灵动人像LivePortrait唱歌视频合成API请求失败,状态码: " + response.code();
|
|
|
|
|
String errorMsg = "灵动人像LivePortrait视频合成API请求失败,状态码: " + response.code();
|
|
|
|
|
log.error(errorMsg);
|
|
|
|
|
throw new Exception(errorMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 解析响应
|
|
|
|
|
String responseBody = response.body().string();
|
|
|
|
|
log.info("查询灵动人像LivePortrait唱歌视频合成任务状态响应: {}", responseBody);
|
|
|
|
|
log.info("查询灵动人像LivePortrait视频合成任务状态响应: {}", responseBody);
|
|
|
|
|
|
|
|
|
|
return JSON.parseObject(responseBody);
|
|
|
|
|
}
|
|
|
|
@ -285,10 +285,10 @@ public class ImgSpeak {
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
// 图片URL
|
|
|
|
|
String imageUrl = "https://dsideal.obs.myhuaweicloud.com/HuangHai/%E5%A4%87%E4%BB%BD/p874897.png";
|
|
|
|
|
// 音频URL(唱歌音频)
|
|
|
|
|
// 音频URL(音频)
|
|
|
|
|
String audioUrl = "https://dsideal.obs.myhuaweicloud.com/HuangHai/%E5%A4%87%E4%BB%BD/p874897.wav";
|
|
|
|
|
|
|
|
|
|
// 模板ID - 使用唱歌模板
|
|
|
|
|
// 模板ID - 使用模板
|
|
|
|
|
String templateId = "sing"; // 可选值:normal, dance, rap, sing等
|
|
|
|
|
// 眼睛移动频率
|
|
|
|
|
double eyeMoveFreq = 0.5;
|
|
|
|
@ -301,7 +301,7 @@ public class ImgSpeak {
|
|
|
|
|
// 头部动作强度
|
|
|
|
|
double headMoveStrength = 0.7;
|
|
|
|
|
|
|
|
|
|
// 调用灵动人像LivePortrait唱歌视频合成API
|
|
|
|
|
// 调用灵动人像LivePortrait视频合成API
|
|
|
|
|
String taskId = synthesisVideo(imageUrl, audioUrl, templateId, eyeMoveFreq,
|
|
|
|
|
videoFps, mouthMoveStrength, pasteBack, headMoveStrength);
|
|
|
|
|
|
|
|
|
|