如果你都有呢個問題:寫好咗 AI agent 教學腳本,但懶得逐條片開剪接軟件 export → upload → fill metadata——呢條 production line 就係你嘅答案。
run_production_line.py 係 whynoideas 嘅全自動「腳本→影片→YouTube(unlisted)→批核卡」pipeline。你淨係需要寫一個 markdown 腳本,然後 run 一條 command,就搞掂晒。
呢篇文你會學到
① 由 0 裝起 production line(git clone + pip install)
② 點執行自動生產線(python3 run_production_line.py --max 1)
③ 點樣讀批核卡(approval card)同決定轉 public
④ 常見嘅 stderr 紅線點清
📬 每週收本地 AI 實戰教學 + 成本對比
Step 1:裝起生產線(Install)
🔧 你需要嘅嘢
• Python 3.11+(建議用 uv 或者 pyenv 裝)
• Git(clone repo 用)
• ffmpeg / ffprobe(剪片同檢測片長)
• 一個 Google Cloud Project(開 YouTube Data API v3)
• 一隻本地 GPU(或者用 CPU 行,但 TTS 會慢啲)
首先 clone 個 repo:
git clone https://github.com/whynoideas/content-system.git
cd content-system
然後裝 Python dependencies:
pip install -r requirements.txt
或者用 uv(快好多):
uv sync
下一步要設定 Google OAuth 憑證。你需要在 Google Cloud Console 開一個 project,啟用 YouTube Data API v3,下載 OAuth client JSON,放喺 content_system/ 下。之後第一次 run 會彈 browser 叫你授權。
# 放好 credential file 之後
python scripts/yt_reauth.py
Expected output:
授權成功,token saved to C:\Users\...\google_token.json
Step 2:Run 自動生產線
呢個係核心指令:
python3 run_production_line.py --max 1
--max 1 意思係「最盡做一條片」。預設值都係 1,所以唔加都一樣。如果你想一次過出多條,就改個數字:
python3 run_production_line.py --max 3
條 command 會自動做呢 4 步:
① 搵候選腳本 —— scanning scripts/ 同 scripts_out/ 入面嘅 markdown 檔案(pattern:長片_*.md 或 NN_*.md),按修改時間最新優先。
② TTS 旁白 —— 用 edge TTS(HiuMaanNeural 廣東話聲)生成 mp3 + srt 字幕。
③ 自動剪片 —— 用 make_video.py 將 TTS + 字幕 + 背景合併做 mp4。
④ YouTube unlisted 上載 —— 用 yt_upload_longform.py 上載,privacy 設定為 unlisted(⛔ 紅線:永遠唔直接 public)。
預期輸出
── 生產線 2026-10-18 14:30 ──
VIDEO sme_automation 420s 128.3MB sme_automation.mp4
UPLOADED sme_automation unlisted https://youtu.be/AbCdEfGhIjK card=approval_cards/sme_automation.md
(共出片 1、上載 unlisted 1)
見到呢個 output 代表成功。如果係 empty output(乜都冇 print),代表冇新腳本要出——所有已出嘅片都已經上載咗,供應鏈飽和。
常見選項
| Flag | 用途 |
|---|---|
--only <slug> | 指定處理某一條片(按 filename slug) |
--no-upload | 只出片,唔上載(本地驗證用) |
--force | 強制重新出片,即使 upload_log 已有記錄 |
--cap 4 | unlisted 庫存上限(達到就停,預設 4) |
⚠️ stderr 紅線你需要注意
如果你見到 stderr 有 inventory check skipped: ...,呢個係 YouTube API 撈庫存時 fail(常見原因:token 過期 / network 問題)。唔影響出片流程,production line 會繼續行。真正嘅錯誤會以 FAIL tts、FAIL video、FAIL upload 開頭 print 喺 stdout,呢啲先要睇。
另一條常見 stderr:WARNING:ffprobe ... 係 ffprobe 版本相容 warning,直接 ignore 就得。
Step 3:讀批核卡(Approval Card)
上載成功後,pipeline 會自動喺 content_system/approval_cards/ 生成一個 .md 檔案。filename 係 script slug + .md。
打開佢會見到類似咁嘅內容:
# 🚦 待批核:轉 public
- 片:sme_automation
- 檔:.../video/sme_automation.mp4(420s)
- YouTube(unlisted):https://youtu.be/AbCdEfGhIjK
- 腳本:.../scripts_out/長片_sme_automation_20261016.md
- 標題:中小企 AI 自動化實戰:3 個慳時間嘅真實場景
👉 回覆「要」=轉 public;唔回=保持 unlisted。
批核卡嘅作用:
• 標明片嘅 slug、實際片長、檔案大細
• YouTube link(unlisted)可以直接睇成品
• 腳本路徑方便對照
• 最終決定權:你回「要」先轉 public,唔回就 keep unlisted
呢個機制確保咗一條紅線:任何出街嘅片都經過人嘅批核,production line 唔會自己決定公開。安全閘門。
📌 如果冇批核卡出現
可能原因:① --no-upload 冇上載所以唔出卡 ② YouTube API quota 爆咗(每日 10,000 units,一條片 upload 用 ~1,600 units) ③ 上載失敗(睇 FAIL upload log)。試 run 少啲次數,或者用 python3 -X utf8 run_production_line.py --only <slug> 逐條試。
完整 Workflow 圖
Markdown 腳本
│
▼
TTS(edge HiuMaanNeural 廣東話)→ mp3 + srt
│
▼
make_video.py → 自動剪片 → mp4
│
▼
yt_upload_longform.py → YouTube unlisted
│
▼
approval_cards/[slug].md ← 你睇,回「要」就 public
4 條 rule of thumb
- 每日 quota 有限:YouTube API 每日 10K units,upload 一條 ~1,600 units。一日 max 5-6 條 upload。check quota 用
https://console.cloud.google.com/apis/api/youtube.googleapis.com/quotas - unlisted 上限 4 條(
--cap 4):達到上限後 pipeline 會自動靜默,唔再出新片——等人批完先繼續。 - TTS 好食 CPU:一條 7 分鐘片嘅 TTS 大約 5-8 分鐘生成。用 GPU 機(如 ROG NUC)會快好多。
- stderr 唔等於 fail:production line 嘅真正錯誤會以
FAIL開頭出現喺 stdout。stderr 通常係 warning(token refresh、ffprobe version),直接 ignore。
📬 每週收本地 AI 實戰教學
Subscribe 免費 AI Tools Master List 2026,每週收到本地 AI 部署技巧、成本對比、香港 SME 實戰案例。
相關文章:
→ 2026 本地 AI 工具深度實測:5 款工具逐個 benchmark
→ Build in Public:香港 Creator 嘅產品工廠模型
→ AI Agent 學習路徑 4 選