|
|
@@ -1016,8 +1016,56 @@ class AnimeService
|
|
|
];
|
|
|
|
|
|
if ($segment_content) {
|
|
|
+ // 先将segment_content赋值到update_data
|
|
|
+ $update_data['segment_content'] = $segment_content;
|
|
|
+
|
|
|
// 使用现有方法分析segment_content,提取各个字段
|
|
|
$this->handleSegmentContent($update_data);
|
|
|
+
|
|
|
+ // 如果有对话内容,创建视频配音合成任务
|
|
|
+ if (getProp($update_data, 'dialogue')) {
|
|
|
+ $now = date('Y-m-d H:i:s');
|
|
|
+ $generate_json = [
|
|
|
+ 'text' => getProp($update_data, 'dialogue'),
|
|
|
+ 'role' => getProp($update_data, 'voice_actor'),
|
|
|
+ 'voice_type' => getProp($update_data, 'voice_type'),
|
|
|
+ 'voice_name' => getProp($update_data, 'voice_name'),
|
|
|
+ 'emotion' => getProp($update_data, 'emotion'),
|
|
|
+ 'emotion_type' => getProp($update_data, 'emotion_type'),
|
|
|
+ 'gender' => getProp($update_data, 'gender'),
|
|
|
+ 'speed_ratio' => getProp($update_data, 'speed_ratio', 0),
|
|
|
+ 'loudness_ratio' => getProp($update_data, 'loudness_ratio', 0),
|
|
|
+ 'emotion_scale' => getProp($update_data, 'emotion_scale', 0),
|
|
|
+ 'pitch' => getProp($update_data, 'pitch', 0),
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 插入视频配音合成任务
|
|
|
+ $dubTaskId = DB::table('mp_dub_video_tasks')->insertGetId([
|
|
|
+ 'alias_segment_id' => $segment_id,
|
|
|
+ 'generate_status' => '执行中',
|
|
|
+ 'audio_url' => '',
|
|
|
+ 'generate_json' => json_encode($generate_json, 256),
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if (!$dubTaskId) {
|
|
|
+ Utils::throwError('20003:创建配音任务失败!');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求远程服务器执行生成
|
|
|
+ $client = new Client(['timeout' => 300, 'verify' => false]);
|
|
|
+ $result = $client->get("http://122.9.129.83:5000/api/anime/genAudio?taskId={$dubTaskId}");
|
|
|
+ $response = $result->getBody()->getContents();
|
|
|
+ $response_arr = json_decode($response, true);
|
|
|
+ if (!isset($response_arr['code']) || (int)$response_arr['code'] !== 0) {
|
|
|
+ $error_msg = isset($response_arr['msg']) ? $response_arr['msg'] : '未知错误';
|
|
|
+ dLog('anime')->error('火山生成音频失败', ['error' => $error_msg, 'task_id' => $dubTaskId]);
|
|
|
+ logDB('anime', 'error', '火山生成音频失败', ['error' => $error_msg, 'task_id' => $dubTaskId]);
|
|
|
+ Utils::throwError('20003:火山生成音频失败');
|
|
|
+ }
|
|
|
+ $update_data['audio_url'] = '';
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if ($image_url) {
|
|
|
@@ -1888,7 +1936,7 @@ class AnimeService
|
|
|
unset($segment['id']);
|
|
|
$segment['segment_number'] += 1;
|
|
|
$segment['segment_id'] = date('YmdHis') . mt_rand(1000, 9999) . str_pad($segment['segment_number'], 3, "0", STR_PAD_LEFT);
|
|
|
- $segment['pic_task_id'] = $segment['pic_task_status'] = $segment['video_task_id'] = $segment['video_task_status'] = '';
|
|
|
+ // $segment['pic_task_id'] = $segment['pic_task_status'] = $segment['video_task_id'] = $segment['video_task_status'] = '';
|
|
|
$segment['created_at'] = $segment['updated_at'] = date('Y-m-d H:i:s');
|
|
|
|
|
|
// 更新其他分镜序号
|