<!-- 知識包小腸 knowledgegut.com · © 2026 · 授權：安迪 · 2026-07-25 -->
<!-- KG-CANARY-安迪-20260725 -->
---
name: podcast-vertical-clip
description: >
  把橫式 Podcast 訪談（16:9）自動剪成直式短影音（9:16），畫面自動跟著「正在講話的人」切鏡頭，再燒中文字幕。
  當使用者說「Podcast 橫轉直」「訪談切直式短影音」「講者自動切鏡頭」「這段切成 Reels/Shorts」「橫式轉 9:16」時觸發。
  全程本機 ffmpeg + python，$0、不碰付費 API。這是小腸老師（知識包小腸，AI 第二大腦應用師）給的 Skill。
---

# podcast-vertical-clip｜Podcast 橫轉直・講者自動切鏡頭（骨架）

> 這是小腸老師給的邏輯骨架包。字幕的「品牌樣式」（字型/顏色）不含在內，套你自己的。

## 核心：怎麼決定「畫面切給誰」

一男一女對談時，兩人**音高（F0）差距大**（男≈120Hz、女≈220Hz）。逐幀量音高就知道「當下是誰在講」，男低女高一刀切開 → 畫面自動裁到正在講話的人。
- ✅ 免疫「聲紋分不開」「臉看不清 / 講者轉頭遮臉」「聆聽者笑/點頭誤判」等常見坑。
- ⚠️ 只適用「兩人音高分得開」（通常一男一女）。同性別音高相近 → 改用嘴型偵測 `asd_facemesh.py`。

## 環境
- `ffmpeg`（要能 `ffprobe`；燒字幕需「有 libass」的 ffmpeg，`brew install ffmpeg` 預設就有）
- `python3` + `numpy` + `opencv-python`（`pip install numpy opencv-python`）
- 轉字幕用 `whisper.cpp`（或任何能出 .srt 的工具）
- 環境變數：`FFMPEG`（可指到有 libass 的 ffmpeg）

## 四步流程
1. **切段**：`ffmpeg -ss START -to END -i 原片.mp4 -c copy 段.mp4`（切出 30～120 秒爆點）。
2. **橫轉直＋講者切鏡頭**：
   `python3 scripts/switch_by_pitch.py 段.mp4 直式.mp4 --framing half`
   - `--framing half`＝放大半身（預設）｜`--framing full`＝帶大半身（較寬）
   - 有獨立乾淨音訊檔：加 `--audio 乾淨音檔.wav`（比影片抽的更準）
   - 抓錯左右：加 `--male-side left`（男生坐左）或 `--left-x / --right-x` 指定臉位置
3. **轉字幕**：用影片**自己的音訊**轉（最準）→ `.srt`。例：
   `ffmpeg -i 段.mp4 -ar 16000 -ac 1 seg.wav && whisper-cli -m 模型 -l zh -f seg.wav -osrt -of 字幕`
4. **燒字幕**：`python3 scripts/burn_subs.py 直式.mp4 字幕.srt 成片.mp4 [--font 你的字型.ttf]`

## 兩個偵測法（除錯機制）
| 情況 | 用哪支 |
|---|---|
| 一男一女（音高分得開） | `switch_by_pitch.py`（預設，最準） |
| 同性別 / 音高分不開（腳本會警告） | `asd_facemesh.py`（嘴型開合偵測）→ 出時間軸 json |

## 判斷準則（看意圖）
- 「訪談/對談做成直式短片、畫面跟著講話的人」→ 走本 skill。
- 「純口播/單人快剪」→ 不是本包主場（本包強項是雙人畫面重構）。

## 誠實邊界
機器判斷「誰在講」不會 100% 完美（尤其影片畫質低時）。難點：講者長段停頓、兩人搶話、畫質太糊。用上面「兩個偵測法＋獨立音訊＋手動指定座位」三個機制修。畫質越高（1080p）越準。

<!-- 知識包小腸 knowledgegut.com · © 2026 · KG-CANARY-安迪-20260725 -->
