Communitygithub.com

TikTok風テキスト追加(WakaChobii/tiktok-text)

動画にTikTokのアプリ内テキストツールとまったく同じようにオンスクリーンテキストを焼き付けます(TikTok Sans「クラシック」フォント、白、黒枠付き白、淡い黄色、ゴールドイエロー、ライラック、Apple iPhone絵文字)。

tiktok-text) とは?

このスキルは、動画にTikTokアプリと同一のテキストスタイルを追加する機能を提供します。TikTok Sansフォント(オープンソース)を使用し、6種類のスタイル(プレーンホワイト、アウトライン、イエロー、ゴールドイエロー、ライラック)を正確に再現します。また、Apple iPhone絵文字にも対応しています。主に2つのユースケースがあります。1つは参照TikTok動画からキャプションをフレーム単位で検出・コピーする機能で、ワード、改行、サイズ、位置、タイミングを完全に再現します。もう1つは新規キャプションを作成する機能で、JSONファイルでテキスト、スタイル、サイズ、位置、タイミングを指定します。セットアップは1回限りで、Claude Codeのプラグインデータフォルダ内に隔離されたPython環境を構築します。出力は元の動画の解像度とフレームレートを維持し、元のファイルを上書きすることなく「(WITH TEXT).mp4」として保存します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/WakaChobii/tiktok-text/tree/HEAD/plugins/tiktok-text/skills/add-text

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

動画にTikTokスタイルのテキストを追加する

このスキルのファイルは ${CLAUDE_PLUGIN_ROOT}/skills/add-text/ にあります:

  • scripts/add_text.py:これを使用します。 2つのコマンドでジョブ全体を実行します。
  • scripts/caption_match.py(検出/適合/チェック)と scripts/tiktok_text.py(描画+焼き付け):エンジン部分です。
  • scripts/setup_check.py:初回セットアップとチェックを行います。
  • fonts/:TikTok Sans(オープンソース、OFLライセンス)。

スタイルは実際のアプリ内TikTok動画に対して測定されています。他の方法でテキストをレンダリングしないでください(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を再起動する必要があります。

    その後、セットアップを再度実行します。

  • python コマンドがない場合は? python3 を試すか、Windowsの場合は py を試してください。

以下のコマンドでは、S = ${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts とします。すべてのパスは引用符で囲んでください。PowerShellでは、各コマンドの先頭に & を付けます(例:& "PY" "S/add_text.py" ...)。

ルール

  • 出力は入力動画のサイズとフレームレートを維持します(TikTok:1080x1920)。テキストバージョンは元の動画の隣に <name> (WITH TEXT).mp4 として保存し、元の動画を上書きしないでください。
  • 内容について: TikTokは誤解を招く主張を罰します。「治った」「3日で治る」「保証」などの絶対的な結果主張は避けてください。参照動画のフックが主張を含む場合、同じリズムと行数で表現を調整し、変更内容と理由をユーザーに伝えてください。不明な場合は確認してください。
  • 入力されたテキストはiPhoneで生成されるものと一致している必要があります:
    • ... ではなく …
    • 参照が使用している場合は曲線引用符 ' 「 」
    • 絵文字は実際の絵文字文字として
  • 先頭と末尾のスペースは重要です:TikTokは各行をスペースを含めて中央揃えにします。fit が自動的に追加します。

A. 参照TikTokのテキストをコピーする

ユーザーの動画の隣にワークフォルダを使用します(例:text work/)。

  1. 開始: "PY" "S/add_text.py" start "REF.mp4" "WORKDIR"
    • 各キャプションを表示:開始/終了(フレーム単位、参照タイムライン)、スタイル、塗りつぶし色、ボックス。
    • WORKDIR/captions.json に "text": "??" を、各キャプションのズームクロップ WORKDIR/caption_<n>.png を書き込みます。
    • TikTok自身の「TikTok @user」透かしはスキップします。
    • 最初に参照をダウンロードする必要がありますか? yt-dlp がインストールされていれば機能します。それ以外の場合はユーザーにファイルを依頼してください。
  2. テキストを入力する。 各クロップ画像を読み、各 "??" を置き換えます。
    • 他のフィールドはそのままにします。_ で始まるフィールド(_ref_t、_bbox_1080、...)はfinishで使用されます。
    • 改行は \n で、絵文字は文字です。先頭や末尾のスペースは気にしないでください。
    • 2行が通常の間隔の約2倍離れている場合、それは空白行です:"A\n\nB"。
    • 1つのキャプション内に2つの別々のテキストボックスがある場合(サイズが非常に異なる、大きな隙間がある、同じxで中央揃えされていない):それらを同じ開始/終了、_ref_t、スタイルを持つ2つのエントリに分割します。各エントリに独自の _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(秒、endは排他)を編集します。Fitとcheckは引き続き参照をその時刻(_ref_t)で見ます。
  3. 終了: "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 を理由とともに表示します。
  4. 確認 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" を実行します。テキストを焼き付け、preview.jpg(キャプションごとに1フレーム)をjsonの隣に書き込みます。ユーザーに表示します。

  • style: classic(プレーンホワイト)、outline(ホワイト+黒枠)、yellow(淡い)、yellow_gold、lilac。
  • size: 約50(小)〜85(大)。一般的なフックは54〜77です。
  • y: 0.4〜0.5 = 画面中央、0.65 = 下3分の1。下部20%(TikTokのキャプション/UI)と右端(ボタン)を避けてください。
  • Optional: x(水平中央、デフォルトは0.5)、weight、color(カスタム塗りつぶし用の "#RRGGBB")。
  • スマートフォンで入力する人が行うように行を区切ります。サイズ70の場合、1行あたり約20〜28文字です。

動画をレンダリングせずに簡単に確認するには:"PY" "S/tiktok_text.py" --png "text\nmore" out.png(classicスタイル)。

注意点

  • 典型的なタイミング:開始約25秒、終了1〜3分(キャプション数による。アウトラインキャプションの適合が最も遅い)、--no-fit 約40秒。
  • 絵文字:新しい絵文字はそれぞれ1回ダウンロードされます(Appleセット、emoji-data CDN on jsDelivr)。そのため、初回はインターネット接続が必要です。ダウンロードに失敗した場合、スクリプトはエラーを発生させます。絵文字を省略するのではなく、ユーザーに伝えてください。
  • 意図的に影はありません:実際のTikTokテキストには影がありません。圧縮された参照と比較した「クリーン」な見た目は正常であり、TikTokがアップロードを再エンコードするとなくなります。
  • 2行のみの場合、fitのスペース修正機能はどの行が中央からずれているかを判別できません。fit_<n>.png で1行が約5pxずれて表示され、重複が約0.6未満のままの場合は、各行に自分で末尾または先頭のスペースを追加して再実行してみてください。
  • Windows:他のPythonスニペットで絵文字が奇妙に出力される場合は、PYTHONIOENCODING=utf-8 を設定してください。これらのスクリプトはそれを処理します。

関連スキル