|
|
@@ -285,7 +285,28 @@ class AnimeService
|
|
|
$episode['scenes'] = json_decode($episode['scenes'], true);
|
|
|
|
|
|
// 获取分镜信息
|
|
|
- $segments = DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', getProp($episode, 'episode_id'))->orderBy('segment_number')->select('act_number', 'act_title', 'segment_id', 'segment_number', 'segment_content')->get()->map(function ($value) {
|
|
|
+ $segments = DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', getProp($episode, 'episode_id'))->orderBy('segment_number')->select(
|
|
|
+ 'act_number',
|
|
|
+ 'act_title',
|
|
|
+ 'segment_id',
|
|
|
+ 'segment_number',
|
|
|
+ 'segment_content',
|
|
|
+ 'description',
|
|
|
+ 'composition',
|
|
|
+ 'camera_movement',
|
|
|
+ 'voice_actor',
|
|
|
+ 'dialogue',
|
|
|
+ 'frame_type',
|
|
|
+ 'scene',
|
|
|
+ 'characters',
|
|
|
+ 'tail_frame',
|
|
|
+ 'emotion',
|
|
|
+ 'gender',
|
|
|
+ 'speed_ratio',
|
|
|
+ 'loudness_ratio',
|
|
|
+ 'emotion_scale',
|
|
|
+ 'pitch'
|
|
|
+ )->get()->map(function ($value) {
|
|
|
return (array)$value;
|
|
|
})->toArray();
|
|
|
|
|
|
@@ -293,9 +314,24 @@ class AnimeService
|
|
|
foreach($segments as $segment) {
|
|
|
if (isset($acts[getProp($segment, 'act_number')])) {
|
|
|
$acts[getProp($segment, 'act_number')]['segments'][] = [
|
|
|
- 'segment_id' => getProp($segment, 'segment_id'),
|
|
|
- 'segment_number' => getProp($segment, 'segment_number'),
|
|
|
- 'segment_content' => getProp($segment, 'segment_content'),
|
|
|
+ 'segment_id' => getProp($segment, 'segment_id'),
|
|
|
+ 'segment_number' => getProp($segment, 'segment_number'),
|
|
|
+ 'segment_content' => getProp($segment, 'segment_content'),
|
|
|
+ 'description' => getProp($segment, 'description'),
|
|
|
+ 'composition' => getProp($segment, 'composition'),
|
|
|
+ 'camera_movement' => getProp($segment, 'camera_movement'),
|
|
|
+ 'voice_actor' => getProp($segment, 'voice_actor'),
|
|
|
+ 'dialogue' => getProp($segment, 'dialogue'),
|
|
|
+ 'frame_type' => getProp($segment, 'frame_type'),
|
|
|
+ 'scene' => getProp($segment, 'scene'),
|
|
|
+ 'characters' => getProp($segment, 'characters'),
|
|
|
+ 'tail_frame' => getProp($segment, 'tail_frame'),
|
|
|
+ 'emotion' => getProp($segment, 'emotion'),
|
|
|
+ 'gender' => getProp($segment, 'gender'),
|
|
|
+ 'speed_ratio' => getProp($segment, 'speed_ratio'),
|
|
|
+ 'loudness_ratio' => getProp($segment, 'loudness_ratio'),
|
|
|
+ 'emotion_scale' => getProp($segment, 'emotion_scale'),
|
|
|
+ 'pitch' => getProp($segment, 'pitch'),
|
|
|
];
|
|
|
}else {
|
|
|
$acts[getProp($segment, 'act_number')]= [
|
|
|
@@ -303,9 +339,24 @@ class AnimeService
|
|
|
'act_title' => getProp($segment, 'act_title'),
|
|
|
'segments' => [
|
|
|
[
|
|
|
- 'segment_id' => getProp($segment, 'segment_id'),
|
|
|
- 'segment_number' => getProp($segment, 'segment_number'),
|
|
|
- 'segment_content' => getProp($segment, 'segment_content'),
|
|
|
+ 'segment_id' => getProp($segment, 'segment_id'),
|
|
|
+ 'segment_number' => getProp($segment, 'segment_number'),
|
|
|
+ 'segment_content' => getProp($segment, 'segment_content'),
|
|
|
+ 'description' => getProp($segment, 'description'),
|
|
|
+ 'composition' => getProp($segment, 'composition'),
|
|
|
+ 'camera_movement' => getProp($segment, 'camera_movement'),
|
|
|
+ 'voice_actor' => getProp($segment, 'voice_actor'),
|
|
|
+ 'dialogue' => getProp($segment, 'dialogue'),
|
|
|
+ 'frame_type' => getProp($segment, 'frame_type'),
|
|
|
+ 'scene' => getProp($segment, 'scene'),
|
|
|
+ 'characters' => getProp($segment, 'characters'),
|
|
|
+ 'tail_frame' => getProp($segment, 'tail_frame'),
|
|
|
+ 'emotion' => getProp($segment, 'emotion'),
|
|
|
+ 'gender' => getProp($segment, 'gender'),
|
|
|
+ 'speed_ratio' => getProp($segment, 'speed_ratio'),
|
|
|
+ 'loudness_ratio' => getProp($segment, 'loudness_ratio'),
|
|
|
+ 'emotion_scale' => getProp($segment, 'emotion_scale'),
|
|
|
+ 'pitch' => getProp($segment, 'pitch'),
|
|
|
]
|
|
|
]
|
|
|
];
|
|
|
@@ -436,11 +487,45 @@ class AnimeService
|
|
|
$prompt = getProp($segment, 'segment_content');
|
|
|
}
|
|
|
|
|
|
+ $ratio = getProp($data, 'ratio');
|
|
|
+ if (!in_array($ratio, ['1:1', '4:3', '3:2', '16:9', '21:9'])) {
|
|
|
+ Utils::throwError('1002:画面比例选择不正确,只支持1:1、4:3、3:2、16:9、21:9');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据画面比例给宽高赋值
|
|
|
+ switch ($ratio) {
|
|
|
+ case '1:1':
|
|
|
+ $width = 2048;
|
|
|
+ $height = 2048;
|
|
|
+ break;
|
|
|
+ case '4:3':
|
|
|
+ $width = 2304;
|
|
|
+ $height = 1728;
|
|
|
+ break;
|
|
|
+ case '3:2':
|
|
|
+ $width = 2496;
|
|
|
+ $height = 1664;
|
|
|
+ break;
|
|
|
+ case '16:9':
|
|
|
+ $width = 2560;
|
|
|
+ $height = 1440;
|
|
|
+ break;
|
|
|
+ case '21:9':
|
|
|
+ $width = 3024;
|
|
|
+ $height = 1296;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ $width = 2048;
|
|
|
+ $height = 2048;
|
|
|
+ }
|
|
|
+
|
|
|
try {
|
|
|
$params = [
|
|
|
'alias_segment_id' => $segment_id,
|
|
|
'prompt' => $prompt,
|
|
|
- 'ref_img_urls' => !empty($ref_img_url) ? [$ref_img_url] : []
|
|
|
+ 'ref_img_urls' => !empty($ref_img_url) ? [$ref_img_url] : [],
|
|
|
+ 'width' => $width,
|
|
|
+ 'height' => $height
|
|
|
];
|
|
|
|
|
|
$task = $this->aiImageGenerationService->createImageGenerationTask($params);
|