Communitygithub.com

HedgehogsGX/chinese-subtitles-skill

EN→简体中文 字幕翻译+烧录 Claude 스킬. Apex/Warframe/osu!/Minecraft/SC2/CS2 용어집 포함; 한 줄 획이 있는 흰색 하드서브. 토크/브이로그에도 사용 가능.

chinese-subtitles-skill란 무엇인가요?

이 AI 에이전트 스킬은 디스크에 있는 영어 비디오를 가져와 간체 중국어 하드코딩 자막이 포함된 MP4 파일과 일치하는 SRT 파일을 생성합니다. Apex Legends, Warframe, osu!, Minecraft, StarCraft II, Counter-Strike 2와 같은 게임을 위한 특화 용어집이 포함되어 있어 전문 용어를 정확하게 번역합니다. 워크플로는 비디오 분석, 용어집 선택, 영어 자막 추출(YouTube 자동 자막 등), ASR 오류 수정, JSON 세그먼트로 번역, SRT 빌드, 챕터 카드 번역 및 오버레이 생성을 단계별로 안내합니다. 파이프라인은 한 줄 자막, 짧은 캡션, 배경 상자 없이 흰색 텍스트와 검은색 외곽선/그림자, 그리고 思源黑体(Source Han Sans Bold) 폰트를 사용하여 일관된 시각적 스타일을 유지합니다. 또한, 나중에 수정할 때 전체를 다시 인코딩하지 않고 스플라이싱할 수 있는 효율적인 방법을 제공하며, 최종 출력물과 함께 용어 결정 목록을 제공합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add HedgehogsGX/chinese-subtitles-skill

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

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

문서

비디오 중문 자막 — 번역 및 굽기

이미 디스크에 있는 영어 비디오를 가져와 간체 중국어 하드코딩 버전과 일치하는 SRT 파일을 생성합니다.

다운로드는 의도적으로 범위에 포함되지 않습니다. 소스 MP4가 이미 있다고 가정합니다.

파이프라인은 주제에 구애받지 않습니다 — 22분 분량의 Apex 무브먼트 비디오를 기반으로 구축되었지만, 스크립트는 영상이 무엇인지 알지 못하며 신경 쓰지 않습니다. 비디오마다 달라지는 것은 용어집과 캡션 밴드 위치입니다.

좋은 출력물의 모습

이를 사용하는 사람은 특정하고 이미 확정된 외형을 중요하게 생각합니다. 이는 매번 재고해야 할 기본값이 아니라 실제 출력물을 반복해서 얻은 결과물이며, 이를 묵시적으로 변경하는 것은 회귀로 간주됩니다:

  • 간체 중국어만 사용. 절대로 번체와 혼용하지 마십시오. 전달 전에 확인하십시오.
  • 캡션은 항상 한 줄. 두 줄 캡션은 가장 흔한 불만 사항입니다. 줄이 너무 길면 줄바꿈 대신 두 개의 연속적인 큐로 분할하십시오. build_srt.py가 이를 강제합니다.
  • 캡션은 짧게. "한 줄"이 매우 긴 줄을 허용하는 것은 아닙니다. 렌더링된 너비가 약 1100px 이하(1080p 기준 프레임의 약 57%)를 목표로 하십시오.
  • 배경 상자 없음. 흰색 텍스트, 진한 검은색 외곽선, 부드러운 검은색 그림자.
  • 思源黑体 / Source Han Sans Bold (assets/NotoSansSC-Bold.ttf에 번들됨). 직립체로 두껍고, 강력한 라틴 문자를 가집니다 — 이런 스타일의 비디오는 중국어 문장 안에 영어 전문 용어가 가득하며, 디스플레이 서체는 이를 잘 처리하지 못합니다.
  • 커뮤니티에서 실제로 영어로 말하는 전문 용어는 영어로 유지. 어떤 용어가 그런지는 주제별 질문이며, 이것이 용어집이 답하는 바입니다.
  • 굽혀진 챕터 카드에는 그 위가 아닌 아래에 중국어 줄을 넣습니다.

워크플로

1. 소스 분석 및 용어집 선택

ffprobe -v error -show_entries format=duration -show_entries stream=codec_type,codec_name,width,height,r_frame_rate -of default=nw=1 source.mp4

지속 시간과 FPS를 정확히 기록하십시오 — 이후 모든 단계가 이에 의존합니다.

그런 다음 비디오가 무엇에 관한 것인지 파악하고 references/glossaries/README.md를 읽어 올바른 파일과 읽어야 할 섹션을 확인하십시오. 번역하기 전에 일치하는 용어집의 字幕使用原则 섹션을 전체적으로 읽으십시오 — 짧으며, 해당 게임의 규칙이 명시되어 있습니다.

번들: Apex Legends, Warframe, osu!, Minecraft 速通/MCSR, StarCraft 星际争霸, Counter-Strike 反恐精英, ARC Raiders.

이 비디오에 대한 용어집이 없다면, 그것이 정상적인 경우입니다. 검증 가능한 공식 간체 이름을 기준으로 번역하고, 결정해야 했던 용어 목록을 유지하여 마지막에 전달하십시오. 용어에 공식 중국어 이름이 없으면 설명적인 번역을 사용하고 공식이 아님을 명시하십시오 — 추측을 확정된 것으로 제시하지 마십시오. 이미 이름이 있는 것에 대해 이름을 지어내지 마십시오.

2. 타임스탬프가 있는 영어 대본 얻기

비디오가 YouTube에서 온 경우, 자동 자막이 사용 가능한 기반이 됩니다: yt-dlp --write-auto-subs --sub-langs "en.*" --skip-download. 이들은 단어 수준 타임스탬프 태그가 있는 롤링 캡션이므로 문장 세그먼트로 중복을 제거하십시오.

자동 자막은 전문 용어를 심하게 왜곡하며 번역 중에 반드시 수정해야 합니다. ASR은 일반 영어 모델에 대해 음성적으로 전사하므로, 일반 단어가 아닌 모든 도메인 용어는 그럴듯한 잘못된 단어로 돌아옵니다. Apex 무브먼트 영상의 실제 예: "forward rez/raft/raz" → RAS, "Neor strafe" → Neo strafe, "pedo strafe" → Pito strafe, "mantel boost" → mantle boost, "alerts" → lurches, "my VO was so high" → my velo (velocity), "I couldn't attach out of that" → couldn't tap-strafe out of that. 전문 용어가 많은 비디오에서 동일한 유형의 손상을 예상하십시오 — 용어집이 이를 인식할 수 있게 해줍니다.

음성이 진정으로 복구 불가능한 경우 — 음악 효과, 겹치는 고함 — 해당 세그먼트의 zh를 비워 두어 삭제하고, 사용자에게 삭제한 타임스탬프를 알리십시오. 그럴듯한 줄을 지어내는 것은 줄이 없는 것보다 나쁩니다.

3. 세그먼트 JSON으로 번역

[{"i": 1, "start": 0.24, "end": 4.90,
  "en": "Seeing movement players pull off tricks like these is super cool and all, but",
  "zh": "看身法玩家秀出这种操作确实很酷,但真正的问题是"}]

en을 유지하십시오 — 장식이 아닙니다. build_srt.py는 이를 사용하여 두 개의 큐를 병합할 수 있을 때 문장 연속과 별개의 발언을 구분하며, 이는 算了好 또는 是,长官你好啊와 같은 연속 실행을 방지합니다.

4. SRT 빌드

python scripts/build_srt.py segments.json sub.srt --font assets/NotoSansSC-Bold.ttf

보고서를 출력합니다. overlaps, multiline, latin_cjk_runons 또는 term_split_across_cues가 0이 아닌 경우 인코딩 전에 버그로 수정하십시오. 몇 개의 under_0.35s 큐는 1–3자 감탄사일 때 괜찮습니다 — 확인하고, 가정하지 마십시오.

5. 굽혀진 챕터 카드 찾기 및 번역

python scripts/find_chapters.py source.mp4

크리에이터는 YouTube 챕터 대신 비디오에 챕터 카드를 굽는 경우가 많으므로 메타데이터에는 아무것도 표시되지 않습니다. 이는 후보 윈도우를 보고합니다; 각각에서 프레임을 추출하고 번역을 작성하기 전에 실제 카드 텍스트를 읽으십시오. chapters.json 출력: [{"start":42,"end":46,"zh":"第 1 章:定义 lurch 组合"}].

6. 캡션이 화면상 텍스트와 충돌할 위치 확인

아웃트로 카드가 일반적인 범인입니다 — 일반 위치의 캡션이 크리에이터의 소셜 링크 위에 놓입니다. 프레임을 추출하고, 간격을 찾아 선언하십시오:

[{"from": 1334.0, "to": 100000, "bottom": 820}]

기본 캡션 밴드는 일반적인 FPS HUD 위에 위치합니다. 다른 게임이나 비게임 영상은 자신의 요소를 거기에 배치할 수 있습니다 — MOBA 미니맵, 리듬 게임의 판정선, 토크의 하단 서드. 프레임을 추출하고 기본값을 수락하기 전에 확인하십시오.

7. 오버레이 빌드 및 인코딩

python scripts/build_overlay.py sub.srt ov --font assets/NotoSansSC-Bold.ttf \
    --duration 1354.351 --chapters chapters.json --avoid avoid.json
python scripts/burn_in.py source.mp4 ov/concat.txt out.mp4

오버레이의 보고된 드리프트가 수 밀리초이고 수백 밀리초가 아닌지 확인하십시오.

~20분 인코딩을 커밋하기 전에 PIL에서 하나의 오버레이 PNG를 실제 프레임에 합성하여 확인하십시오. 몇 초가 소요되며, 그렇지 않으면 20분 후에 표면화될 위치 및 폰트 오류를 잡을 수 있습니다.

8. 검증

python scripts/verify.py out.mp4 --expect-frames <frames> \
    --contact-sheet sheet.jpg --at 75 300 660 945 1340

시트를 확인하십시오. 확인: 한 줄, 밝은 프레임에서 읽기 가능, 챕터 줄이 카드 아래에 있음, HUD 또는 아웃트로 텍스트와 충돌하지 않음.

9. 나중 수정 — 스플라이스, 재인코딩 금지

사용자가 몇 줄을 변경하도록 요청할 때(그럴 것입니다), SRT를 다시 빌드하고, 이전 SRT와 비교하여 어떤 큐가 이동했는지 찾은 다음:

python scripts/splice.py out.mp4 source.mp4 sub.srt out_fixed.mp4 \
    --font assets/NotoSansSC-Bold.ttf --change-from 310 --change-to 316 \
    --duration 1354.351 --chapters chapters.json --avoid avoid.json
python scripts/verify.py out_fixed.mp4 --expect-frames <frames> --seams 310 316

15초 대신 20분. 프레임 수가 동일해야 합니다.

전달물

out.mp4와 함께, SRT(대화 및 챕터 줄, 병합 및 재번호 지정)를 전달하여 나중에 작업을 다시 하지 않고 자막을 편집할 수 있도록 하십시오. 중국어 제목과 설명도 제공하십시오 — 비디오가 재게시된 경우, 원본 1인칭 설명이 저자임을 암시하며, 음악 저작 표시 블록은 라이선스가 정확한 형식을 요구하므로 원래 영어로 유지해야 함을 알리십시오.

용어집에 없던 용어를 결정해야 했다면 목록을 작성하십시오. 한 번 결정되고 기록된 용어는 다음에 다르게 내려진 동일한 결정보다 가치가 있습니다; references/glossaries/README.md는 그러한 목록을 용어집 파일로 바꾸는 방법을 설명합니다.

참고 자료

  • references/glossaries/README.md — 어떤 용어집을 읽을지, 해당 용어집의 어떤 섹션을 읽을지, 비디오에 용어집이 없을 때 할 일. 여기서 시작하십시오.
  • references/glossaries/*.md — 용어집 자체. 큼. 원칙 섹션과 관련 섹션을 읽으십시오; 개별 용어는 grep하십시오.
  • references/pipeline.md — 기술 노트 및 이 파이프라인의 특정 함정. 타이밍, 스플라이스 또는 렌더링 문제처럼 보이는 것을 디버깅하기 전에 읽으십시오; 대부분은 이미 한 번 진단되었습니다.

관련 스킬