동영상에 틱톡 스타일 텍스트 추가하기
이 스킬의 파일은 ${CLAUDE_PLUGIN_ROOT}/skills/add-text/에 있습니다:
scripts/add_text.py: 이것을 사용하세요. 두 개의 명령어로 전체 작업을 실행합니다.scripts/caption_match.py(감지/맞춤/확인) 및scripts/tiktok_text.py(그리기 + 합성): 엔진입니다.scripts/setup_check.py: 첫 실행 설정 및 확인.fonts/: TikTok Sans (오픈 소스, OFL 라이선스).
스타일은 실제 앱 내 틱톡을 기준으로 측정되었습니다. 다른 방식으로 텍스트를 렌더링하지 마십시오 (ffmpeg drawtext, 일반 폰트 등). 일치하지 않습니다.
0단계: 설정 (매번 수행; 한 번 완료되면 약 2초 소요)
PATH에 있는 python / python3으로 다음을 실행하세요:
python "${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts/setup_check.py" "${CLAUDE_PLUGIN_DATA}"
-
첫 번째 실행은 플러그인의 데이터 폴더에 개인 Python 환경을 생성하고 패키지를 설치합니다 (약 1-2분). 사용자에게 어떤 일이 일어나고 있는지 알려주세요.
-
마지막 줄은
READY PY=<path>입니다. 아래 모든 명령어에 대해 그<path>를 python으로 사용하세요 (PY로 표기). -
NOT READY: ...는 누락된 것과 정확한 해결 방법을 알려줍니다:- ffmpeg: 사용자에게 물어본 후 제공된 설치 명령어를 실행하세요 (Windows는
winget, Mac은brew, Linux는apt). Windows에서는 ffmpeg를 찾기 전에 새 터미널이 필요할 수 있습니다. 그렇다면 사용자에게 Claude Code를 다시 시작하라고 알리세요. - Python 3.9+ 없음: 사용자가 직접 설치(python.org)하고 Claude Code를 다시 시작해야 합니다.
그런 다음 설정을 다시 실행하세요.
- ffmpeg: 사용자에게 물어본 후 제공된 설치 명령어를 실행하세요 (Windows는
-
python명령어가 없나요?python3또는 Windows에서는py를 시도해보세요.
아래 명령어에서 S = ${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts입니다. 모든 경로를 따옴표로 묶으세요. PowerShell에서는 각 명령어를 & 로 시작하세요 (예: & "PY" "S/add_text.py" ...).
규칙
- 출력은 입력 비디오의 크기와 프레임 속도를 유지합니다 (틱톡: 1080x1920). 텍스트 버전을 원본 옆에
<name> (WITH TEXT).mp4로 저장하고, 원본을 절대 덮어쓰지 마세요. - 콘텐츠: 틱톡은 오해의 소지가 있는 주장에 불이익을 줍니다. 절대적인 결과 주장("완치", "3일 안에 고침", "보장")은 피하세요. 참조의 훅이 주장을 할 때는 동일한 리듬과 줄 수로 표현을 조정하고, 변경한 내용과 이유를 사용자에게 알리세요. 확실하지 않으면 물어보세요.
- 입력된 텍스트는 iPhone이 생성하는 것과 같아야 합니다:
...가 아닌…- 참조에서 사용하는 경우 둥근 따옴표
’“ ” - 실제 이모지 문자로 이모지
- 앞뒤 공백이 중요합니다: 틱톡은 공백을 포함하여 각 줄을 중앙에 배치합니다.
fit이 대신 추가해줍니다.
A. 참조 틱톡의 텍스트 복사하기
사용자 비디오 옆에 작업 폴더를 사용하세요. 예: text work/.
- 시작:
"PY" "S/add_text.py" start "REF.mp4" "WORKDIR"- 모든 캡션 출력: 시작/종료 (프레임 정확, 참조 타임라인), 스타일, 채우기 색상 및 상자.
WORKDIR/captions.json을"text": "??"로 작성하고 각 캡션의 확대된 자르기WORKDIR/caption_<n>.png를 생성합니다.- 틱톡 자체의 "TikTok @user" 워터마크는 건너뜁니다.
- 참조를 먼저 다운로드해야 하나요? 설치되어 있다면
yt-dlp가 작동합니다. 그렇지 않으면 사용자에게 파일을 요청하세요.
- 텍스트 채우기. 각 자르기 이미지를 읽고 각
"??"를 교체하세요.- 다른 필드는 그대로 두세요.
_접두사 필드(_ref_t,_bbox_1080, ...)는 finish에서 사용됩니다. - 줄 바꿈은
\n이고, 이모지는 문자입니다. 앞뒤 공백은 신경 쓰지 마세요. - 두 줄 사이의 간격이 일반 간격의 약 두 배라면 빈 줄입니다:
"A\n\nB". - 하나의 캡션에 두 개의 개별 텍스트 상자가 있는 경우 (크기가 매우 다르거나, 큰 간격이 있거나, 같은 x에 중앙 정렬되지 않음): 동일한 시작/종료,
_ref_t및 스타일로 두 항목으로 분할하세요. 각각 고유한_bbox_1080을 지정하세요: 해당 줄의_lines_1080(detect는 각 줄의 상자와 높이를 출력함)에서 나온 선들의 합집합으로, fit이 올바른 텍스트를 보도록 합니다. 예: 1행:[346,1126,735,1167] 및 2+3행 →[346,1126,735,1167]및[204,1272,887,1389]. style이custom/custom_outline으로 반환되었나요? 이 도구에 없는 다른 글꼴, 배경 상자 또는 다른 색상입니다. 사용자에게 알리고 가장 가까운 스타일을 선택하세요. 조용히 추측하지 마세요.- 사용자의 컷이 참조와 다른 경우 여기서 시간을 다시 조정하세요:
start/end를 편집하세요 (초, 종료는 제외). Fit과 check는 여전히 자체 시간(_ref_t)의 참조를 봅니다.
- 다른 필드는 그대로 두세요.
- 마무리:
"PY" "S/add_text.py" finish "REF.mp4" "VIDEO.mp4" "WORKDIR"- 크기, 위치 및 공백을 json에 맞추고
WORKDIR/fit_<n>.png를 작성합니다 (참조가 위, 우리 것이 아래). - 비디오 길이를 초과하는 모든 캡션을 비디오 길이에서 종료합니다.
- 비디오 옆에
VIDEO (WITH TEXT).mp4를 합성합니다 (또는(no text)→(WITH TEXT)). 4번째 인수로 다른 출력 이름을 선택할 수 있습니다. - 결과를 확인하고
WORKDIR/check.jpg를 작성합니다 (참조 왼쪽, 우리 것 오른쪽). - SUMMARY: PASS 또는 REVIEW를 이유와 함께 출력합니다.
- 크기, 위치 및 공백을 json에 맞추고
check.jpg를 보고 완료되었다고 말하기 전에 사용자에게 보여주세요.- "가장자리가 참조와 N px 이내로 일치" 상태에서 낮은 중첩: 크기와 위치가 정확합니다. 압축된 금색 또는 노란색 텍스트는 올바른 경우에도 종종 0.45-0.7 점수를 받습니다. 눈으로 단어만 확인하세요.
- "가장자리가 N px 차이" 상태에서 낮은 중첩: 일반적으로 오타, 줄 바꿈 누락, 잘못된 스타일 또는 분할 후 잘못된
_bbox_1080때문입니다. json을 수정하고 finish를 다시 실행하세요. - 수동으로 조정된 크기/y/x를 유지하려면
--no-fit을 추가하세요.
B. 새 캡션 (참조 없음)
captions.json을 작성하세요:
[{"text": "line one\nline two", "start": 0, "end": 3.5, "style": "outline", "size": 70, "y": 0.5}]
그런 다음 "PY" "S/add_text.py" new "VIDEO.mp4" "WORKDIR/captions.json"을 실행하세요. 텍스트를 합성하고 json 옆에 preview.jpg (캡션당 한 프레임)를 작성합니다. 사용자에게 보여주세요.
- 스타일:
classic(일반 흰색),outline(흰색 + 검은색 외곽선),yellow(옅은),yellow_gold,lilac. - 크기: 약 50 (작게) ~ 85 (크게). 일반적인 훅은 54-77입니다.
- y: 0.4-0.5 = 화면 중간, 0.65 = 하단 1/3. 하단 20% (틱톡의 캡션/UI)와 오른쪽 가장자리 (버튼)을 피하세요.
- 선택 사항:
x(수평 중앙, 기본값 0.5),weight,color(사용자 정의 채우기용 "#RRGGBB"). - 휴대폰으로 입력하는 사람이 하는 것처럼 줄을 나누세요. 크기 70에서 줄은 약 20-28자입니다.
비디오를 렌더링하지 않고 빠르게 보기: "PY" "S/tiktok_text.py" --png "text\nmore" out.png (클래식 스타일).
주의사항
- 일반적인 시간: 시작 약 25초, 캡션 수에 따라 완료 1-3분 (외곽선 캡션이 가장 느림),
--no-fit약 40초. - 이모지: 각 새 이모지는 한 번 다운로드됩니다 (Apple 세트, jsDelivr의 emoji-data CDN). 따라서 처음에는 인터넷이 필요합니다. 다운로드가 실패하면 스크립트가 오류를 발생시킵니다. 이모지를 삭제하지 말고 사용자에게 알리세요.
- 의도적으로 그림자 없음: 실제 틱톡 텍스트에는 그림자가 없습니다. 압축된 참조 옆의 "더 깔끔한" 모양은 예상된 것이며 틱톡이 업로드를 재인코딩하면 사라집니다.
- 2줄만 있는 경우, fit의 공간 수정기는 어느 줄이 중앙에서 벗어났는지 알 수 없습니다.
fit_<n>.png에서 한 줄이 약 5px 이동되었고 중첩이 0.6 미만으로 유지되면 각 줄에 직접 앞 또는 뒤 공백을 추가하고 다시 실행해보세요. - Windows: 다른 Python 스니펫에서 이모지가 이상하게 출력되면
PYTHONIOENCODING=utf-8을 설정하세요. 이 스크립트는 이를 처리합니다.