Communitygithub.com

cassieliang6709/video-publish

將製作完成的影片發布到自媒體平台(以 B 站為主,YouTube / 抖音 / 快手 / 小紅書為輔):準備標題/簡介/標籤/封面,逐條給用戶確認後上傳,返回 BV 號。當用戶說「上傳 B 站」「傳 YouTube」「發抖音」「發快手」「發小紅書」「投稿」「發布影片」時使用。通常接在 tech-explainer-video 之後。

video-publish 是什麼?

此技能專為 AI 代理設計,用於將影片自動化發布到多個自媒體平台,主要支援 B 站,此外也涵蓋 YouTube、抖音、快手和小紅書。其主要功能是協助準備標題、簡介、標籤與封面等元數據,並在每次發布前將這些資訊以表格形式呈現給用戶,確保用戶明確批准後才執行上傳動作。此技能支援多種上傳方式:B 站使用 dreammis/social-auto-upload 工具,支援分 P 稿件與追加分 P,並提供線路探測與網路故障排除指引;YouTube 可選擇瀏覽器自動化或 API 方案(需 Google Cloud 設定),並能處理每日上傳上限與重複草稿問題;抖音、快手與小紅書則依賴 patchright 瀏覽器自動化,但登入與上傳命令必須由用戶在終端機中手動執行,以確保帳號安全與驗證碼處理。技能還內建批次流水線模式(需用戶授權),可自動完成渲染後的連續上傳與清理,並記錄每集 BV 號回寫至 upload_meta.md。整體上,這是一個高度互動、注重使用者確認與平台規範的專業發布工具。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/cassieliang6709/video-skills/tree/HEAD/skills/video-publish

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

影片發布(B 站 / YouTube / 抖音 / 快手 / 小紅書)

鐵律

  • 每一條發布前,將平台、帳號、檔案、封面、標題、簡介、標籤、分區、發布方式列成表格給用戶,用戶明確說「發」才執行。 用戶可以一次批准多條(例如「EP2–EP4 都發」),但只涵蓋當時列出的那幾條和那些內容;內容有任何改動都要重新確認。
  • 登入只能由用戶自己進行(終端掃碼)。不替用戶輸入帳號、密碼、手機號、驗證碼,不讀取或列印 cookie 內容。
  • 抖音、快手、小紅書的 sau 上傳基於 patchright(隱藏自動化痕跡的瀏覽器)。用戶決定使用它,但由用戶在自己的終端裡執行上傳命令: Claude 負責準備好完整命令和投稿資訊,不自己執行這幾個平台的 login / upload,也不替用戶處理滑塊驗證碼。

準備

  1. 發布前先過一遍 tech-explainer-video 的 references/plotome-lessons.md 合規清單:勾選「含 AI 生成內容」(旁白是 AI 也要勾)、音樂授權和署名寫進簡介、不使用真人臉和商標。
  2. 按照 references/upload-meta-template.md 撰寫 out/upload_meta.md。簡介只寫影片裡確實提到的內容,開頭加上「自用學習筆記。」(用戶偏好)。
  3. 封面:1920×1080、沒有字幕;由 tech-explainer-video 的 cover-epK composition 產生。
  4. 發送給用戶審閱(SendUserFile),問清楚:封面、是否需要程式碼連結(GitHub/Gist)、合集名稱。

B 站

工具:dreammis/social-auto-upload(安裝在 ~/tools/social-auto-upload),實際投稿使用它自動下載的 biliup。

首次安裝(先告知用戶來源、內容和大小,等用戶同意再裝):

git clone --depth 1 https://github.com/dreammis/social-auto-upload.git ~/tools/social-auto-upload
cd ~/tools/social-auto-upload && uv venv --python 3.12 && uv pip install -e . && uv pip install playwright
cp conf.example.py conf.py

登入(讓用戶在自己的終端裡執行,選單選擇「掃碼登入」,用 B 站 App 掃碼;二維碼顯示不全就打開 qrcode.png):

cd ~/tools/social-auto-upload && .venv/bin/sau bilibili login --account <帳號名>

不要選擇簡訊登入:它會要求處理滑塊驗證碼並手動抄寫 challenge,很容易過期失敗。 檢查登入:.venv/bin/sau bilibili check --account <帳號名>,輸出 valid 即可。

上傳:

  1. 先測試線路:tools/probe_lines.sh,取速度最快的那條(通常 tx 或 bda2)。不要讓 biliup 自動測速,經過代理時會卡住。
  2. 逐條投稿:
    ~/.claude/skills/video-publish/tools/bili_upload.sh <帳號名> out/ep1.mp4 out/covers/ep1.jpg tx 231 "<標題>" "<簡介>" "<標籤,逗號分隔>"
    
    腳本會將路徑轉成絕對路徑(它內部 cd 到 social-auto-upload),在影片專案目錄裡用相對路徑呼叫即可。 成功會列印「投稿成功 BVxxxx 連結」,失敗會列印日誌末尾。多集按順序一集一集傳,每傳完一集就告知用戶 BV 號。
  3. 全部傳完後提醒用戶:在創作中心「合集管理」建立合集並按順序加入;審核通過後才公開。

網路排障:

  • 上傳極慢、error sending request、connection reset、伺服器 500:多半是代理 TUN 把流量繞到了海外節點。 讓用戶在代理規則裡將 DOMAIN-SUFFIX,bilibili.com,DIRECT、DOMAIN-SUFFIX,bilivideo.com,DIRECT 放在靠前的位置,並重新載入設定; 再跑一次 probe_lines.sh,速度達到每秒幾百 KB 以上再傳。
  • 查看進度:nettop -p <biliup pid> -L 1 -x -J bytes_out。biliup 日誌在傳完之前幾乎沒有輸出,不要因為沒日誌就判斷卡住。
  • macOS 沒有 timeout 命令。
  • 首次執行 sau 下載 biliup 失敗(GitHub Release 存取慢):使用 https://gh-proxy.com/ 或 https://gh-proxy.org/ 加在 release 位址前手動下載。
  • 重傳前先確認上一次沒有投稿成功(日誌裡有沒有 bvid),避免重複投稿。

B 站:投稿上限與分 P

  • 新建稿件每天約 7 個,超過會回傳 21566 投稿過於頻繁,要等第二天。一章打成一個分 P 稿件(biliup upload 一次傳多個檔案,檔名就是分 P 標題,使用硬連結 out/parts/P<k> <集標題>.mp4 命名不佔空間)。
  • 往已有稿件追加分 P 使用 biliup append --vid BV…,不佔新建額度。
  • 標籤最多 12 個,超過則截斷。線路先 probe_lines.sh;bldsa 出現過憑證過期,失敗請換 tx/bda2。
  • 佇列腳本範例:tools/examples/upload_chapters.sh(21566 每小時重試,最多 24 次;成功將「- 結果:BV… P」寫回 upload_meta.md)。

B 站:追加到已有稿件(系列合集,2026-10 ~ 11 知識庫跑通)

  • 一個系列一個分 P 稿件,之後每篇都使用 biliup append --vid BV… 追加;不新建稿件(用戶明確不要新建時更不能建)。
  • 佇列腳本範例 tools/examples/upload_append.sh:每篇一行 app <名字> <BV> <專案目錄>,按順序追加 out/parts/*.mp4。
    • 幂等:成功寫入 <名字> append <BV> <日期> 到 results.log,再次執行自動跳過(「已追加過」),所以新一批只要在末尾加行、整份重跑。
    • 線路輪換 alia → tx → bda2,三條都失敗就休息 30 分鐘再來,最多 48 輪;成功判據是輸出裡有「稿件修改成功」。
    • 使用 nohup <腳本> > upload_kbN.log 2>&1 & disown 啟動,日誌按批編號;另起一個背景 until 迴圈等待日誌出現「佇列完成」。
    • 常見失敗 client error (Connect):線路抖動,腳本會自己重試,不要手動重傳(會產生重複分 P)。
  • 分 P 標題就是檔名:out/parts/P<k> <鉤子>:<主題>.mp4(硬連結到 out/epK.mp4,不佔空間)。
  • append 無法修改簡介:每批在 upload_meta.md 寫一段「簡介補充」,再追加到看板裡一條「待作者」筆記,讓用戶在創作中心手動貼到原稿件簡介末尾。
  • 不同語言的版本(如英文配音版)不要追加進中文稿件,發布到哪裡由用戶決定。

YouTube

  • 工具:同一個 sau(sau youtube login/upload-video,必須 --headed,無頭模式 Google 不允許進入 Studio)。 sau 自帶的 YouTube 上傳器有兩個 bug,修復方式在 tools/examples/sau-youtube-fixes.patch:登入檢查只等 3 秒且使用無頭(誤報 invalid);播放清單選擇器點錯(播放清單從未加上,且異常被吞)。新機器裝完 sau 後先套用此補丁。
  • 播放清單要先在 Studio 建立好(否則 --playlist 不生效);上傳後抽查一集是否進入清單,沒進就到 Studio 影片編輯頁補選。
  • 單日有上傳上限:出現「找不到發布按鈕」、影片停在草稿,多半是到上限了。不要重傳(會留下重複草稿),到 Studio 把草稿補齊發布,剩下的第二天再傳。
  • 佇列腳本範例:tools/examples/youtube_queue.sh(長佇列使用 nohup … & disown,連線階段背景任務會被回收)。
  • API 方案(不開瀏覽器):youtubeuploader(brew install youtubeuploader)+ tools/examples/youtube_api_upload.sh。 前提:Google Cloud 專案啟用 YouTube Data API v3、OAuth 同意畫面(外部、加入測試用戶)、Web 應用程式憑證(回呼 http://localhost:8080/oauth2callback)。 未通過審核的專案,API 上傳的影片一律鎖定為私人;審核表單 https://support.google.com/youtube/contact/yt_api_form 要求公開的首頁、隱私政策、服務條款 (可使用 GitHub Pages,範例 cassieliang6709/video-uploader)、首頁/隱私頁截圖、OAuth 流程截圖、架構圖、用戶流程圖、完整上傳腳本。審核前繼續使用瀏覽器自動化。

抖音 / 快手 / 小紅書

工具:同一個 social-auto-upload 的 sau douyin|kuaishou|xiaohongshu,瀏覽器自動化(patchright)。 命令由用戶在自己的終端裡執行(見鐵律),Claude 只準備命令、檢查結果。

影片:這三個平台以豎屏為主,建議 1080×1920 或剪成 1 分鐘左右的精華;需要的話回到 tech-explainer-video 另渲染豎版。 橫版也能傳,但會帶黑邊。

首次安裝瀏覽器(用戶執行):

cd ~/tools/social-auto-upload && PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright" .venv/bin/patchright install chromium

登入與檢查(用戶執行,<平台> 是 douyin / kuaishou / xiaohongshu):

cd ~/tools/social-auto-upload && .venv/bin/sau <平台> login --account <帳號名> --headed
.venv/bin/sau <平台> check --account <帳號名>

上傳(Claude 按照 upload_meta.md 填好整條命令發送給用戶,用戶確認內容後自行執行):

cd ~/tools/social-auto-upload && .venv/bin/sau <平台> upload-video --account <帳號名> \
  --file <mp4 絕對路徑> --title "<標題>" --desc "<正文>" --tags <標籤,逗號分隔> \
  [--thumbnail <封面>] [--schedule "YYYY-MM-DD HH:MM"] [--collection <已存在的合集名>]
  • 抖音:--thumbnail 需為 3:4 豎版,另有 --thumbnail-landscape(4:3);標題不超過 30 字。
  • 快手:--thumbnail 任意比例;腳本只填前 3 個標籤,最重要的放前面。
  • 小紅書:標題不超過 20 字;不支援 --collection。
  • 用戶跑完後將終端輸出貼回來,Claude 判斷是否成功、將連結寫回 upload_meta.md。出現滑塊驗證碼由用戶自己處理。
  • 抖音一章發一個整章合集(各集拼成 out/chapter.mp4,4:3 橫版封面)比逐集發更好管理;佇列腳本範例 tools/examples/douyin_upload_all.sh(用戶在自己終端執行,登入檢查使用有介面模式 DOUYIN_COOKIE_AUTH_HEADLESS=false)。

備選(不想使用腳本時):在用戶已登入的 Chrome 裡打開創作者平台的發布頁,幫用戶選好檔案、填好標題和正文,停在發布按鈕前截圖,由用戶自己點擊「發布」。

批次流水線(僅當用戶明確授權)

用戶可以對一個系列給予長期授權:「渲染完一批 → 直接上傳 → 刪成片」(例如 nudgecode 演算法圖解,2026-10-24 授權)。 這種授權只涵蓋用戶說過的那個系列,換系列或換平台要重新詢問。授權範圍內:

  1. 這一批每章渲染完後,按照該系列已有的 upload_meta.md 格式自行撰寫標題、簡介、標籤(簡介仍以「自用學習筆記。」開頭,只寫影片裡有的內容), 不再逐條給用戶看;仍然先執行 sau bilibili check 確認登入、probe_lines.sh 選擇線路。
  2. 按照章、集順序上傳,每章傳完後在對話中列出「集 / 標題 / 連結」,BV 號寫回 upload_meta.md。
  3. 只有取得 BV 號的那一集才可以刪除:out/epK.mp4、out/*.raw.mp4、out/check/、out/bundle/(以及該專案自己的 node_modules,共享的軟連結不動)。 保留原始碼、配音、srt、封面、upload_meta.md,以便日後重新渲染。上傳失敗的集一律不刪。
  4. 刪除命令被權限攔下時,將命令原樣交給用戶自行執行,不換其他方式繞過。

清理

  • 成片要所有目標平台都取得連結才可刪除;刪除常被權限攔下,寫成腳本交給用戶執行,範例 tools/examples/cleanup_uploaded.sh(只刪除 upload_meta.md 裡有結果的集,可反覆執行)。

記錄

發布完成後將每集的 BV 號寫回 out/upload_meta.md 的「結果」欄位,並在對話中列出「集 / 標題 / 連結」表格。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能