lh 1 месяц назад
Родитель
Сommit
62ec835526
1 измененных файлов с 124 добавлено и 20 удалено
  1. 124 20
      app/Services/AIGeneration/AIVideoGenerationService.php

+ 124 - 20
app/Services/AIGeneration/AIVideoGenerationService.php

@@ -229,11 +229,37 @@ class AIVideoGenerationService
             // 如果任务成功,获取结果URL
             if ($taskStatus === 'done' && isset($result['video_url'])) {
                 if (isset($result['video_url'])) {
-                    $video_name = 'ai_generation_' . time() . '_' . uniqid();
-                    $video_ext = getVideoExtFromUrl($result['video_url']);
-                    $video_name = $video_name . $video_ext;
-                    // 将视频另存到tos
-                    $url = uploadStreamByTos('video', file_get_contents($result['video_url']), $video_name);
+                    // 下载视频内容
+                    $videoContent = file_get_contents($result['video_url']);
+
+                    // 从任务中获取视频分辨率,仅480p视频执行480p->720p超分
+                    if (strpos(strtoupper((string)$task->video_resolution), '480') !== false) {
+                        dLog('generate')->info('即梦检测到480p视频,开始480p->720p超分', [
+                            'original_url' => $result['video_url'],
+                            'video_resolution' => $task->video_resolution,
+                            'size' => round(strlen($videoContent) / 1024 / 1024, 2) . 'MB'
+                        ]);
+
+                        $url = upgrade480pTo720p($videoContent, 'video', true);
+                        if (!$url) {
+                            // 超分失败,上传原视频
+                            dLog('generate')->warning('即梦视频超分失败,使用原视频');
+                            $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                            $video_ext = getVideoExtFromUrl($result['video_url']);
+                            $video_name = $video_name . $video_ext;
+                            $url = uploadStreamByTos('video', $videoContent, $video_name);
+                        }
+                    } else {
+                        // 非480p视频,直接保存原视频
+                        dLog('generate')->info('即梦视频非480p,直接保存', [
+                            'original_url' => $result['video_url'],
+                            'video_resolution' => $task->video_resolution
+                        ]);
+                        $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                        $video_ext = getVideoExtFromUrl($result['video_url']);
+                        $video_name = $video_name . $video_ext;
+                        $url = uploadStreamByTos('video', $videoContent, $video_name);
+                    }
                     $returnData['result_url'] = $url;
 
                     // 视频分辨率标准化(压缩前处理,避免压缩后重复上传)
@@ -1262,11 +1288,37 @@ class AIVideoGenerationService
                 // 任务成功,处理结果
                 if (isset($responseData['content']['video_url'])) {
                     $video_url = $responseData['content']['video_url'];
-                    // 下载并保存视频
-                    $video_name = 'ai_generation_' . time() . '_' . uniqid();
-                    $video_ext = getVideoExtFromUrl($video_url);
-                    $video_name = $video_name . $video_ext;
-                    $url = uploadStreamByTos('video', file_get_contents($video_url), $video_name);
+                    // 下载视频内容
+                    $videoContent = file_get_contents($video_url);
+
+                    // 从任务中获取视频分辨率,仅480p视频执行480p->720p超分
+                    if (strpos(strtoupper((string)$task->video_resolution), '480') !== false) {
+                        dLog('generate')->info('Seedance检测到480p视频,开始480p->720p超分', [
+                            'original_url' => $video_url,
+                            'video_resolution' => $task->video_resolution,
+                            'size' => round(strlen($videoContent) / 1024 / 1024, 2) . 'MB'
+                        ]);
+
+                        $url = upgrade480pTo720p($videoContent, 'video', true);
+                        if (!$url) {
+                            // 超分失败,上传原视频
+                            dLog('generate')->warning('Seedance视频超分失败,使用原视频');
+                            $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                            $video_ext = getVideoExtFromUrl($video_url);
+                            $video_name = $video_name . $video_ext;
+                            $url = uploadStreamByTos('video', $videoContent, $video_name);
+                        }
+                    } else {
+                        // 非480p视频,直接保存原视频
+                        dLog('generate')->info('Seedance视频非480p,直接保存', [
+                            'original_url' => $video_url,
+                            'video_resolution' => $task->video_resolution
+                        ]);
+                        $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                        $video_ext = getVideoExtFromUrl($video_url);
+                        $video_name = $video_name . $video_ext;
+                        $url = uploadStreamByTos('video', $videoContent, $video_name);
+                    }
                     $updateData['result_url'] = $url;
 
                     // 视频分辨率标准化(压缩前处理,避免压缩后重复上传)
@@ -1417,11 +1469,37 @@ class AIVideoGenerationService
                 if (isset($data['content']['video_url'])) {
                     $video_url = $data['content']['video_url'];
                     try {
-                        // 下载并保存视频
-                        $video_name = 'ai_generation_' . time() . '_' . uniqid();
-                        $video_ext = getVideoExtFromUrl($video_url);
-                        $video_name = $video_name . $video_ext;
-                        $url = uploadStreamByTos('video', file_get_contents($video_url), $video_name);
+                        // 下载视频内容
+                        $videoContent = file_get_contents($video_url);
+
+                        // 从任务中获取视频分辨率,仅480p视频执行480p->720p超分
+                        if (strpos(strtoupper((string)$task->video_resolution), '480') !== false) {
+                            dLog('generate')->info('Seedance回调检测到480p视频,开始480p->720p超分', [
+                                'original_url' => $video_url,
+                                'video_resolution' => $task->video_resolution,
+                                'size' => round(strlen($videoContent) / 1024 / 1024, 2) . 'MB'
+                            ]);
+
+                            $url = upgrade480pTo720p($videoContent, 'video', true);
+                            if (!$url) {
+                                // 超分失败,上传原视频
+                                dLog('generate')->warning('Seedance回调视频超分失败,使用原视频');
+                                $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                                $video_ext = getVideoExtFromUrl($video_url);
+                                $video_name = $video_name . $video_ext;
+                                $url = uploadStreamByTos('video', $videoContent, $video_name);
+                            }
+                        } else {
+                            // 非480p视频,直接保存原视频
+                            dLog('generate')->info('Seedance回调视频非480p,直接保存', [
+                                'original_url' => $video_url,
+                                'video_resolution' => $task->video_resolution
+                            ]);
+                            $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                            $video_ext = getVideoExtFromUrl($video_url);
+                            $video_name = $video_name . $video_ext;
+                            $url = uploadStreamByTos('video', $videoContent, $video_name);
+                        }
                         $updateData['result_url'] = $url;
 
                         // 视频分辨率标准化(压缩前处理,避免压缩后重复上传)
@@ -1907,11 +1985,37 @@ class AIVideoGenerationService
                     $video = $taskData['task_result']['videos'][0];
                     $video_url = $video['url'];
                     
-                    // 下载并保存视频
-                    $video_name = 'ai_generation_' . time() . '_' . uniqid();
-                    $video_ext = getVideoExtFromUrl($video_url);
-                    $video_name = $video_name . $video_ext;
-                    $url = uploadStreamByTos('video', file_get_contents($video_url), $video_name);
+                    // 下载视频内容
+                    $videoContent = file_get_contents($video_url);
+
+                    // 从任务中获取视频分辨率,仅480p视频执行480p->720p超分
+                    if (strpos(strtoupper((string)$task->video_resolution), '480') !== false) {
+                        dLog('generate')->info('可灵检测到480p视频,开始480p->720p超分', [
+                            'original_url' => $video_url,
+                            'video_resolution' => $task->video_resolution,
+                            'size' => round(strlen($videoContent) / 1024 / 1024, 2) . 'MB'
+                        ]);
+
+                        $url = upgrade480pTo720p($videoContent, 'video', true);
+                        if (!$url) {
+                            // 超分失败,上传原视频
+                            dLog('generate')->warning('可灵视频超分失败,使用原视频');
+                            $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                            $video_ext = getVideoExtFromUrl($video_url);
+                            $video_name = $video_name . $video_ext;
+                            $url = uploadStreamByTos('video', $videoContent, $video_name);
+                        }
+                    } else {
+                        // 非480p视频,直接保存原视频
+                        dLog('generate')->info('可灵视频非480p,直接保存', [
+                            'original_url' => $video_url,
+                            'video_resolution' => $task->video_resolution
+                        ]);
+                        $video_name = 'ai_generation_' . time() . '_' . uniqid();
+                        $video_ext = getVideoExtFromUrl($video_url);
+                        $video_name = $video_name . $video_ext;
+                        $url = uploadStreamByTos('video', $videoContent, $video_name);
+                    }
                     $updateData['result_url'] = $url;
 
                     // 视频分辨率标准化(压缩前处理,避免压缩后重复上传)