Sfoglia il codice sorgente

将参考图片及音频记录到视频任务对应字段

lh 2 giorni fa
parent
commit
5151ad884f

+ 4 - 0
app/Http/Controllers/Anime/AnimeController.php

@@ -3272,6 +3272,8 @@ class AnimeController extends BaseController
                     // 角色音色参考音频:上传为素材并传入统一API(上传失败时清理提示词中的<音频N>标记)
                     if ($reference_audios) {
                         $unifiedParams['ref_audio_url'] = json_encode($reference_audios, 256);
+                        // 任务记录:参考图与参考音频一起存入 ref_image_url
+                        $unifiedParams['ref_image_url'] = $this->AnimeService->mergeReferenceAudiosIntoRefImageUrl($unifiedParams['ref_image_url'] ?? '', $reference_audios);
                         $reference_audio_assets = $this->AnimeService->processActReferenceAudiosToAssets($reference_audios, $model, $unifiedParams['prompt']);
                         $parameters['reference_audios'] = $reference_audio_assets;
                         // 音频素材上传失败的角色回退到音色提示词
@@ -3320,6 +3322,8 @@ class AnimeController extends BaseController
                     $allReferenceAudios = $segmentAudio['reference_audios'];
                     if ($allReferenceAudios) {
                         $videoParams['ref_audio_url'] = json_encode($allReferenceAudios, 256);
+                        // 任务记录:参考图与参考音频一起存入 ref_image_url
+                        $videoParams['ref_image_url'] = $this->AnimeService->mergeReferenceAudiosIntoRefImageUrl($videoParams['ref_image_url'] ?? '', $allReferenceAudios);
                         $reference_audio_assets = $this->AnimeService->processActReferenceAudiosToAssets($allReferenceAudios, $model, $videoParams['prompt']);
                         $videoParams['reference_audio_assets'] = $reference_audio_assets;
 

+ 27 - 1
app/Services/Anime/AnimeService.php

@@ -5083,7 +5083,8 @@ class AnimeService
         $processResult = $this->processActContentWithProducts($actContent, $products, $supportAudioReference);
         $fullPrompt = $processResult['content'];
         // if ($art_style_type == '3D真人风格') $fullPrompt = "美术风格: $art_style\n\n".$fullPrompt;
-        $reference_images = array_merge($processResult['reference_images'], $reference_images);
+        // 资产参考图与调用方传入的参考图合并后统一去重(保留资产参考图在前,不影响提示词中的<图片N>编号)
+        $reference_images = array_values(array_unique(array_filter(array_merge($processResult['reference_images'], $reference_images))));
         // 角色音色参考音频(顺序与提示词中的<音频N>标记一一对应)
         $reference_audios = $supportAudioReference ? ($processResult['reference_audios'] ?? []) : [];
         
@@ -5254,6 +5255,8 @@ class AnimeService
                 // 角色音色参考音频:上传为素材并传入统一API(上传失败时清理提示词中的<音频N>标记)
                 if ($reference_audios) {
                     $unifiedParams['ref_audio_url'] = json_encode($reference_audios, 256);
+                    // 任务记录:参考图与参考音频一起存入 ref_image_url
+                    $unifiedParams['ref_image_url'] = $this->mergeReferenceAudiosIntoRefImageUrl($unifiedParams['ref_image_url'] ?? '', $reference_audios);
                     $reference_audio_assets = $this->processActReferenceAudiosToAssets($reference_audios, $model, $unifiedParams['prompt']);
                     $parameters['reference_audios'] = $reference_audio_assets;
                     // 音频素材上传失败的角色回退到音色提示词
@@ -5295,6 +5298,8 @@ class AnimeService
                 // 角色音色参考音频:上传为素材并传入网关(上传失败时清理提示词中的<音频N>标记)
                 if ($reference_audios) {
                     $videoParams['ref_audio_url'] = json_encode($reference_audios, 256);
+                    // 任务记录:参考图与参考音频一起存入 ref_image_url
+                    $videoParams['ref_image_url'] = $this->mergeReferenceAudiosIntoRefImageUrl($videoParams['ref_image_url'] ?? '', $reference_audios);
                     $reference_audio_assets = $this->processActReferenceAudiosToAssets($reference_audios, $model, $fullPrompt);
                     // 音频素材上传失败的角色回退到音色提示词
                     $fullPrompt = $this->applyAudioVoiceFallbacks($fullPrompt, $processResult['audio_voice_fallbacks'] ?? []);
@@ -11704,6 +11709,27 @@ class AnimeService
         return $result;
     }
 
+    /**
+     * 任务记录用:把参考音频追加到 ref_image_url 中
+     * 参考图与参考音色音频一起保存,便于后续核对任务实际使用的素材
+     * 合并后统一去重并过滤空值,保证同一素材只出现一次
+     *
+     * @param string $refImageUrlJson 当前 ref_image_url(JSON数组字符串)
+     * @param array $referenceAudios 参考音频URL数组
+     * @return string
+     */
+    public function mergeReferenceAudiosIntoRefImageUrl($refImageUrlJson, array $referenceAudios) {
+        $refImageUrls = json_decode((string)$refImageUrlJson, true) ?: [];
+        if (!is_array($refImageUrls)) {
+            $refImageUrls = [];
+        }
+
+        // 参考图在前、参考音频在后,合并后去重并过滤空值
+        $merged = array_values(array_unique(array_filter(array_merge($refImageUrls, $referenceAudios))));
+
+        return json_encode($merged, 256);
+    }
+
     public function saveActVideoGenerateParams($data) {
         $episode_id = getProp($data, 'episode_id');
         $model = getProp($data, 'video_model');