Hiệu ứng tách người (人物切り抜きエフェクト)
クリエイターが自分のビデオ内の人物の周りにエフェクトを配置するのを支援します。多くのユーザーはベトナム語話者です。ユーザーがベトナム語で書いた場合は、平易な話し言葉のベトナム語で回答してください。
スクリプトはこのスキルの scripts/ フォルダにあります。ユーザー自身のフォルダで作業しているときに、フルパス(またはスキルのフォルダから)で実行してください。設定ファイルとすべての出力はユーザーのフォルダに配置され、スキルフォルダには決して置かれません。
要件と制限
何かをインストールする前、およびリクエストに不足しているものがある場合には、これらをユーザーに伝えてください。
python scripts/tn.py check で現在の状態を確認できます。
- 必要: 有料のClaudeプランとClaude Code、ffmpeg、Python 3.10+(
numpy、opencv-python、pillow)。 切り抜きには PyTorch(約2-3 GB、専用のPython環境が最適)とRVMモデルが必要で、PyTorchは最初の切り抜き時にGitHubから一度だけダウンロードします(約15-100 MB)。 - GPU: NVIDIAカードを強く推奨します。GPUを使用すると、切り抜きは約35-50フレーム/秒で動作します。CPUでは約20-50倍遅くなります(30秒のクリップで10-20分かかる場合があります)。すべてのエフェクトはどちらの場合でも動作します。
- 速度(テスト済み、RTX 4080): 静止画は数秒、1080pでのフルレンダリングは、テキスト背後とクローンで18-27 fps、フリーズエフェクトで9-19 fps(20秒のクリップで約1-2分、最初の一回限りの切り抜き後)。
- テスト済みOS: Windows 10(すべてのコマンド)。macOS: 未テスト(NVIDIA GPUがないため、切り抜きが遅い)。
- 制限: 一人または二人で、頭の上や横にスペースがある場合に最適です。縦にタイトなクローズアップではテキストが小さくなります。速い動き、背景が込み入っている場合の髪の毛、透明なオブジェクトはエッジが粗くなることがあります。クローンには三脚またはほぼ静止したカメラが必要です。ツーテイククローンは、両方のテイクが同じ場所から撮影されている必要があります。
- なしでは動作しないもの: PyTorchがないと、どのエフェクトも実行できません(すべてのエフェクトに切り抜きが必要です)。その場合は伝え、インストールを提案してください(事前に許可を得ること)。
- プライバシー: すべてユーザーのコンピュータ上で実行されます。ダウンロードされるのはRVMモデルのみで、一度だけです。
PyTorchのインストール(事前に許可を得てください。約2-3 GBであることを伝えてください)
他のPythonツールを壊さないように、別の環境で行ってください:
python -m venv tach-nguoi-env
tach-nguoi-env/Scripts/python -m pip install numpy opencv-python pillow (macOS/Linux: tach-nguoi-env/bin/python)
tach-nguoi-env/Scripts/python -m pip install torch --index-url https://download.pytorch.org/whl/cu126 (NVIDIA GPU)
tach-nguoi-env/Scripts/python -m pip install torch (NVIDIA GPUなし)
その後、すべての tn.py コマンドをそのPythonで実行してください(tach-nguoi-env/Scripts/python scripts/tn.py ...)。
ルール(常に)
- ユーザーの元のクリップを決して変更しないでください。 それらを読み込み、すべての結果はプランの隣(またはユーザーが指定した場所)に新しいファイルとして書き込みます。何も上書きしません。新しい名前を選んでください。
- 何かをインストールする前に許可を求めてください(何を、なぜ、どのくらいのサイズか、正確なコマンドを伝えてください)。
- 最初に静止画、次に低解像度プレビュー、最後にフルレンダリングを行います。 フルレンダリングに時間をかける前に、静止画を表示し、チェック結果を伝えてください。
- スクリプトが出力するチェック結果(隠れた%、コントラスト、NOT READABLE の注記、静止画の隣の
checks.jsonにも保存されます)を読み、ユーザーに平易な一文でそれぞれ伝えてください。フリーズエフェクトは、どのフレームでフリーズしたかを出力します。静止画を確認してください。
セットアップ(初回のみ)
最初のエフェクトの前に、python scripts/tn.py settings を実行します。NOT saved yet と表示された場合は、以下のセットアップ質問を 一つずつ、ユーザーの言語(ベトナム語の表現が指定されています)で尋ねてください。NOT finished と表示された場合は、リストにあるものだけを尋ねてください。各質問には、選択肢に加えてさらに2つが用意されています:
- "Mình chưa chắc, giải thích giúp mình": 選択肢によって何が変わるかを平易な一文か二文で説明し、再度尋ねてください。
- "Cho mình xem hết để so sánh":
python scripts/tn.py sample <kind> <their clip> --out <project>/tach-nguoi-mau/<kind>.mp4 --text "<a word from their video>"を実行し、ファイルを表示してから、再度尋ねてください。これには5〜40秒かかります(その旨伝えてください)。ユーザー自身のクリップを低解像度で使用し、すべてのオプションを並べてラベル表示します。
各回答はすぐに保存します:python scripts/tn.py settings set <key>=<value>。回答はプロジェクトフォルダ内の tach-nguoi.settings.json に保存され、ユーザーが依頼しない限り(「làm lại phần cài đặt」→ tn.py settings reset、その後再度質問)、セットアップが再実行されることはありません。プランは、1つのビデオに対して任意の設定を上書きできます。
| # | 質問(ベトナム語) | オプション → 値 | キー | サンプル種類 |
|---|---|---|---|---|
| 1 | Video của bạn đăng ở đâu nhiều nhất? | TikTok → tiktok · YouTube Shorts → shorts · Reels → reels · YouTube video ngang → youtube | platform | platform |
| 2 | Bạn thích kiểu chữ nào? | Chữ cao, gọn → cao · Chữ đậm → dam · Đậm vừa → dam-vua | font | font |
| 3 | Chữ màu gì? | Trắng → #ffffff · Vàng → #ffd400 · Đen → #111111 · Màu của kênh (hỏi mã màu) | color | color |
| 4 | Người che chữ tới mức nào? | Ít, chữ lúc nào cũng dễ đọc → light · Vừa → medium · Nhiều, kiểu trend → bold | cover | cover |
| 5 | Chữ hiện ra kiểu nào? | Trồi lên → rise · Bật ra → pop · Hiện từng chữ cái → letters · Hiện luôn → none | anim | anim |
| 6 | Lúc giới thiệu nhân vật, viền quanh người kiểu nào? | Viền trắng → white · Viền phát sáng → glow · Không viền → none | outline | outline |
| 7 | Màu điểm nhấn (vạch cạnh tên, dòng chức danh, hộp chữ truyện tranh)? | Vàng → #ffd400 · Màu của kênh (hỏi mã màu) | accent | (show outline) |
| 8 | Có thêm tiếng động không? | Có → on · Không → off | sfx | sfx (plays each sound) |
「chưa chắc」の場合の説明:
- 各アプリは画面の一部を隠します(右側のボタン、下部の説明)。文字と名前カードはそれらの場所を避けて配置します。
- 文字が高くコンパクトなものは、最もトレンドのビデオのように見えます。太字は小さなスマートフォンの画面で読みやすいです。
- コントラストを自動的にチェックします。背景に対して読みにくい場合は、影を追加して通知します。
- 「Ít」では、頭が文字に少し触れるだけです。「Nhiều」では、頭が単語の中央の1〜2文字を完全に隠し、よりトレンドのように見えますが、読みにくくなります。各単語の最初と最後の文字は常に保持されます。
- これは、最初の0.5秒間の文字の出現方法にすぎません。
- 縁取りは、ビデオが停止したときに人物が暗い背景から浮かび上がるのに役立ちます。
- 効果音は完全に新規に生成され、著作権はありません。
クリップ自体がすでに答えていること(形状、長さ)については質問しないでください。ユーザーが「cứ làm đi」または「mặc định」と言った場合は、python scripts/tn.py settings defaults を実行し(tiktok、cao、白、medium、rise、white、黄色のアクセント、サウンドオン)、次に進んでください。
コマンド
すべてのコマンドは、パッケージがインストールされたPythonで実行します(python scripts/tn.py check を参照)。
python scripts/tn.py check # インストール状況、GPU、RVMモデル
python scripts/tn.py behind plan.json --out out/clip.mp4 --stills # テキストごとに4枚の静止画 + チェック(高速)
python scripts/tn.py behind plan.json --out out/clip.mp4 --preview # 半分のサイズ、テキストの範囲のみ -> out/clip.preview.mp4
python scripts/tn.py behind plan.json --out out/clip.mp4 # フルレンダリング、元の音声を保持
クリップでの最初の実行では、クリップ全体から人物を切り抜き(RTX 4080で約50 fps)、出力の隣の _tach-nguoi-work/ にキャッシュします。
プランファイル(あなたが作成します)
{"clip": "raw/my-clip.mp4",
"items": [{"text": "Thành công", "start": 1.0, "end": 7.0,
"font": "cao", "color": "#ffffff", "anim": "rise", "cover": "medium"}]}
text: ベトナム語も可能です(任意の入力形式。正規化されます)。"upper": falseが指定されていない限り、大文字で表示されます。\nは2行を強制します。それ以外の場合、スクリプトは2行レイアウトも試行し、より良い方を採用します。start/end: 秒単位。少なくとも0.5秒。font:cao(背が高くコンパクト、クラシックな外観)、dam(ヘビー)、dam-vua(エクストラボールド)、または.ttfファイルへのパス。anim:rise、pop、letters(一度に1文字ずつ)、none。すべてのテキストは0.25秒かけてフェードアウトし、存続期間中に3%押し込みます("drift": 0で無効化)。cover: 人物がテキストを覆う程度。light(常に読みやすい)、medium(デフォルト)、bold(ヘビーなトレンドルック)。- オプション:
x、y(0-1の中心、手動で配置する場合)、width(フレーム幅に対する割合)、shadow(0-1のグロー、コントラストチェックから自動設定)。
配置は自動です。テキストが頭の後ろに収まり、各単語の最初と最後の文字が可視状態を保ち、かつプラットフォームのセーフエリア内(9:16ではトップバー、右側のボタン、下部のキャプション領域を避ける)に収まる、最大のサイズと位置が選択されます。
フリーズフレームエフェクト
python scripts/tn.py freeze plan.json --out out/clip.mp4 --stills # フリーズごとのキー静止画(高速)
python scripts/tn.py freeze plan.json --out out/clip.mp4 --preview # 半分のサイズ -> out/clip.preview.mp4
python scripts/tn.py freeze plan.json --out out/clip.mp4 # フルレンダリング
{"clip": "raw/my-clip.mp4",
"items": [
{"effect": "intro", "at": 2.0, "name": "Anh Tuấn", "role": "Đầu bếp · 20 năm nghề", "outline": "white", "color": "#ffd400"},
{"effect": "snap", "at": 8.5},
{"effect": "comic", "at": 13.2, "caption": "Ủa, thiệt hả?!"}
]}
- ビデオは1つのフレームで
hold秒間 一時停止 し(デフォルト: intro 2.4、snap 1.6、comic 1.8)、その後続行します。クリップはホールドの分だけ長くなります。元の音声も一時停止し、エフェクト独自の効果音が再生されます(スクラッチから作成、ライセンス不要。"sfx": falseでオフ、"sfx_gain"でスケーリング)。 atはソースクリップ内の時間です。スクリプトは ±0.25秒以内で最もシャープなフレーム でフリーズします(モーションブラーなし)。"exact": trueで正確なフレームを保持します。人物の顔がはっきりと見える瞬間(名前が呼ばれたとき、大きなリアクション、ポーズ)を選んでください。intro: 背景が暗くなり灰色になり、人物が6%前方に飛び出し(white、colorのglow、またはnoneの輪郭線)、名前カードが人物から離れた側からスライドインします。nameは大文字で表示され、roleはcolorで表示されます。snap: ホワイトフラッシュ+シャッター音、フレームが縮小して傾いた印刷写真になり、ぼかした背景の上に表示されます。comic: フラットな色、インクの線、ハーフトーンドット、人物の背後にちらつくスピード線、オプションのcaptionボックス(colorでボックスの色を設定)。
クローン(phân thân)
python scripts/tn.py clone plan.json --out out/clip.mp4 --stills | --preview | (full)
{"clip": "raw/walk.mp4",
"items": [{"effect": "trail", "start": 6.3, "end": 13.0, "every": 0.8, "style": "fade", "fade": 0.6}]}
trail(ワンテイク): 人物が動いている間、startからendの間、every秒ごとにコピーが残され、その後、すべてのコピーがfade秒かけてフェードアウトします。動いている 人物のみがコピーされます(じっと立っている人はそのまま残されます)。style:fade(古いコピーほど薄くなる)、solid、ghost(半透明、半分グレー)。各コピーが現れるときにソフトなフラッシュ音が再生されます(プランのトップレベルで"sfx": falseとするとオフになります)。two(ツーテイク、一人が二役):{"effect": "two", "second": "raw/take2.mp4", "start": 0, "end": 10, "b_start": 0, "mode": "overlay"}。overlayはテイク2から人物を切り抜き、テイク1の上に重ねます("front": "a"は交差する場所でテイク1の人物を手前に保ちます)。splitは2つのテイクを、最も空いている列に沿ってソフトな継ぎ目で結合します。- どちらも、すべてのフレームをまず背景に合わせるため、多少のカメラの動きがあっても機能します(コマンドはカメラの移動距離を出力します)。それでも三脚が最適です。大きな動きのあるカメラ(移動、パン、ハンドヘルド)は位置合わせができません。
既知の制限
- 頭の上または横にスペースがある場合に最適に機能します。顔が縦フレームを埋め尽くすようなタイトなクローズアップでは、テキストが頭の上に小さく表示されます。その場合は、より広いショットまたは
cover: boldを提案してください。 - 全編ビデオの切り抜きには、PyTorchとRVMモデル(GPL-3.0、初回使用時にユーザーのマシンがダウンロード)が必要です。NVIDIA GPUを使用すると高速になります。
プロンプトの例
コピー&ペースト用プロンプト(詳細は examples/prompts.md にあり):
- ワンライナースターター: 「raw/clip.mp4 で 'THÀNH CÔNG' というテキストを自分の後ろに配置して。」 → セットアップの質問(初回)、4枚の静止画と読みやすさチェック、その後、テキストが背後にあるフルクリップ。
- 詳細な指示: 「raw/phong-van.mp4: 2秒目に 'Chị Lan' という名前、役職 'Chủ quán phở · 15 năm' でキャラクター紹介、9秒目に 'Thiệt luôn hả?!' というセリフのコミック風フリーズ、14秒目にスナップショットフリーズ。効果音あり。」 → 名札付きイントロ、吹き出し付きコミックフリーズ、写真スナップの3つのエフェクトを、それぞれの効果音とともに1つのレンダリングにまとめたもの。
- テキスト背後、トレンド風: 「'ĐÀ LẠT' というテキストを自分の後ろに、トレンドのように頭が多く覆うように、黄色のテキスト、一文字ずつ表示。」
- クローン: 「raw/di-bo.mp4 で自分が横切るシーン: 0.8秒ごとに影を残して、徐々にフェードアウト。」 → あなたの歩いた軌跡に沿ってコピーが残り、一緒にフェードアウトします。
- ツーテイク: 「同じ場所で2回撮影しました(raw/vai-a.mp4、raw/vai-b.mp4)。2人が会話しているように合成して。」
- 比較: 「比較のためにフォントスタイルを見せて。」 → 自分のクリップでラベル付きの並べ替え表示。
- 修正指示: 「テキストをもう少し大きくして、上に移動、フリーズ時間を1秒長く、スナップの音を削除。」 → それらの変更のみ。新しい静止画、次に新しいレンダリング(古いものは保持されます)。
何か問題が発生した場合
このスキルはClaude Codeを使用して構築されているため、バグがある可能性があり、すべてのコンピュータは異なります。ステップが失敗した場合、またはユーザーが結果が正しくないと言った場合:
- 平易なベトナム語で説明してください: 何が失敗し、なぜかを、一文か二文で説明します。求められない限り、生のスタックトレースは表示しないでください。
- このスキルと関連するスクリプト(
scripts/tn.pyとエフェクト用のtn_*.pyファイル)を読んでください。不足しているものがある可能性がある場合は、python scripts/tn.py checkを実行してください。 - 修正して再実行し、新しい出力ファイルを作成してください。修正中であっても、ユーザーのクリップには決して触れたり上書きしたりしないでください。
- 原因がこのスキル自体にあった場合は、その旨を伝え、全員のために修正されるように報告することを提案してください: https://github.com/thegentleminh/thegentleminh-skills/issues
よくある失敗
No module named 'torch': コマンドを実行したPythonにPyTorchがインストールされていません。tach-nguoi-env環境のPythonを使用するか、PyTorchをインストールしてください。