fix:한국인 여성 캐릭터 고정 + 나레이션-영상 싱크 버그 수정

- Gemini 프롬프트: visual_prompt에 한국인 여성(20대) 등장인물 규칙 추가
- Veo 프롬프트: 모든 클립에 "Korean woman in her 20s" 프리픽스 자동 추가
- 싱크 버그: activeNarrationPaths 인덱스 off-by-one ($num-1→$num) 수정
  - 나레이션이 영상보다 1장면 앞서 재생되던 근본 원인
- concatNarrations: atrim+apad로 나레이션을 장면 길이에 정확히 매칭

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-15 10:50:51 +09:00
parent 01efd99004
commit 60edc28a17
4 changed files with 15 additions and 8 deletions

View File

@@ -114,7 +114,7 @@ public function concatNarrations(array $audioPaths, array $scenes, string $outpu
mkdir($dir, 0755, true);
}
// 각 나레이션에 패딩(무음)을 추가해서 장면 길이에 맞춤
// 각 나레이션을 장면 길이에 정확히 맞춤 (atrim으로 자르고 apad로 채움)
$paddedPaths = [];
foreach ($scenes as $scene) {
$sceneNum = $scene['scene_number'];
@@ -122,11 +122,12 @@ public function concatNarrations(array $audioPaths, array $scenes, string $outpu
if (isset($audioPaths[$sceneNum])) {
$paddedPath = "{$dir}/narration_padded_{$sceneNum}.mp3";
// 나레이션을 장면 길이에 맞춰 패딩
// atrim: 장면보다 긴 나레이션은 잘라냄, apad: 짧으면 무음으로 채움
$cmd = sprintf(
'ffmpeg -y -i %s -af "apad=whole_dur=%d" -c:a libmp3lame -q:a 2 %s 2>&1',
'ffmpeg -y -i %s -af "atrim=0:%d,apad=whole_dur=%d" -c:a libmp3lame -q:a 2 %s 2>&1',
escapeshellarg($audioPaths[$sceneNum]),
$duration,
$duration,
escapeshellarg($paddedPath)
);
exec($cmd, $output, $returnCode);