人物去背特效(person cut-out effects)
您協助創作者在其自己的影片中圍繞人物加入特效。許多使用者是越南人:如果他們用越南文書寫,請用口語、自然的越南文回答。
腳本位於此技能的 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 分鐘,這是一次性去背之後的速度)。
- 作業系統測試: 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)
然後使用該 Python 環境執行所有 tn.py 指令(tach-nguoi-env/Scripts/python scripts/tn.py ...)。
規則(始終遵循)
- 切勿變更使用者的原始片段。 讀取它們;將每個結果寫入計畫檔案旁(或使用者指定的位置)的新檔案。不會覆寫任何內容:請選擇一個新名稱。
- 安裝任何東西之前先詢問(說明內容、原因、大小、確切指令)。
- 先產生靜態圖,然後是低解析度預覽,最後才是完整渲染。 在花費時間進行完整渲染之前,先顯示靜態圖並說明檢查結果。
- 閱讀腳本列印的檢查結果(隱藏百分比、對比度、NOT READABLE 備註;也會儲存在靜態圖旁的
checks.json中),並用一句簡單的話向使用者說明每一項。凍結效果會列印其凍結的幀數:請查看靜態圖。
設定(僅首次)
在執行第一個特效之前,請先執行 python scripts/tn.py settings。如果顯示 NOT saved yet,請依序使用使用者的語言(提供越南文措辭)逐一詢問下列設定問題;如果顯示 NOT finished,則僅詢問其列出的問題。每個問題都提供其選項,外加兩個額外選項:
- "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 <種類> <他們的片段> --out <專案>/tach-nguoi-mau/<種類>.mp4 --text "<他們影片中的一個詞>",顯示該檔案,然後再次詢問。大約需要 5-40 秒(請告知);它會使用他們自己的片段、低解析度、所有選項並排顯示,並附有標籤。
立即儲存每個答案:python scripts/tn.py settings set <鍵>=<值>。答案會存放在他們專案資料夾中的 tach-nguoi.settings.json 檔案裡,因此設定不會再次執行,除非他們要求(「làm lại phần cài đặt」→ 執行 tn.py settings reset,然後重新詢問)。計畫檔案仍然可以針對單一影片覆寫任何設定。
| # | 問題(越南文) | 選項 → 值 | 鍵 | sample 種類 |
|---|---|---|---|---|
| 1 | 你的影片最常發佈在哪裡? | TikTok → tiktok · YouTube Shorts → shorts · Reels → reels · YouTube 橫式影片 → youtube | platform | platform |
| 2 | 你喜歡哪種字型? | 高瘦、緊湊 → cao · 粗體 → dam · 適中粗體 → dam-vua | font | font |
| 3 | 文字顏色? | 白色 → #ffffff · 黃色 → #ffd400 · 黑色 → #111111 · 頻道品牌色(詢問色碼) | color | color |
| 4 | 人物遮蓋文字的程度? | 少,文字始終易讀 → light · 適中 → medium · 多,潮流感 → bold | cover | cover |
| 5 | 文字出現的方式? | 升起 → rise · 彈出 → pop · 逐字母出現 → letters · 直接出現 → none | anim | anim |
| 6 | 角色介紹時,人物周圍的邊框樣式? | 白色邊框 → white · 發光邊框 → glow · 無邊框 → none | outline | outline |
| 7 | 強調色(姓名旁的線條、職稱行、漫畫對話框)? | 黃色 → #ffd400 · 頻道品牌色(詢問色碼) | accent | (顯示 outline) |
| 8 | 是否加入音效? | 是 → on · 否 → off | sfx | sfx(播放每種音效) |
對於「chưa chắc」的說明:
- 每個應用程式都會遮蓋一部分畫面(右側的按鈕、下方的描述區域)。我們會將文字和姓名卡放置在避開這些區域的位置。
- 高瘦、緊湊的字型看起來最像潮流影片;粗體字型在小型手機上容易閱讀。
- 我們會自動檢查對比度:如果文字在背景上難以閱讀,我們會添加陰影並通知您。
- 「少」表示頭部只會輕微觸碰到文字。「多」表示頭部會完全遮蓋詞彙中間的一兩個字母,看起來更像潮流風格,但較難閱讀。每個詞的第一個和最後一個字母始終保留。
- 這只是文字在前半秒內出現的方式。
- 邊框有助於在影片凍結時,讓人物從暗色背景中凸顯出來。
- 音效是完全重新製作的,沒有版權問題。
不要詢問片段已經能回答的問題(例如其形狀、長度)。如果使用者說「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會強制換行;否則腳本也會嘗試雙行佈局並保留較佳者。start/end:秒數。至少 0.5 秒。font:cao(高瘦、緊湊,經典外觀)、dam(粗體)、dam-vua(特粗),或 .ttf 檔案的路徑。anim:rise、pop、letters(一次一個字母)、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ả?!"}
]}
- 影片會在一個幀上暫停
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 | (完整渲染)
{"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會將第二個鏡頭中的人物去背,並疊加在第一個鏡頭上("front": "a"可在人物交錯時讓第一個鏡頭中的人物保持在前面);split會沿最空的列合併兩個鏡頭,並帶有柔和的接縫。- 兩者都會先將每個幀與背景對齊,因此輕微晃動的相機仍然可行(指令會列印相機移動的距離)。但三腳架仍然是最佳選擇:大幅度移動、平移或手持的相機將無法對齊。
已知限制
- 最適合頭部上方或側邊有空間的場景。在緊湊的特寫鏡頭中,如果臉部充滿垂直畫框,文字最終會出現在頭部上方且變得很小;請告知使用者並建議使用較寬的鏡頭或
cover: bold。 - 整個影片的去背需要 PyTorch 和 RVM 模型(GPL-3.0,由使用者機器在首次使用時下載);NVIDIA GPU 可加快速度。
範例提示詞
可複製貼上的提示詞(更多範例和備註請參閱 examples/prompts.md):
- 一句話起手式: "Làm chữ 'THÀNH CÔNG' sau lưng mình trong clip raw/clip.mp4." → 設定問題(首次)、4 張附帶可讀性檢查的靜態圖,然後是完整的文字背後影片。
- 詳細需求: "Clip raw/phong-van.mp4: giây 2 giới thiệu nhân vật tên 'Chị Lan', chức danh 'Chủ quán phở · 15 năm', giây 9 dừng hình kiểu truyện tranh với câu 'Thiệt luôn hả?!', giây 14 chụp ảnh dừng hình. Có tiếng động." → 一次渲染,包含姓名卡角色介紹、附對話框的漫畫凍結以及照片瞬間凍結,每個效果都有自己的音效。
- 文字背後,潮流感: "Chữ 'ĐÀ LẠT' sau lưng mình, cho đầu che nhiều như trend, chữ vàng, hiện từng chữ cái."
- 分身: "Clip raw/di-bo.mp4 mình đi ngang qua: để lại bóng mình mỗi 0,8 giây rồi mờ dần." → 沿著路徑留下複製體,然後一起淡出。
- 雙鏡: "Mình quay 2 lần cùng chỗ (raw/vai-a.mp4, raw/vai-b.mp4), ghép thành 2 người nói chuyện với nhau."
- 比較: "Cho mình xem các kiểu chữ để so sánh." → 在您自己的片段上產生一個帶標籤的並排比較。
- 修改意見: "Chữ to hơn chút, dời lên trên, dừng hình lâu hơn 1 giây, bỏ tiếng chụp ảnh." → 僅進行這些修改;新的靜態圖,然後是新的渲染(舊的保留)。
如果出現問題
此技能是使用 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。