자막(Captions)
자막은 work/transcript.json에서 계산되며, 편집 컷의 대화 세그먼트를 기준으로 매핑됩니다(제거된 단어는 사라지고, 룸 톤 채움은 자막으로 표시되지 않습니다). config/captions.styles.yaml의 규칙에 따라 분할되고, 일반 파일로 작성된 후 ffmpeg으로 인코딩됩니다. Resolve는 관여하지 않습니다.
명령어
ave captions <ep> --stage rough --style podcast # -> captions/rough.srt + .ass, 새 edits/rough.vN.json (자막 설정 포함)
ave captions <ep> --stage rough --name s2 # 세션 편집 (--stage rough:s2와 동일) -> captions/rough.s2.srt, 새 rough.s2.vN.json
ave captions <ep> --stage select:<name> --style short # 세로 클립: 가라오케 ASS (단어당 \kf), 65% 높이 블록
ave captions <ep> --stage final --burn [--video exports/final.mp4] # 렌더링에 하드코딩 -> <video>.captions.mp4
ave captions check <ep> captions/rough.srt # 규칙 위반 시 exit 1 + JSON 문제 목록 (SRT 또는 ASS)
ave captions retranscribe <ep> exports/final.mp4 [--srt-out f.srt] [--asr whisper] [--diarize]
스타일: podcast(하단 중앙, 흰색, 얇은 윤곽선), short(굵게, 단어 강조, 1080폭 기준 하단 25% 및 오른쪽 120px 안전 영역 확보), minimal(작고 조용함). 크기는 캔버스의 분수로 지정되므로, 1920x1080과 1080x1920 모두에서 동일한 스타일이 정확하게 적용됩니다. YAML에서 숫자를 조정하거나, <ep>/policy/captions.styles.yaml에서 에피소드별로 덮어쓸 수 있습니다(깊은 병합).
결과 평가
- JSON의
problems를 읽습니다. 종류:line_too_long,too_many_lines,orphan_line,too_short,too_long,reading_speed,overlap,empty. 다음 큐에 의해 박스가 제한된reading_speed는 실제 문제입니다(빠른 화자): 사람에게 알리고, 숨기지 마십시오. - SRT를 읽습니다. 구두점/절(clause)에서 끊어지는지 확인하고, 구절 중간("대부 / 분")에서 끊기지 않아야 합니다. 문제가 많으면 파일을 직접 수정하지 말고 YAML에서
avoid_ending_with/clause_starters를 조정하십시오. - 자막이 하드코딩된 프레임을 확인합니다(
ave frame을 사용하여 하드코딩된 동영상에서): 텍스트가 번잡한 영상 위에서도 읽을 수 있고, 안전 영역 안에 있으며, 하단 1/3을 가리지 않아야 합니다. - 고유 명사:
episode.json의glossary에 추가하고 다시 실행합니다.{"glossary": {"open ai": "OpenAI"}}(틀린 것 -> 올바른 것, 여러 단어 가능) 또는 올바르게 대문자화된 이름 목록["Maren", "Cloudflare"](대소문자 구분 없이 일치). 일반 단어와 겹치는 이름은 피하십시오. drop_fillers(음, 어...)는 기본적으로 들리지만 자막에 포함되지 않습니다. 축어적으로 표시하려면drop_fillers: []로 설정합니다.
최종 렌더링 흐름
자막 타이밍은 최종 컷에 따라 달라집니다. 컷 승인 후: 렌더링한 다음, 렌더링 파일에 대해 ave captions retranscribe를 실행하고 해당 SRT를 사이드카로 사용합니다(들리는 대로 정확한 단어와 타이밍). ASR 엔진은 FluidAudio Parakeet입니다. 빌드되지 않은 경우 명령은 whisper.cpp로 대체되며 warnings에 그 사실을 알립니다. 게시 전에 재전사된 SRT에서 잘못 들은 이름을 검토하십시오.
실패 모드
-
재전사된 SRT가 소문자, 구두점 없음, 5초 큐, 시간이 몇 초 차이 나는 경우: 이는 whisper.cpp 대체(FluidAudio를 찾을 수 없음; 작업 트리에서
AVE_FLUIDAUDIO설정)입니다.ave captions retranscribe ... --asr fluidaudio --srt-out <new file>를 다시 실행하십시오. 실제 에피소드 측정 결과: whisper 중간값 0.55초 빠름(p10 1.4초), Parakeet 0.13초 이내. -
JSON의 글꼴 경고: 스타일의 선호 글꼴이 설치되지 않았습니다. 시스템 글꼴로 대체됩니다(실패하지 않음).
motion-kit/brand/fonts에 OFL 글꼴을 번들로 제공하면 모든 시스템에서 동일한 출력을 얻을 수 있습니다. -
No speech falls inside this edit's dialogue: 편집에 채움만 있거나 대본이 누락되었습니다. 먼저ave transcribe를 실행하십시오. -
하드코딩된 동영상 크기가 문서 캔버스와 다른 경우(예: 프록시): ASS가 동영상 실제 크기로 자동 재생성됩니다.
-
기존 편집을 덮어쓰지 마십시오. 모든 실행은 다음
vN을 생성합니다.captions/의 자막 파일은 파생되며 대체됩니다.
체크포인트
전체 최종본을 하드코딩하거나 쇼트를 게시하기 전에, 중단하고 사용자에게 스타일 선택과 하드코딩된 프레임을 보여주십시오.