|
|
@@ -3152,6 +3152,61 @@ class AnimeController extends BaseController
|
|
|
|
|
|
// 调用统一API创建任务
|
|
|
$task = $this->AIVideoGenerationService->createUnifiedApiTask($unifiedParams);
|
|
|
+ } elseif ($this->AnimeService->isSeedance20SeriesModel($model)) {
|
|
|
+ // 豆包Seedance 2.0(百度AI网关)/ 快快AI Seedance 2.0/2.5:参考图/配音音频需要先上传为素材
|
|
|
+ $isKuaikuai = $this->AnimeService->isKuaikuaiSeedanceModel($model);
|
|
|
+ // 保存原始参考图用于任务记录
|
|
|
+ $videoParams['reference_images'] = $reference_images;
|
|
|
+
|
|
|
+ if ($reference_images) {
|
|
|
+ // 限制只传入9张参考图
|
|
|
+ $reference_images = array_slice($reference_images, 0, 9);
|
|
|
+
|
|
|
+ // 维护ref_image_url字段(参考图URL,JSON数组,与智帧分支保持一致)
|
|
|
+ $videoParams['ref_image_url'] = json_encode($reference_images, 256);
|
|
|
+
|
|
|
+ // 参考图上传为素材(百度网关/快快AI),上传失败时同步清理提示词中的<图片N>标记
|
|
|
+ $reference_image_assets = $isKuaikuai
|
|
|
+ ? $this->AIVideoGenerationService->processReferenceImagesToKuaikuaiAssets($reference_images, $videoParams['prompt'])
|
|
|
+ : $this->AIVideoGenerationService->processReferenceImagesToSeedance20Assets($reference_images, $videoParams['prompt']);
|
|
|
+
|
|
|
+ // 素材上传失败后提示词可能被清理,同步更新视频参数中的提示词
|
|
|
+ $videoParams['prompt'] = trim($videoParams['prompt']);
|
|
|
+ $videoParams['content'][0]['text'] = trim($videoParams['prompt']);
|
|
|
+ $videoParams['reference_image_assets'] = $reference_image_assets;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 配音音频:快快AI上传为素材;百度/doubao走content audio_url
|
|
|
+ if ($canUseAudio && $audioUrl) {
|
|
|
+ if ($isKuaikuai) {
|
|
|
+ $reference_audio_assets = $this->AIVideoGenerationService->processReferenceAudiosToKuaikuaiAssets([$audioUrl], $videoParams['prompt']);
|
|
|
+ $videoParams['reference_audio_assets'] = $reference_audio_assets;
|
|
|
+ } else {
|
|
|
+ $videoParams['content'][] = [
|
|
|
+ 'type' => 'audio_url',
|
|
|
+ 'audio_url' => [
|
|
|
+ 'url' => $audioUrl,
|
|
|
+ ],
|
|
|
+ 'role' => 'reference_audio',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 优化提示词,增加音频相关描述
|
|
|
+ $audioPrompt = "全程使用音频1作为视频配音。" . $videoParams['prompt'];
|
|
|
+ $videoParams['prompt'] = $audioPrompt;
|
|
|
+ $videoParams['content'][0]['text'] = $audioPrompt;
|
|
|
+ } elseif ($audioDuration) {
|
|
|
+ // 有音频时长则需将视频时长设置为比音频时长更长的整数
|
|
|
+ $videoParams['video_duration'] = max(4, min(12, ceil($audioDuration)));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 快快AI走聚合网关 /v1/video/generations(火山豆包格式)
|
|
|
+ if ($isKuaikuai) {
|
|
|
+ $videoParams['gateway_base_url'] = env('KUAIKUAI_AI_BASE_URL', 'https://ai-api.kkidc.com');
|
|
|
+ $task = $this->AIVideoGenerationService->createKuaikuaiVideoTask($videoParams);
|
|
|
+ } else {
|
|
|
+ $task = $this->AIVideoGenerationService->createSeedance20Task($videoParams);
|
|
|
+ }
|
|
|
} else {
|
|
|
// Seedance模型(默认)
|
|
|
// 检查是否为 Seedance 2.0 模型,如果是则需要处理配音音频
|