fix:이모지 TTS 읽기 버그 + 자막 과다 표시 수정

이모지/특수문자 제거:
- TtsService: TTS 전송 전 이모지, *강조*, (효과음), [동작] 등 제거
- VideoAssemblyService: 자막 생성 시에도 동일하게 이모지 제거
- 유니코드 이모지 전체 블록 커버 (이모티콘~태그 문자)

자막 분리 로직 개선:
- 5자 미만 조각만 병합 (기존 10자 → 과도한 병합 제거)
- 정상 문장(5자+)은 독립 자막으로 표시
- 장면당 2~3개 자막으로 깔끔하게 전환

시나리오 프롬프트 수정:
- 이모지/이모티콘 절대 금지 규칙 명시
- *강조*, (효과음), [동작], ○기호 금지
- 숫자 한글 표기 권장 (3가지 → 세 가지)
- 장면당 글자 수 40~70자로 조정 (1.2x 속도에 맞춤)
- 한 문장 10~20자로 축소 (자막 가독성)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-15 13:34:04 +09:00
parent a8d87e2b92
commit 85654799be
3 changed files with 101 additions and 37 deletions

View File

@@ -215,23 +215,29 @@ public function generateScenario(string $title, string $keyword = ''): array
=== 나레이션 작성 규칙 (매우 중요) ===
- 말투: 반말 or 친근한 존댓말 (방송 톤X, 친구한테 신기한 걸 알려주는 톤O)
- 속도감: TTS가 1.5배속으로 재생되므로, 한 장면당 3~4문장으로 밀도 있게 작성 (장면당 60~100자)
- 속도감: TTS가 1.2배속으로 재생되므로, 한 장면당 2~3문장 (장면당 40~70자)
- 문장 구분: 반드시 마침표(.) 또는 느낌표(!) 또는 물음표(?)로 문장을 끝내라. 자막이 문장 단위로 전환된다.
- 한 문장 길이: 15~25자 이내의 짧고 펀치감 있는 문장. 긴 문장 금지.
- 한 문장 길이: 10~20자 이내의 짧고 펀치감 있는 문장. 긴 문장 금지.
- 매 장면마다 한 가지 "놀라운 팩트" 또는 "감정 변화"가 있어야 한다
- 뻔한 설명 금지. "~라고 합니다", "~인데요" 같은 수동적 표현 대신 단정적이고 강렬한 어투 사용
- 마지막 장면에서 "좋아요/구독/알림설정" 같은 CTA 절대 금지. 대신 여운이 남는 한마디 또는 강렬한 마무리
=== 나레이션 좋은 예시 (한 문장=15~25자, 마침표로 구분) ===
- "이거 매일 먹어봐요. 얼굴이 확 달라집니다. 진짜예요."
- "소름 돋는 거 알려줄게요. 과학자들도 설명 못 한대요. 왜냐면요."
- "근데 진짜 무서운 건요. 이 다음이에요. 절대 넘기지 마세요."
=== 나레이션 절대 금지 사항 (TTS가 읽어버림) ===
- 이모지 절대 금지: 😊🔥💪❤️ 등 모든 이모지/이모티콘 사용 금지
- 특수 표현 금지: *강조*, (효과음), [동작], ~물결, ○기호 등 사용 금지
- 순수 한글 텍스트만 작성. TTS가 음성으로 변환하므로 사람이 말하는 것처럼 자연스러운 문장만 허용
- 숫자는 한글로 표기 (예: "3가지" → "세 가지", "100%" → "백 퍼센트")
=== 나레이션 좋은 예시 ===
- "이거 매일 먹어봐요. 얼굴이 확 달라집니다."
- "과학자들도 설명 못 한대요. 왜냐면요."
- "근데 진짜 무서운 건요. 이 다음이에요."
=== 나레이션 나쁜 예시 (절대 이렇게 쓰지 마세요) ===
- "안녕하세요, 오늘은 ○○에 대해 알아보겠습니다."
- "이 영상이 도움이 되셨다면 좋아요와 구독 부탁드려요!"
- "여러분도 한번 해보시면 좋을 것 같습니다~"
- "○○라고 하는데요, 참 신기하죠?"
- "안녕하세요, 오늘은 ○○에 대해 알아보겠습니다." (평범한 시작)
- "맛있게 먹고 행복해지세요!😊" (이모지 포함 - TTS가 읽음)
- "이건 진짜 *소름* 돋는 사실인데요~" (특수기호 포함)
- "3가지 방법을 알려드릴게요!" (숫자 한글 미변환)
=== 장면 구성 패턴 (5장면, 총 40초) ===
장면 1 (5초): HOOK - extreme close-up 또는 whip pan → 충격/의문/공감으로 3초 안에 시청자 잡기
@@ -281,7 +287,7 @@ public function generateScenario(string $title, string $keyword = ''): array
"scene_number": 1,
"duration": 5,
"scene_role": "HOOK",
"narration": "짧은 문장1. 짧은 문장2. 짧은 문장3! (한국어, 60~100자, 한 문장 15~25자, 반드시 마침표/느낌표/물음표로 구분)",
"narration": "짧은 문장. 짧은 문장. 짧은 문장! (순수 한글만, 이모지 절대금지, 40~70자, 한 문장 10~20자)",
"visual_prompt": "Shot type, camera movement. Character description with specific clothing, action and expression. Lighting description. Style/quality keywords. Background and props detail.",
"mood": "shocking"
}