|
|
@@ -93,6 +93,9 @@ class AIVideoGenerationService
|
|
|
*/
|
|
|
public function createJimengTask(array $params): MpGenerateVideoTask
|
|
|
{
|
|
|
+ // 分辨率统一规范化为小写(480p=原始档;sr_720p=480p生成+本地超分到720p)
|
|
|
+ $params['video_resolution'] = strtolower(trim((string)($params['video_resolution'] ?? '720p')));
|
|
|
+
|
|
|
// 生成唯一的任务ID
|
|
|
$taskId = 'vid_gen_' . time() . '_' . uniqid();
|
|
|
|
|
|
@@ -305,7 +308,7 @@ class AIVideoGenerationService
|
|
|
// 下载视频内容
|
|
|
$videoContent = file_get_contents($result['video_url']);
|
|
|
|
|
|
- // 从任务中获取视频分辨率,按目标档位执行本地超分(480p->720p;sr_1080p->1080p)
|
|
|
+ // 从任务中获取视频分辨率,按目标档位执行本地超分(sr_720p->720p;sr_1080p->1080p)
|
|
|
if ($this->shouldUpgradeVideoResolution($task)) {
|
|
|
$upgradeTarget = $this->getVideoUpgradeTarget($task);
|
|
|
dLog('generate')->info('即梦检测到需超分视频,开始超分(' . strtolower((string)$task->video_resolution) . ' -> ' . $upgradeTarget . ')', [
|
|
|
@@ -324,8 +327,8 @@ class AIVideoGenerationService
|
|
|
$url = uploadStreamByTos('video', $videoContent, $video_name);
|
|
|
}
|
|
|
} else {
|
|
|
- // 非480p视频,直接保存原视频
|
|
|
- dLog('generate')->info('即梦视频非480p,直接保存', [
|
|
|
+ // 非超分档视频,直接保存原视频
|
|
|
+ dLog('generate')->info('即梦视频无需本地超分,直接保存', [
|
|
|
'original_url' => $result['video_url'],
|
|
|
'video_resolution' => $task->video_resolution
|
|
|
]);
|
|
|
@@ -585,6 +588,9 @@ class AIVideoGenerationService
|
|
|
*/
|
|
|
public function createSeedanceTask(array $params): MpGenerateVideoTask
|
|
|
{
|
|
|
+ // 分辨率统一规范化为小写(480p=原始档;sr_720p=480p生成+本地超分到720p)
|
|
|
+ $params['video_resolution'] = strtolower(trim((string)($params['video_resolution'] ?? '720p')));
|
|
|
+
|
|
|
// 生成唯一的任务ID
|
|
|
$taskId = 'seedance_' . time() . '_' . uniqid();
|
|
|
|
|
|
@@ -634,6 +640,9 @@ class AIVideoGenerationService
|
|
|
*/
|
|
|
public function createSeedance20Task(array $params): MpGenerateVideoTask
|
|
|
{
|
|
|
+ // 分辨率统一规范化为小写(480p=原始档;sr_720p=480p生成+本地超分到720p)
|
|
|
+ $params['video_resolution'] = strtolower(trim((string)($params['video_resolution'] ?? '720p')));
|
|
|
+
|
|
|
// 生成唯一的任务ID
|
|
|
$taskId = 'seedance20_' . time() . '_' . uniqid();
|
|
|
|
|
|
@@ -908,6 +917,9 @@ class AIVideoGenerationService
|
|
|
*/
|
|
|
public function createKuaikuaiVideoTask(array $params): MpGenerateVideoTask
|
|
|
{
|
|
|
+ // 分辨率统一规范化为小写(480p=原始档;sr_720p=480p生成+本地超分到720p)
|
|
|
+ $params['video_resolution'] = strtolower(trim((string)($params['video_resolution'] ?? '720p')));
|
|
|
+
|
|
|
// 生成唯一的任务ID
|
|
|
$taskId = 'kuaikuai_' . time() . '_' . uniqid();
|
|
|
|
|
|
@@ -1213,6 +1225,7 @@ class AIVideoGenerationService
|
|
|
|
|
|
/**
|
|
|
* 请求外部API时的分辨率映射
|
|
|
+ * sr_720p(超分720p)模式:外部按480p生成,本地再超分到720p,因此请求分辨率统一改为480p
|
|
|
* sr_1080p(超分1080p)模式:外部按720p生成,本地再超分到1080p,因此请求分辨率统一改为720p
|
|
|
*
|
|
|
* @param string $resolution
|
|
|
@@ -1221,6 +1234,9 @@ class AIVideoGenerationService
|
|
|
private function apiRequestResolution(string $resolution): string
|
|
|
{
|
|
|
$resolution = strtolower(trim($resolution));
|
|
|
+ if (in_array($resolution, ['sr_720p', 'sr720p'], true)) {
|
|
|
+ return '480p';
|
|
|
+ }
|
|
|
if (in_array($resolution, ['sr_1080p', 'sr1080p'], true)) {
|
|
|
return '720p';
|
|
|
}
|
|
|
@@ -1228,35 +1244,48 @@ class AIVideoGenerationService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 判断任务是否需要本地超分(480p -> 720p;sr_1080p -> 1080p)
|
|
|
- * 超分统一走 upgrade480pTo720p(内部按源档位自动选择目标分辨率)
|
|
|
+ * 解析任务分辨率的本地超分目标档位
|
|
|
+ * 档位语义:
|
|
|
+ * - 480p:原始480p,生成480p并直接交付,不做本地超分
|
|
|
+ * - sr_720p:按480p生成,本地超分到720p
|
|
|
+ * - sr_1080p:按720p生成,本地超分到1080p
|
|
|
+ * - 720p / 1080p / 4k:直接按目标档位生成,不做本地超分
|
|
|
+ *
|
|
|
+ * @param string $resolution
|
|
|
+ * @return string '720p'|'1080p'|''(空表示无需本地超分)
|
|
|
+ */
|
|
|
+ private function resolutionUpscaleTarget(string $resolution): string
|
|
|
+ {
|
|
|
+ $resolution = strtolower(trim($resolution));
|
|
|
+ if (in_array($resolution, ['sr_720p', 'sr720p'], true)) {
|
|
|
+ return '720p';
|
|
|
+ }
|
|
|
+ if (in_array($resolution, ['sr_1080p', 'sr1080p'], true)) {
|
|
|
+ return '1080p';
|
|
|
+ }
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断任务是否需要本地超分(仅 sr_720p / sr_1080p 档触发)
|
|
|
*
|
|
|
* @param object $task
|
|
|
* @return bool
|
|
|
*/
|
|
|
private function shouldUpgradeVideoResolution($task): bool
|
|
|
{
|
|
|
- $resolution = strtoupper((string)getProp($task, 'video_resolution', ''));
|
|
|
- return strpos($resolution, '480') !== false || strpos($resolution, 'SR_1080') !== false;
|
|
|
+ return $this->resolutionUpscaleTarget((string)getProp($task, 'video_resolution', '')) !== '';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取任务本地超分目标档位(显式传给 upgrade480pTo720p)
|
|
|
- * 480p -> 720p;sr_1080p -> 1080p
|
|
|
*
|
|
|
* @param object $task
|
|
|
- * @return string '720p'|'1080p'|''(空表示由超分函数自动识别)
|
|
|
+ * @return string '720p'|'1080p'|''(空表示无需本地超分)
|
|
|
*/
|
|
|
private function getVideoUpgradeTarget($task): string
|
|
|
{
|
|
|
- $resolution = strtoupper((string)getProp($task, 'video_resolution', ''));
|
|
|
- if (strpos($resolution, 'SR_1080') !== false) {
|
|
|
- return '1080p';
|
|
|
- }
|
|
|
- if (strpos($resolution, '480') !== false) {
|
|
|
- return '720p';
|
|
|
- }
|
|
|
- return '';
|
|
|
+ return $this->resolutionUpscaleTarget((string)getProp($task, 'video_resolution', ''));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -2754,7 +2783,7 @@ class AIVideoGenerationService
|
|
|
// 下载视频内容
|
|
|
$videoContent = file_get_contents($video_url);
|
|
|
|
|
|
- // 从任务中获取视频分辨率,按目标档位执行本地超分(480p->720p;sr_1080p->1080p)
|
|
|
+ // 从任务中获取视频分辨率,按目标档位执行本地超分(sr_720p->720p;sr_1080p->1080p)
|
|
|
if ($this->shouldUpgradeVideoResolution($task)) {
|
|
|
$upgradeTarget = $this->getVideoUpgradeTarget($task);
|
|
|
dLog('generate')->info('Seedance检测到需超分视频,开始超分(' . strtolower((string)$task->video_resolution) . ' -> ' . $upgradeTarget . ')', [
|
|
|
@@ -2773,8 +2802,8 @@ class AIVideoGenerationService
|
|
|
$url = uploadStreamByTos('video', $videoContent, $video_name);
|
|
|
}
|
|
|
} else {
|
|
|
- // 非480p视频,直接保存原视频
|
|
|
- dLog('generate')->info('Seedance视频非480p,直接保存', [
|
|
|
+ // 非超分档视频,直接保存原视频
|
|
|
+ dLog('generate')->info('Seedance视频无需本地超分,直接保存', [
|
|
|
'original_url' => $video_url,
|
|
|
'video_resolution' => $task->video_resolution
|
|
|
]);
|
|
|
@@ -3024,7 +3053,7 @@ class AIVideoGenerationService
|
|
|
// 下载视频内容
|
|
|
$videoContent = file_get_contents($video_url);
|
|
|
|
|
|
- // 从任务中获取视频分辨率,按目标档位执行本地超分(480p->720p;sr_1080p->1080p)
|
|
|
+ // 从任务中获取视频分辨率,按目标档位执行本地超分(sr_720p->720p;sr_1080p->1080p)
|
|
|
if ($this->shouldUpgradeVideoResolution($task)) {
|
|
|
$upgradeTarget = $this->getVideoUpgradeTarget($task);
|
|
|
dLog('generate')->info('Seedance检测到需超分视频,开始超分(' . strtolower((string)$task->video_resolution) . ' -> ' . $upgradeTarget . ')', [
|
|
|
@@ -3043,8 +3072,8 @@ class AIVideoGenerationService
|
|
|
$url = uploadStreamByTos('video', $videoContent, $video_name);
|
|
|
}
|
|
|
} else {
|
|
|
- // 非480p视频,直接保存原视频
|
|
|
- dLog('generate')->info('Seedance视频非480p,直接保存', [
|
|
|
+ // 非超分档视频,直接保存原视频
|
|
|
+ dLog('generate')->info('Seedance视频无需本地超分,直接保存', [
|
|
|
'original_url' => $video_url,
|
|
|
'video_resolution' => $task->video_resolution
|
|
|
]);
|
|
|
@@ -3180,7 +3209,7 @@ class AIVideoGenerationService
|
|
|
// 下载视频内容
|
|
|
$videoContent = file_get_contents($video_url);
|
|
|
|
|
|
- // 从任务中获取视频分辨率,按目标档位执行本地超分(480p->720p;sr_1080p->1080p)
|
|
|
+ // 从任务中获取视频分辨率,按目标档位执行本地超分(sr_720p->720p;sr_1080p->1080p)
|
|
|
if ($this->shouldUpgradeVideoResolution($task)) {
|
|
|
$upgradeTarget = $this->getVideoUpgradeTarget($task);
|
|
|
dLog('generate')->info('Seedance回调检测到需超分视频,开始超分(' . strtolower((string)$task->video_resolution) . ' -> ' . $upgradeTarget . ')', [
|
|
|
@@ -3199,8 +3228,8 @@ class AIVideoGenerationService
|
|
|
$url = uploadStreamByTos('video', $videoContent, $video_name);
|
|
|
}
|
|
|
} else {
|
|
|
- // 非480p视频,直接保存原视频
|
|
|
- dLog('generate')->info('Seedance回调视频非480p,直接保存', [
|
|
|
+ // 非超分档视频,直接保存原视频
|
|
|
+ dLog('generate')->info('Seedance回调视频无需本地超分,直接保存', [
|
|
|
'original_url' => $video_url,
|
|
|
'video_resolution' => $task->video_resolution
|
|
|
]);
|
|
|
@@ -3542,6 +3571,9 @@ class AIVideoGenerationService
|
|
|
*/
|
|
|
public function createKelingOmniTask(array $params): MpGenerateVideoTask
|
|
|
{
|
|
|
+ // 分辨率统一规范化为小写(480p=原始档;sr_720p=480p生成+本地超分到720p)
|
|
|
+ $params['video_resolution'] = strtolower(trim((string)($params['video_resolution'] ?? '720p')));
|
|
|
+
|
|
|
// 生成唯一的任务ID
|
|
|
$taskId = 'keling_omni_' . time() . '_' . uniqid();
|
|
|
|
|
|
@@ -3742,7 +3774,7 @@ class AIVideoGenerationService
|
|
|
// 下载视频内容
|
|
|
$videoContent = file_get_contents($video_url);
|
|
|
|
|
|
- // 从任务中获取视频分辨率,按目标档位执行本地超分(480p->720p;sr_1080p->1080p)
|
|
|
+ // 从任务中获取视频分辨率,按目标档位执行本地超分(sr_720p->720p;sr_1080p->1080p)
|
|
|
if ($this->shouldUpgradeVideoResolution($task)) {
|
|
|
$upgradeTarget = $this->getVideoUpgradeTarget($task);
|
|
|
dLog('generate')->info('可灵检测到需超分视频,开始超分(' . strtolower((string)$task->video_resolution) . ' -> ' . $upgradeTarget . ')', [
|
|
|
@@ -3761,8 +3793,8 @@ class AIVideoGenerationService
|
|
|
$url = uploadStreamByTos('video', $videoContent, $video_name);
|
|
|
}
|
|
|
} else {
|
|
|
- // 非480p视频,直接保存原视频
|
|
|
- dLog('generate')->info('可灵视频非480p,直接保存', [
|
|
|
+ // 非超分档视频,直接保存原视频
|
|
|
+ dLog('generate')->info('可灵视频无需本地超分,直接保存', [
|
|
|
'original_url' => $video_url,
|
|
|
'video_resolution' => $task->video_resolution
|
|
|
]);
|
|
|
@@ -4787,6 +4819,9 @@ class AIVideoGenerationService
|
|
|
*/
|
|
|
public function createUnifiedApiTask(array $params): MpGenerateVideoTask
|
|
|
{
|
|
|
+ // 分辨率统一规范化为小写(480p=原始档;sr_720p=480p生成+本地超分到720p)
|
|
|
+ $params['video_resolution'] = strtolower(trim((string)($params['video_resolution'] ?? '720p')));
|
|
|
+
|
|
|
// 生成唯一的任务ID
|
|
|
$taskId = 'unified_' . time() . '_' . uniqid();
|
|
|
|
|
|
@@ -5028,12 +5063,12 @@ class AIVideoGenerationService
|
|
|
}
|
|
|
|
|
|
if ($videoUrl) {
|
|
|
- // 保存视频到TOS,仅480p视频超分到720p,其余分辨率直接保存
|
|
|
+ // 保存视频到TOS,超分档(sr_720p/sr_1080p)本地超分后保存,其余分辨率直接保存
|
|
|
try {
|
|
|
// 下载视频内容
|
|
|
$videoContent = file_get_contents($videoUrl);
|
|
|
|
|
|
- // 从任务中获取视频分辨率,按目标档位执行本地超分(480p->720p;sr_1080p->1080p)
|
|
|
+ // 从任务中获取视频分辨率,按目标档位执行本地超分(sr_720p->720p;sr_1080p->1080p)
|
|
|
if ($this->shouldUpgradeVideoResolution($task)) {
|
|
|
$upgradeTarget = $this->getVideoUpgradeTarget($task);
|
|
|
dLog('generate')->info('检测到需超分视频,开始超分(' . strtolower((string)$task->video_resolution) . ' -> ' . $upgradeTarget . ')', [
|
|
|
@@ -5057,8 +5092,8 @@ class AIVideoGenerationService
|
|
|
$returnData['result_url'] = $url;
|
|
|
}
|
|
|
} else {
|
|
|
- // 非480p视频,直接保存原视频
|
|
|
- dLog('generate')->info('视频非480p,直接保存', [
|
|
|
+ // 非超分档视频,直接保存原视频
|
|
|
+ dLog('generate')->info('视频无需本地超分,直接保存', [
|
|
|
'original_url' => $videoUrl,
|
|
|
'video_resolution' => $task->video_resolution
|
|
|
]);
|
|
|
@@ -5569,26 +5604,28 @@ class AIVideoGenerationService
|
|
|
/**
|
|
|
* 根据任务的分辨率字段确定标准化目标档位
|
|
|
*
|
|
|
- * 480P(需超分)目标为720p;720P/720p 目标为720p;1080P/1080p 目标为1080p;其他返回空(不处理)
|
|
|
+ * sr_720p(超分720p)目标为720p;sr_1080p(超分1080p)目标为sr_1080p;
|
|
|
+ * 720p 目标为720p;1080p 目标为1080p;480p(原始档,不做超分与标准化)与其他档位返回空(不处理)
|
|
|
*
|
|
|
* @param MpGenerateVideoTask|object $task
|
|
|
- * @return string ''|'720p'|'1080p'
|
|
|
+ * @return string ''|'720p'|'1080p'|'sr_1080p'
|
|
|
*/
|
|
|
private function getTaskTargetResolution($task)
|
|
|
{
|
|
|
- $resolution = strtoupper((string)getProp($task, 'video_resolution', ''));
|
|
|
- if (strpos($resolution, 'SR_1080') !== false) {
|
|
|
+ $resolution = strtolower(trim((string)getProp($task, 'video_resolution', '')));
|
|
|
+ $upscaleTarget = $this->resolutionUpscaleTarget($resolution);
|
|
|
+ if ($upscaleTarget === '1080p') {
|
|
|
return 'sr_1080p';
|
|
|
}
|
|
|
- if (strpos($resolution, '480') !== false) {
|
|
|
+ if ($upscaleTarget === '720p') {
|
|
|
return '720p';
|
|
|
}
|
|
|
- if (strpos($resolution, '1080') !== false) {
|
|
|
- return '1080p';
|
|
|
- }
|
|
|
- if (strpos($resolution, '720') !== false) {
|
|
|
+ if ($resolution === '720p') {
|
|
|
return '720p';
|
|
|
}
|
|
|
+ if ($resolution === '1080p') {
|
|
|
+ return '1080p';
|
|
|
+ }
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
@@ -5677,11 +5714,11 @@ class AIVideoGenerationService
|
|
|
];
|
|
|
}
|
|
|
|
|
|
- // 检查分辨率是否为480p
|
|
|
- if ($originalTask->video_resolution !== '480P') {
|
|
|
+ // 检查分辨率是否为480p(不区分大小写;480p为原始档,可再手动提交超分到720p)
|
|
|
+ if (strtolower(trim((string)$originalTask->video_resolution)) !== '480p') {
|
|
|
return [
|
|
|
'success' => false,
|
|
|
- 'message' => '只支持480P视频超分到720P'
|
|
|
+ 'message' => '只支持480p视频超分到720p'
|
|
|
];
|
|
|
}
|
|
|
|
|
|
@@ -5755,7 +5792,7 @@ class AIVideoGenerationService
|
|
|
$enhanceTask = MpGenerateVideoTask::create([
|
|
|
'task_id' => $responseData['task_id'],
|
|
|
'prompt' => $originalTask->prompt,
|
|
|
- 'video_resolution' => '720P', // 目标分辨率
|
|
|
+ 'video_resolution' => '720p', // 目标分辨率
|
|
|
'status' => MpGenerateVideoTask::STATUS_PROCESSING,
|
|
|
'api_type' => 'video_enhance',
|
|
|
'extra_params' => [
|