Communitygithub.com

vstoos/vlog-film

將原始旅行 / 行車 vlog 素材(開車時用手機錄製的 HLG 談話片段、行車記錄器畫面、照片、OBD/Torque 螢幕錄影)剪輯成一部完整的 HDR(HLG 10-bit)YouTube 影片,包含預告片、跳剪、音樂下的道路插入畫面、字幕、路線地圖、車牌模糊、平穩語音、章節、縮圖、多語言字幕以及用使用者克隆語音製作的多語配音音軌。每當使用者想要剪輯、裁切、組裝或完成影片時,請使用此技能。

vlog-film 是什麼?

此技能可將一組原始影片素材自動化地轉換為一部專業的 YouTube 影片。它主要針對旅行 vlog 或行車記錄器風格的內容設計,尤其擅長處理 HLG 10-bit HDR 素材。技能工作流程從盤點素材(包含掃描中繼資料、製作聯絡表、產生語音轉文字稿)開始,然後協助使用者規劃影片結構(包含預告片、標題卡、談話區塊和插入畫面)。編輯專案是以 Python 指令碼定義的,可精確控制時間軸、效果和轉場。完成後,技能會處理最終轉檔,並透過 WhisperX 自動驗證剪輯點與音量一致性。使用者可以透過迭代式審閱流程提供修改意見,每次修改都會被記錄下來。最終輸出包含所有 YouTube 所需素材:含章節的說明、縮圖、翻譯字幕、自動配音,以及使用使用者個人克隆語音所製作的配音音軌。支援的平台包括 Python 指令碼(用於 FFmpeg、Melt、WhisperX、Higgs TTS)與任何能執行這些指令碼的環境。根據 SKILL.md 文件,此技能特別擅長處理車牌模糊、基於人臉偵測的準確畫面構圖、路線地圖製作與使用者隱私。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vstoos/vlog-film/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

Vlog 影片

將使用者的素材資料夾轉換為一部完成的 YouTube 影片,然後根據使用者的筆記進行迭代調整,直到他們滿意為止。此處理流程是基於「Yaris 告別」影片(24 分鐘,烏克蘭語口白,iPhone + Sony 行車記錄器)所建立的;references/example_yaris.py 是該影片的完整專案檔,是了解完整剪輯成品樣貌的最佳指南。

開始之前

  • 設定。 <skill>/config.json 儲存了此機器的路徑(ffmpeg、melt、搭載 WhisperX 的 Python、車牌辨識模型、音樂資料夾、編碼器、口語語言)。如果該檔案遺失,或因缺少工具而導致指令碼失敗,請執行 python <skill>/setup/setup.py(僅檢查)並向使用者顯示缺少了什麼;獲得使用者同意後,執行 python <skill>/setup/setup.py --install。下面的所有指令碼都必須使用 config.json 中設定的 Python("python")來執行,因為 WhisperX 和 torch 是安裝在那個環境中的。
  • 使用者。 如果 <skill>/user.md 存在,請閱讀它:內容會說明使用者是誰、應使用哪種語言回覆,以及他們的慣用偏好。如果不存在:請使用使用者的語言回覆,保持回覆簡短,並使用 mm:ss 格式標註影片時間點以供使用者參考。
  • 在下面的指令中,$K 表示 <skill>/scripts,而 python 則是已設定的 Python 直譯器。

專案結構

素材保留在使用者放置的原始位置;最終的 mp4 檔案、YouTube 說明、縮圖和字幕也會放在那裡,因為那是使用者查看的地方。工作檔案則放在一個專案資料夾中(例如 C:/Data/<名稱>-video/):

<名稱>-video/
  project.py        路徑、EDL、HOOK、音樂、構圖、make_stills()   (複製 references/project_template.py)
  transcripts/      <片段>.json 來自 transcribe_all.py
  film/             已渲染的插入片段、<片段>_blur.mov、<名稱>.mlt、<名稱>.mp4
  film_check/       聯絡表、測試音檔、檢查影格(暫存區)
  edit_notes.md     使用者的審閱筆記以及針對每條筆記的處理記錄
  subs/, thumbnail/, route/

工作流程

1. 盤點

  1. python $K/scan_meta.py <素材路徑> film_check/meta.json:取得每個檔案的時間、時長、GPS 資料。按時間排序後,即可得到故事的順序。
  2. 在決定之前先查看內容:對於影片片段使用 python $K/contact_sheet.py <輸出.png> 6 <片段...>,對於照片則使用平鋪顯示的聯絡表;請自行查看這些圖片。注意直排片段(旋轉 -90/90 度)、顯示車牌的片段、行車記錄器檔案、螢幕錄影。旅行日期範圍內的 Tesla 行車記錄器 / 哨兵模式事件:請參考 references/teslacam.md(尋找事件、透過 teslacam_grade.py 進行色彩校正)。
  3. python $K/transcribe_all.py <素材路徑> transcripts:為每個談話片段產生帶有逐字時間戳記的 WhisperX 轉寫稿(可中斷續傳,語言從 config 中讀取)。全部閱讀一遍;它們是故事的原始素材。

2. 故事與 EDL

在開始建構之前,先用幾行文字向使用者提議影片結構:包括預告片、各個部分、哪些照片、地圖或靜態圖片可以輔助說明哪段談話。典型的結構如下:

  • 預告片(HOOK):選取旅行中各處 4-6 句簡短有力的話語,每句都是一個完整的主題。
  • 標題卡 放置在道路畫面上,然後是談話片段,中間用 4-10 秒的道路插入畫面搭配音樂分隔。
  • 在談話提及某事物時插入對應畫面:提到加油時顯示收據、提到檢驗時顯示檢驗台、在每段旅程開始時顯示路線地圖。
  • 語音上的圖片(B-roll、手機截圖、說話者繼續說話時的說明文字):在將談話片段交給 filmkit 處理之前,使用 burn_in.py 將它們燒錄到片段中(filmmkit 只有在片段有說話時才會顯示它)。直排圖片(截圖、直排影片、直式照片)會以全影格高度顯示在說話者臉部的空側,這是透過人臉偵測來決定的,以確保臉部保持在畫面中;手機的時鐘和按鈕無論如何都會填滿頂部和底部區域。橫向圖片則會覆蓋整個畫面。
  • 道路插入畫面的內容應與故事所需相符(在說「我們停車了」之前顯示駛入加油站的引道,在機場場景之前顯示機場停車場),而不只是隨便一段高速公路:請查看道路片段在適當時間點附近的聯絡表。
  • 結尾卡片:在道路畫面上停留 20 秒,頂部顯示文字,中間留空給 YouTube 片尾資訊卡;如果使用者有的話,可以在這裡放一個推薦連結。

從 references/project_template.py 複製並撰寫 project.py;EDL 項目類型、說明文字、音樂鍵值以及每個片段的選項在該檔案中有詳細說明。談話範圍來自轉寫稿的時間戳記。

3. 建構與渲染

python $K/blur_plates.py <素材路徑> <專案>/film [--faces] IMG_0089 ...   # 車牌;--faces:同時處理人物
python $K/burn_in.py film/IMG_0089_blur.mov film/IMG_0089_over.mov spec.json   # 若有需要的話,在語音上疊加圖片
python $K/filmkit.py <專案>/project.py                        # 渲染插入片段,寫入 film/<名稱>.mlt
python $K/render_final.py <專案>/film <名稱> <素材路徑>/<名稱>_HLG.mp4   # 耗時:在背景執行

在執行大量 GPU 工作(渲染、WhisperX、配音)之前,請先執行 nvidia-smi:顯示卡的編號會在每次連線時改變,且不同工具之間可能不同,而其他工作也可能占用了一張顯示卡(參考 references/lessons.md,「GPU 與硬體編碼器」)。filmkit.py --no-media 只會重新寫入 .mlt 檔案(數秒鐘)。渲染完成時會輸出響度、時長、編解碼器/HDR 標籤以及綠色影格計數:預期結果約為 -14 LUFS、Main 10、arib-std-b67、bt2020、0 個綠色影格。

4. 在通知使用者完成之前進行驗證

使用 WhisperX 進行聆聽,而不是只信賴 EDL:對於每個新增或修改的剪輯點,從 已完成 的 mp4 檔案中剪下相同的秒數並進行轉寫(python $K/transcribe_window.py <音檔路徑> <偏移量>)。初版的轉寫稿經常在片語結束的位置上出錯,特別是在處理數字時,因此依據這些轉寫稿所做的剪輯可能會切掉結尾(例如「не 144, а 147」遺失了「а 147」)。同時,也測量相鄰區段的響度(ffmpeg -ss A -t N -i film.mp4 -af ebur128 -f null -),並檢查每個新增插入畫面的一個影格。其他常見陷阱及其解決方案:請參考 references/lessons.md。

5. 審閱回合

使用者觀看影片並附上帶有影片時間點的筆記。針對每條筆記:

  1. python $K/timeline.py film/<名稱>.mlt 12:22 會顯示該片段的名稱和來源秒數。
  2. 檢查來源(對一段時間區間進行轉寫、測量響度、查看影格)。告訴使用者實際的內容是什麼,並引用原始話語;使用者的記憶有時會與錄音內容不同。
  3. 修改 EDL 並將修改記錄在 edit_notes.md 中(影片時間點、片段名稱與秒數、說了什麼、做了什麼修改)。

當使用者仍在觀看時,先收集筆記,不要重新建構:最後一次建構可以省去多次長時間的渲染。當使用者說可以建構時,重新建構一次,按照步驟 4 驗證每個修改過的地方,然後更新章節。

6. 交付成果

references/youtube.md:包含章節的說明(使用 timeline.py)、縮圖(使用 make_thumb.py)、字幕(對完成的影片使用 make_subs.py 並手動校正,然後逐條翻譯,再使用 onscreen_subs.py 將畫面上的文字作為獨立的字幕條進行翻譯)、YouTube 自動配音。使用者可以透過手機使用 python $K/media_server.py --port 8765 <素材路徑> <專案>/film 來觀看渲染結果(僅限區域網路 / VPN;唯讀;亦可見於 github.com/vstoos/media-server)。

7. 配音音軌

對於使用者希望用聽的而非閱讀的語言:請參考 references/dubbing.md。語音使用 Higgs TTS 3(自 2026 年 11 月 6 日起為預設值),搭配使用者 以該語言 儲存的參考語音檔案(位於 C:/Data/voices,傳入參數 -);所有帶有 Higgs 音軌的影片描述都須標註「採用 Boson AI 的 Higgs Audio」。字幕先透過 dub.py gen 產生,接著 dub_check.py 會逐段捕捉模型的瑕疵,dub_regen.py 則負責替換失敗的部分,最後 dub.py mix 建構音軌並印出需要聆聽檢查的內容。在 say.json 中修正發音問題。用於無聲片段(行車記錄器片段)的旁白,採用烏克蘭語的相同流程,以字幕形式撰寫。不要僅憑檢查就認為配音是乾淨無誤的:使用者的耳朵才是最終的把關者。

隱私

車牌:使用者不會模糊一般交通車輛的車牌(波蘭;浮動方框會破壞道路畫面的視覺效果)。只有在片段顯示該駕駛者可能違規或發生危險的狀況時,才模糊該車牌,以避免影片被用來對特定人士提出投訴;道路插入畫面則透過專案的 CLIP_SRC 原樣使用。模糊工作人員、路人與兒童的臉部(使用 blur_plates.py --faces;請檢查影格,因為車漆上的倒影可能誤導辨識系統);路線地圖的起點應設定在公共場所,絕不能是使用者的住所;除非被要求,否則不要將其他人的臉部(特別是兒童)放在縮圖上。

參考檔案

  • references/project_template.py:附有註解的專案範本檔案,以供複製使用;EDL 語法說明。
  • references/example_yaris.py:已完成的 Yaris 影片,展示了所有功能。
  • references/lessons.md:關於 HDR、音訊、剪輯與構圖的常見陷阱,以及經實證有效的解決方案。
  • references/teslacam.md:Tesla 行車記錄器 / 哨兵模式片段(HW3):從儲存的事件中尋找事件,以及色彩校正方法(使用 scripts/teslacam_grade.py)。
  • references/youtube.md:說明、章節、縮圖、字幕、配音、片尾畫面。
  • references/dubbing.md:以使用者克隆語音製作的獨立音軌,以及自動化的瑕疵檢查。
  • references/example_make_route.py:來自 Yaris 影片的動畫路線地圖(使用 Sentinel-2 圖磚 + OSRM 道路);修改其常數(邊界、城市、地標點、路段)以適用於新的旅程。

相關技能