Communitygithub.com

manwithshit/subtitle-focus

자막 교정, 잠금, 하이라이트, 스타일 적용, 프레임 리뷰 및 최종 전달을 로컬에서 수행하는 SRT 자막 파이프라인입니다.

subtitle-focus란 무엇인가요?

이 스킬은 SRT 자막 파일에 대해 교정, 잠금, 하이라이트, 스타일 보정, 샘플 렌더링, 전체 영상 프레임 리뷰 및 최종 전달을 포함한 완전한 워크플로우를 제공합니다. 사용자가 참조 스크린샷을 제공하면 해당 프로젝트에 맞게 캡션 스타일을 추가로 보정합니다. 에이전트는 SRT 컨텍스트, 로드된 용어집, 프로젝트 증거 및 사용자 수정 사항을 기반으로 단어의 의미를 결정하며, 번들 스크립트는 결정적 플래그, 정확한 대체, 소스 잠금, 혼합 CJK/라틴 레이아웃, 렌더링, 리뷰 프레임 및 해시를 처리합니다. 소스 SRT와 비디오는 읽기 전용으로 유지됩니다. 5개의 게이트(교정 잠금 → 하이라이트 확인 → 샘플 확인 → 전체 프레임 리뷰 → 전달 등록)로 구성되며 각 게이트에서 사용자 확인을 기다립니다. 지원 플랫폼은 Claude Code, Cursor, Codex 등 명령줄 기반 AI 에이전트입니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add manwithshit/subtitle-focus

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Subtitle Focus|자막 미화 및 중요 내용 강조 표시

타임스탬프가 있는 SRT 파일을 노란색 의미적 하이라이트, 승인된 짧은 샘플, 추적 가능한 전체 영상 번-인으로 변환합니다. 사용자가 참조 스크린샷을 제공하면 해당 프로젝트의 캡션 스타일을 추가로 보정합니다. 에이전트는 SRT 컨텍스트, 로드된 용어집, 프로젝트 증거 및 사용자 수정 사항을 기반으로 단어의 의미를 결정합니다. 번들 스크립트는 결정적 플래그, 정확한 대체, 소스 잠금, 혼합 CJK/라틴 레이아웃, 렌더링, 리뷰 프레임 및 해시를 처리합니다. 소스 SRT와 비디오는 읽기 전용입니다.

내보낸 SRT 파일이 필요합니다. 비디오만 입력하거나 일반 줄 단위 MD 전사본은 이 스킬에서 허용되는 타임라인이 아닙니다. 중단하고 사용자에게 SRT 내보내기를 요청하십시오. Video Use, 剪口播, 로컬 Whisper, ASR 또는 OCR을 호출하지 마십시오.

5개의 게이트로 작업합니다. 각 확인 게이트에서 중단합니다.

SRT 교정 잠금 → 하이라이트 확인 → 샘플 확인 → 전체 프레임 리뷰 → 전달 등록

게이트 1 — SRT 교정 잠금

  1. 머신에서 처음 사용하기 전에 doctor를 실행합니다.
  2. 타임스탬프가 있는 SRT가 필요합니다. 일반 MD/전사본 입력 및 비디오 전용 전사 요청을 거부합니다.
  3. 프로젝트 수령 시 두 가지 명시적 선택을 요청합니다: 개인 용어집 사용 또는 명시적 건너뛰기; 프로젝트 용어집 사용 또는 명시적 건너뛰기. 설치 중에 묻지 말고, proofread 플래그로 두 선택이 모두 기록될 때까지 공식 교정을 시작하지 마십시오.
  4. proofread를 실행합니다. 기본 용어집이 자동으로 로드됩니다. text-lock-schema.md에서 명시적 선택, 계층화, 개인정보 보호 동작 및 스키마를 읽어보십시오. 공개 소스 리뷰 정책은 glossary-sources.md에 문서화되어 있습니다.
  5. SRT 이웃, 로드된 용어집 출처, 프로젝트 어휘, 제품 이름, 프로젝트 파일 및 사용자 수정 사항을 사용하여 모든 큐를 검사합니다. 실제 사용자/프로젝트 규칙 또는 열거된 용어집 항목이 있는 경우에만 철자, 대소문자, 숫자, 단위, 대명사 또는 간격 규칙을 적용합니다. 일반 정규화 정책을 임의로 만들지 마십시오.
  6. corrections.json 초안을 작성합니다. 용어집 일치는 제안일 뿐이며 자동 편집이 아닙니다. 절대 자동으로 고쳐쓰지 마십시오.
  7. correct를 실행하고 큐 수준의 전후 비교표를 사용자에게 보여줍니다. 출력은 SRT 텍스트에서 언급되지 않은 줄바꿈과 반복 공백을 보존해야 합니다.
  8. 명시적 텍스트 승인 후 lock --confirmed를 실행합니다.

중단. 잠금 해제된 SRT에서 하이라이트를 계획하지 마십시오. SRT의 바이트 변경은 잠금, 캡션 계획, 샘플 및 전체 렌더링을 무효화합니다. 다시 생성하십시오.

게이트 2 — 하이라이트 텍스트

  1. 사용자가 달리 요청하지 않는 한 --max-chars 16을 사용하여 plan --lock ...을 실행합니다.
  2. highlight-schema.md를 사용하여 highlight.json 초안을 작성합니다.
  3. apply 및 review를 실행합니다. 케이던스 보고서가 통과할 때까지 선택 사항을 조정한 다음 validate를 실행합니다.
  4. 사용자에게 타임라인 순서대로 완전한 캡션 원고를 보내고, 제안된 모든 하이라이트를 Markdown 굵게 표시하여 문장에 직접 표시하십시오. 먼저 별도의 키워드 목록이나 하이라이트 표를 보내지 마십시오. 사용자에게 굵게 표시된 위치를 확인하거나 재지정이 필요한 문장을 지정하도록 요청하십시오.

선택: 의미를 전달하는 완전한 단어 또는 구문만 선택합니다. 렌더링된 각 캡션 세그먼트를 하나의 문장으로 취급합니다. 모든 인접 쌍은 적어도 하나의 하이라이트된 세그먼트를 포함해야 하므로, 하이라이트되지 않은 문장은 최대 하나까지만 연속될 수 있습니다. 전체 텍스트가 일치하는 중국어 또는 ASCII 괄호로 둘러싸인 큐는 오프스크린/PiP 부가 내용입니다: 일반 텍스트로 유지하고 케이던스 경계로 처리합니다. 일반 문장 내부의 인라인 괄호는 이 면제를 생성하지 않습니다. 특정 큐나 세그먼트를 일반 텍스트로 유지하라는 사용자의 명시적 요청은 특히 PiP/오프스크린 콘텐츠의 경우 케이던스보다 우선합니다: 대상 id와 사용자가 확인한 이유를 plain_overrides 항목으로 기록하고, 일반 텍스트로 유지하며, 괄호가 없더라도 케이던스 경계로 처리합니다. 콘텐츠가 부차적으로 보인다는 이유만으로 이 면제를 임의로 만들지 말고, 근처에 채우기용 하이라이트를 추가하여 보상하지 마십시오. 연속성이 향상될 때 모든 문장을 하이라이트하는 것이 허용됩니다. 짧은 의미적으로 원자적인 문장은 전체를 하이라이트할 수 있습니다. 긴 문장은 일반적으로 하나의 주요 의미 전달 구문을 유지해야 하며, 진정한 병렬 또는 대조의 경우에만 두 개를 유지할 수 있습니다. 백분율을 줄이기 위해 단어, 제품 이름 또는 구문을 분할하지 마십시오. 케이던스를 충족시키기 위해 필러, 전환 또는 정보 가치가 낮은 단어를 하이라이트하지 마십시오. 커버리지는 계획을 차단하지 않습니다. 리뷰는 긴 세그먼트가 대부분 하이라이트되거나 너무 많은 하이라이트 범위를 포함하는 경우 비차단 밀도 경고를 추가하며, 사용자는 완전한 굵게 표시된 원고에서 결정합니다. 의미 있는 하이라이트나 명시적 사용자 예외로 케이던스를 충족할 수 없는 경우 충돌하는 세그먼트 id를 사용자 리뷰를 위해 보고하십시오. 하이라이트 중에 잠긴 SRT를 절대 다시 쓰지 마십시오.

중단. 사용자가 굵게 표시된 완전한 원고를 확인할 때까지 렌더링하지 마십시오.

게이트 3 — 샘플 및 참조 이미지 스타일

  1. default-style.json을 복사하거나 style로 버전을 파생합니다.
  2. 참조 데모가 없을 때 기본 center_y_ratio를 0.82로 유지합니다.
  3. 사용자가 참조 스크린샷을 제공하면 검사하고 --center-y-ratio, --safe-width-ratio 또는 --font-size-max와 같은 명시적 재정의와 함께 style --reference-image ...를 실행합니다. 출력은 참조 이미지 SHA 및 치수를 기록합니다. style-calibration.md를 참조하십시오.
  4. 첫 번째 하이라이트부터 시작하는 10~15초 클립을 렌더링합니다.
  5. CJK, 라틴 및 혼합 하이라이트에 대해 preview --video ...를 실행하여 스틸 이미지가 대상 비디오의 실제 치수를 사용하도록 합니다.
  6. 기준선, 겹침, 클리핑, 폰 프레임 안전 영역, 아바타 회피 및 참조 데모 정렬을 검사합니다.
  7. validate --video ... --style ...을 실행하여 실제 비디오 치수와 선택한 글꼴로 모든 캡션을 측정합니다. 렌더러는 캡션을 font_size_min으로 축소할 수 있습니다. 안전 픽셀 너비를 초과하는 캡션은 실패합니다.

중단. 사용자가 샘플을 수락할 때까지 전체 렌더링이 금지됩니다. 스타일 변경은 style-vN.json을 생성합니다. 텍스트 변경은 게이트 1로 돌아갑니다.

게이트 4 — 전체 영상 및 프레임 리뷰

  1. --start 또는 --duration 없이 render를 실행합니다.
  2. 잠긴 SRT 및 최종 비디오 길이에 대해 validate --video ...를 실행합니다.
  3. 최종 렌더링된 비디오에 대해 --already-burned를 사용하여 frames를 실행하고, 수정 사항이 있을 때마다 --corrections를 전달합니다. 모든 수정된 큐, 모든 하이라이트된 세그먼트 및 시작/중간/종료 프레임이 포함되어야 합니다.
  4. contact-sheet.jpg와 각 전체 해상도 프레임을 검사합니다. 리뷰 프레임에서 수정된 큐가 누락되면 전달 실패입니다.

게이트 5 — 유일한 전달

최종 비디오, 잠긴 SRT, 하이라이트 계획, 스타일, 수정 사항 및 리뷰 디렉토리를 사용하여 deliver를 실행합니다. 이 명령은 경로, 해시, 비디오 메타데이터, 변경된 큐 id, 리뷰된 큐 id, 참조 데모 출처 및 핸드오프 파일이 포함된 하나의 subtitle-focus-delivery 매니페스트를 작성합니다.

--handoff-dir을 사용하여 최종 SRT를 복사하고 전사본을 생성합니다. 사용자가 비디오 복사를 원하는 경우에만 --copy-video를 추가합니다. 완성된 게시 문서가 이미 있는 경우에만 --publish-copy를 추가합니다. 절대 게시 사본을 임의로 만들지 마십시오.

delivery-schema.md를 참조하십시오.

명령어 맵

SCRIPT=skill/scripts/subtitle_focus.py

python3 "$SCRIPT" doctor
python3 "$SCRIPT" glossary-init --scope personal
python3 "$SCRIPT" proofread --srt /abs/in.srt --no-personal-glossary --no-project-glossary --output /abs/text-review.md
python3 "$SCRIPT" correct --srt /abs/in.srt --corrections /abs/corrections.json --output /abs/locked-text.srt --review /abs/corrections-review.md
python3 "$SCRIPT" lock --srt /abs/locked-text.srt --output /abs/srt-lock.json --confirmed
python3 "$SCRIPT" plan --srt /abs/locked-text.srt --lock /abs/srt-lock.json --output /abs/caption-plan.json
python3 "$SCRIPT" apply --plan /abs/caption-plan.json --highlights /abs/highlight.json --output /abs/caption-plan.highlighted.json
python3 "$SCRIPT" review --plan /abs/caption-plan.highlighted.json --output /abs/highlight-review.md
python3 "$SCRIPT" style --base skill/assets/default-style.json --reference-image /abs/demo.png --center-y-ratio 0.73 --output /abs/style-v1.json
python3 "$SCRIPT" validate --plan /abs/caption-plan.highlighted.json --video /abs/input.mp4 --style /abs/style-v1.json
python3 "$SCRIPT" preview --video /abs/input.mp4 --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --cue 2 --output /abs/cue-2.png
python3 "$SCRIPT" render --video /abs/input.mp4 --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --output /abs/edit/final-subtitled.mp4
python3 "$SCRIPT" frames --video /abs/edit/final-subtitled.mp4 --already-burned --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --corrections /abs/corrections.json --output-dir /abs/edit/review-frames
python3 "$SCRIPT" deliver --video /abs/edit/final-subtitled.mp4 --srt /abs/locked-text.srt --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --corrections /abs/corrections.json --review-dir /abs/edit/review-frames --output /abs/edit/delivery.json

모든 플래그에 대해 python3 scripts/subtitle_focus.py <command> --help를 실행하십시오.

그리기 규약

시각적 숫자 및 타이포그래피 규칙은 visual-spec.md에 있습니다. 에이전트 측 그리기 해킹을 추가하지 마십시오. 하나의 공유 기준선을 유지하고, 하이라이트된 실행만 확대하며, C 組와 같은 혼합 구문을 함께 유지하고, 문자열을 전체 실행 단위로 그립니다.

금지 사항

변명현실
"SRT가 한 단어만 변경되었습니다"해시가 변경되었습니다. 다시 잠그고 모든 파생 아티팩트를 재생성하십시오.
"하이라이트는 명백합니다"게이트 2는 사용자 결정입니다. 기다리십시오.
"기본 82% 높이가 항상 올바릅니다"참조 데모가 없을 때만 82%를 유지하십시오. 그렇지 않으면 버전이 지정된 스타일 재정의를 사용하십시오.
"몇 개의 무작위 프레임이면 충분합니다"모든 수정된 큐와 하이라이트된 세그먼트가 리뷰 프레임에 나타나야 합니다.
"최종 파일 이름이 내용을 알려줍니다"전달 매니페스트만 권위가 있습니다.
"비디오 또는 MD 파일이 타임스탬프를 복구하기에 충분합니다"이 스킬은 내보낸 SRT가 필요하며 ASR/OCR을 실행하지 않습니다.
"용어집 일치가 확실히 정확합니다"출처가 있는 제안입니다. 표시하고 텍스트 승인을 기다리십시오.
"용어집 파일이 없으면 결정이 필요하지 않습니다"게이트 1은 여전히 명시적인 개인 및 프로젝트 건너뛰기 선택이 필요합니다.
"일반적인 타이포그래피 규칙은 명백합니다"SRT를 보존하십시오. 사용자가 요청하거나 열거된 규칙만 추가하십시오.
"SRT 줄을 평평하게 하는 것은 무해합니다"렌더링 계획은 하나의 표시 줄을 파생할 수 있지만, 잠긴 SRT는 언급되지 않은 공백을 보존해야 합니다.
"4개의 일반 문장을 연속으로 사용하는 것은 허용됩니다"모든 인접 쌍은 적어도 하나의 하이라이트된 세그먼트가 필요합니다. 검증이 긴 일반 실행을 차단합니다.
"괄호 안의 부가 내용은 케이던스를 충족시키기 위해 강제 하이라이트가 필요합니다"완전히 괄호 안의 큐는 일반 텍스트로 유지되고 케이던스 실행을 분리합니다. 인라인 괄호는 일반 큐의 일부로 남습니다.
"케이던스가 사용자의 명시적 일반 텍스트 선택보다 엄격합니다"사용자가 확인한 선택이 우선합니다. 대상 큐 또는 세그먼트를 plain_overrides에 기록하십시오. 사용자를 대신하여 예외를 추론하지 마십시오.
"짧은 문장은 전체를 하이라이트할 수 없습니다"전체 문장이 하나의 의미 있는 요점일 때 전체를 하이라이트할 수 있습니다. 커버리지는 정보 제공용으로 남습니다.
"30% 제한을 제거하면 긴 문장이 모두 노랗게 변할 수 있습니다"긴 밀집 하이라이트는 리뷰 경고로 표시됩니다. 기본적으로 하나의 주요 구문을 유지하고 사용자가 완전한 원고에서 결정하도록 하십시오.

관련 스킬