Legenda Impacto (임팩트 자막)
Reels/Shorts/TikTok용 고임팩트 자막 템플릿입니다. 사용자가 이 템플릿으로 동영상에 자막을 추가해 달라고 요청할 때, 아래 설명대로 매개변수를 다시 묻지 않고 적용하세요.
사전 요구사항
- Premiere Pro (2027/27.0에서 테스트; ExtendScript 사용) 및 Python 3.9+ (
pip install -r requirements.txt로 Pillow 설치 필요). - Premiere에서 ExtendScript를 실행할 방법: Premiere MCP (
execute_extendscript) 또는 CEP 파일 브릿지 — 저장소 루트의docs/PREMIERE-BRIDGE.md참조. - 폰트: Impact (Windows와 macOS에 기본 탑재) 및 선택적으로 Anton. 폰트를 찾을 수 없으면
CAPTION_FONT_DIR을 설정하세요. - 단어별
.mogrt패키지 (*_WbW.mogrt)가assets/에 있어야 함 — 저장소에 포함되어 있지 않습니다 (assets/LEIA-ME.md참조). 이 파일들은 "Anim Speed"/"Out Animation" 컨트롤과 텍스트 필드가 있는 Essential Graphics 템플릿입니다.
매개변수 (진실의 원천: style.json 및 scripts/plan_blocks.py)
- 형식 9:16 (1080x1920). 텍스트는 대문자, 중앙 정렬,
y_center0.54 (중앙보다 약간 아래). - 폰트 Impact. 작은 행 56px (흰색), 큰 행 140px, 일반 행 76px; 필요한 경우 축소 (최소 60%).
- 블록은 1~6개 단어로 구성되며, 구두점, 0.45초 초과 일시 중지 또는 3.3초 초과 지속 시간 기준으로 분할; 단일 단어(예: o, de, que)로 끝나지 않음.
- 블록 유형:
big_below(위에 작은 행 + 아래에 큰 행, 기본값),big_above(강한 단어가 큰 행으로 위에),single_big,single_small및 일반 (1행 또는 길면 2행, 표준 크기, 흰색). 각 블록은 40% 확률로 일반 텍스트가 되며, 같은 유형이 최대 2회 연속 가능. - 숫자/돈/강한 단어(
strong목록)가 있는 큰 행은 빨간색#F2381C, 최대 2회 연속 빨간색, 4블록 동안 없으면 1회 강제. - 애니메이션: 블록별로
assets/에 있는.mogrt중 무작위 선택 (이전과 중복 없음); 같은 블록의 두 행은 동일한 것을 사용. 출력 시 Out Animation 해제(컷). Anim Speed 150 (블록 < 1초면 200). - 안전 영역(고정 규칙): Premiere의 title safe(80% x 80% = 각 측면 10% 여백) 밖으로 텍스트가 나가지 않음.
make_graphics_script.py에서 구현 (layout_text+clamp_y;style.json의safe_margin_x/y및safe_tolerance): 유효 너비 = 1 - 2*0.10 - 0.02 = 너비의 78% (1080px 기준 842px). 맞지 않는 행: 1)min_scale(60%)까지 축소; 2) 그래도 맞지 않으면 2개(최대 3개) 행으로 분할 (균형 있게 자르고 필요한 만큼만 축소); 크기는 내림 처리되므로 가장 긴 행이 여백을 초과하지 않음. 블록 전체도 높이의 10%~90% 사이에 위치. - 전달: 사용자가 복사를 요청하지 않는 한 표시된 시퀀스에 직접 편집 (복사본 만들지 않음).
단계별 절차
- 프로젝트 확인: 사용자에게 어떤 프로젝트/시퀀스가 열려 있는지 확인하고 대상 시퀀스를 활성화 (ExtendScript는 활성 시퀀스에서 작동).
- 트랜스크립션: 사용자가 Premiere에서 JSON 내보내기 (텍스트 > 트랜스크립션 > 메뉴 ... > 내보내기; Documents 폴더에 "<시퀀스 이름>.json" 저장).
- 계획:
PYTHONIOENCODING=utf-8 python -I <skill>/scripts/plan_blocks.py <트랜스크립션.json> <폴더>/blocks.json실행. 요약과[확인 필요]단어(신뢰도 < 0.75)를 표시.blocks.json에서 오류 수정 (small/big필드). - 트랙: 비디오 트랙 목록을 확인. V1 = 비디오. 작은 행은 V2(인덱스 1), 큰 행/일반 행은 V3(인덱스 2), 빨간색 행은 모든 트랙 위에 새 트랙(인덱스 = 현재 트랙 수) 사용. 화면을 가리는 기존 자막/제목 클립이 있으면 비활성화.
- 배치 생성:
python -I <skill>/scripts/make_graphics_script.py blocks.json <폴더>/lote.js --tracks 1,2,<빨간색인덱스> [--seed N]->lote_01.js...(각 8클립) 및lote_clips.json. - 실행 전 여백 확인:
python -I <skill>/scripts/check_margins.py <폴더>/lote_clips.json— 결과가fora da margem: 0(최대 너비 <= 78%)이어야 함. - 각 배치 실행 Premiere에서 (ExtendScript,
script필드, IIFE + return,JSON.parse/stringify만 사용), 한 번에 하나씩,ok=8/8확인. 브릿지가 불안정하면 각 배치 전에 연결 확인. 절대 한꺼번에 보내지 말 것 (수십 개 클립을 한 번에 보내면 Premiere가 멈춤). - 빨간색: 빨간색 트랙의 클립을 나열하고 "RGB Color Balance" 효과 적용 (빨강 242, 초록 56, 파랑 28). 클립당 한 번만 — 다시 적용하면 효과가 중복되어 빨간색이 어두워짐 (다시 실행해야 하면 빨간색 트랙 클립을 삭제하고 다시 만드세요).
- 확인: 클립의 텍스트/폰트/크기/위치를 다시 읽고
check_margins.py를 다시 실행; 프레임 내보내기가 작동하면 3-4프레임(빨간색, 일반, 2행) 내보내고, 그렇지 않으면 사용자에게 여백 가이드를 켜고 확인해 달라고 요청. 프로젝트 저장. - 전달: 수행된 작업, 의심스러운 단어 및 동영상에서 확인하지 못했음을 알림.
빠른 조정
| 원하는 것 | 수정할 항목 |
|---|---|
| 크기/폰트/위치 | style.json (mogrt_size_small/big/plain, mogrt_font, y_center, gap) |
| 여백 | style.json의 safe_margin_x/y, safe_tolerance |
| 일반 텍스트 비율 변경 | --plain-prob (기본값 0.4) |
| 다른 무작위성 | --seed |
| 빨간색 비율/블록 크기 변경 | plan_blocks.py의 RULES 또는 --config regras.json |
| 텍스트 수정 | blocks.json 수정 후 배치 재생성 |
대안: 투명 비디오 (.mogrt를 Premiere가 지원하지 않는 경우에만)
render_captions.py blocks.json out.mov --duration <초> --fps 30 명령으로 ProRes 4444 (알파 채널 포함)를 생성합니다 (5프레임 'pop' 인트로, 기본 빨간색, 편집 불가). 가져온 미디어로 타임라인에 배치. 45초 렌더링에 약 5분 소요.
알려진 한계
- 애니메이션은 템플릿의 시간에 따라 실행되며, 각 단어가 발화되는 정확한 시점과 일치하지 않습니다.
- 욕설 자동 검열 ("P*RRA")은 지원되지 않습니다 (
blocks.json에서 수동 편집). - 문장 분할이 어색할 수 있으므로 실행 전에 블록 목록을 검토하세요.
.mogrt의 색상은 스크립트로 변경할 수 없습니다 (따라서 빨간색에 색상 효과를 적용).