🎵 음성 · 자막 · 환경음
VAG는 TTS 나레이션 · 자막 burn-in · 장면별 환경음의 3가지 오디오/자막 기능을 제공합니다.
3가지를 동시에 사용할 수 있으며, 각각 독립적으로 작동합니다.
🎤 TTS 나레이션 (OpenAI TTS)
AI가 생성한 narration 텍스트를 OpenAI TTS API로 음성 파일로 변환합니다.
동작 방식
서버 환경설정에 [OpenAI API 키]가 설정되어 있어야 합니다.
키가 없으면 TTS 단계를 건너뜁니다 (무음 진행, 환경음·배경음은 정상 작동).
각 장면의 narration 텍스트를 개별 MP3 파일로 합성합니다.
저장 위치: jobs/{jobId}/audio/scene_1.mp3, scene_2.mp3, ...
각 장면 음성에 adelay 필터로 타이밍 오프셋을 적용합니다.
이전 장면들의 총 duration_sec 합계만큼 지연 적용 → 영상과 정확히 일치.
사용 모델
| 항목 | 값 |
|---|---|
| API | OpenAI TTS (tts-1 또는 tts-1-hd) |
| 기본 음성 | alloy (중성적, 명확한 발음) |
| 출력 형식 | MP3 |
| 언어 | 한국어 (narration 필드) |
| 요금 | $0.015/1000자 (tts-1 기준) |
🗣 자막 (Subtitle Burn-in)
AI가 생성한 subtitle 텍스트(15자 이내 한국어)를 FFmpeg drawtext 필터로 영상에 직접 소각(burn-in)합니다.
소각된 자막은 영상에 영구적으로 포함됩니다 (별도 자막 파일 없음).
자막 스타일
| 속성 | 값 |
|---|---|
| 위치 | 하단 중앙 (y=H-80) |
| 폰트 크기 | 42px |
| 글자색 | 흰색 (#FFFFFF) |
| 외곽선 | 검정 2px (가독성 보장) |
| 배경 | 반투명 검정 (가로 영상) / 세로 영상도 동일 |
| 폰트 | 서버 설치 한글 폰트 (NanumGothic 등) |
🌖 장면별 환경음 (Ambient Sound)
각 장면에 맞는 배경 소리를 자동으로 생성하고 믹싱하는 기능입니다. (2026년 4월 신규 적용)
8가지 환경음 타입
환경음 생성 원리
[내부경로]/[SFX폴더]/ 폴더에 SFX 파일이 하나 이상 있어야 환경음 트랙이 생성됩니다.
모두 없으면 이 단계를 건너뜁니다.
각 장면의 ambient_sound 타입에 해당하는 SFX 파일을 찾아
-stream_loop -1 -t {duration_sec}으로 정확한 길이의 MP3 클립을 생성합니다.
SFX 파일이 없는 타입은 anullsrc(무음)로 대체합니다.
장면 순서대로 클립을 concat하여 영상과 동일한 길이의 단일
ambient_track.mp3를 생성합니다.
🎲 3트랙 최종 믹싱
모든 오디오가 준비되면 아래 비율로 믹싱됩니다:
| 트랙 | 볼륨 | 처리 방식 |
|---|---|---|
| 🎤 TTS 나레이션 | 100% (기준) | 장면 타이밍 오프셋 적용 (adelay) |
| 🌖 환경음 트랙 | 35% | 영상과 동일 길이, 나레이션과 amix |
| 🎵 배경음악 (BGM) | 10% | aloop=-1 무한 반복 |
[bgIdx:a]volume=0.10,aloop=loop=-1:size=2e+09[bg];[ambIdx:a]volume=0.35[amb];[narIdx:a][amb][bg]amix=inputs=3:duration=first:dropout_transition=2[aout]
어떤 조합이든 최선의 결과를 출력합니다.
💿 SFX 파일 관리
SFX 파일은 서버에 미리 생성되어 있습니다. FFmpeg로 노이즈 신호를 합성한 30초 MP3 파일입니다.
| 파일 | 생성 방법 |
|---|---|
nature.mp3 | pink noise → lowpass 1200Hz |
ocean.mp3 | brown noise → tremolo f=0.12:d=0.75 |
rain.mp3 | white noise → highpass 2500Hz → lowpass 12000Hz |
wind.mp3 | pink noise → lowpass 700Hz → highpass 80Hz |
city.mp3 | pink noise → lowpass 2000Hz |
indoor.mp3 | white noise → lowpass 500Hz (volume 0.04) |
dramatic.mp3 | sine 55Hz + 110Hz + 82Hz 합성 |
default.mp3 | ambient_default.mp3 복사본 |
SFX 파일 위치: [서버 내부 SFX 디렉토리]