Communitygithub.com

binay-py/event-recap-video

將活動(會議、旅行、退修會、婚禮)中的一堆手機照片/影片,用 ffmpeg 製作成吸睛的回顧影片 — 包含 16:9 主剪輯、9:16 版本以及約 45 秒的節拍同步 Reels。當使用者想要從自己的素材中獲得回顧/精華/蒙太奇影片時使用。

event-recap-video 是什麼?

這是一個 AI 代理技能,用於從使用者的手機照片與影片素材中,自動化生成專業級的活動回顧影片。它利用 ffmpeg 與 Python 腳本,將大量未經整理的原始檔案(例如來自 Google Photos 的下載檔案)轉換為三種不同格式的輸出:標準 16:9 寬螢幕剪輯、適用於社群媒體的 9:16 直立版本,以及用於 Instagram/TikTok 的節拍同步 Reels。此技能特別適合需要快速製作婚禮、會議、旅行或退修會精華片段的使用者。工作流程包含媒體分析(透過 EXIF 資料進行重複偵測與亮度分析)、基於 AI 的剪輯決策(如指定以影片為主的剪輯順序、冷開場鉤子設計)、以及後期渲染與品質控制,確保影片幀數、音量標準與視覺效果均符合專業要求。此外,還提供可選的迷因/動態剪輯模式與額外的音訊處理選項。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/binay-py/claude-skills/tree/HEAD/skills/event-recap-video

在你喜歡的 AI 中提問

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

說明文件

活動回顧影片

已在包含 780 個項目的活動庫中進行了端到端測試。需要在 PATH 上具有 ffmpeg/ffprobe,以及 Python 3.10+ 並安裝 pip install pillow pillow-heif numpy。

腳本位於此檔案旁。將其複製到專案中:

  • scripts/analyze.py、build.py、reel.py、motion.py、fonts.py → 專案根目錄
  • scripts/work/*.py → <project>/work/
  • examples/*.json → 專案根目錄,然後編輯它們

專案佈局:raw/(未修改的原始檔案)、music/、work/(快取)、output/、edit.json(完整的剪輯設定)。 字型會在 Windows/macOS/Linux 上自動找到;可使用 FONT_SERIF、FONT_SERIF_BOLD、FONT_SANS_BOLD、FONT_BLACK、FONT_EMOJI 覆蓋。

1. 獲取媒體

  • 將每個匯出/壓縮檔放在 raw/ 下自己的資料夾中。切勿修改原始檔案。
  • Google Photos 沒有針對現有庫的 API:透過 CDP 驅動使用者已登入的瀏覽器(請參閱此儲存庫中的 brave-cdp 技能)。網格項目是 a[href*="/photo/"];日期標題是 [role=checkbox][aria-label^="Select all photos from"]。
  • 使用真實的滑鼠事件(Input.dispatchMouseEvent)選取日期標題,驗證 "N selected" 文字,按下 Shift+D。標籤頁必須在前景(Page.bringToFront),否則網格會保持灰色。
  • Google 在下載後會清除選取狀態,且標題的 aria-checked 可能會過期;在重新選取前請重新載入。
  • 使用 allowAndName 的 Browser.setDownloadBehavior 會將壓縮檔以其 GUID 儲存而不帶副檔名;請監控 Browser.downloadProgress 以取得 completed 狀態。

2. 分析與挑選

  • python analyze.py → work/media.json(從 EXIF / 影片 creation_time 以當地時區取得拍攝時間、模糊度、亮度、重複項、音量)+ 在 work/sheets/ 中生成每日的聯絡表。
  • python work/vsheets.py → 每個影片生成三幀條狀圖。請查看每一張表。跳過那些在錄製中旋轉的片段、口袋拍攝的片段以及黑暗的夜間片段。
  • python work/loudest.py ID:seconds ... 找出音量最大的時間視窗(唱歌、說話、歡呼)。在修剪之前,請用 1 fps 的幀條狀圖進行驗證。
  • 共享/轉發的檔案沒有拍攝日期(會退回使用檔案修改時間)— 請透過目視放置它們。

3. 剪輯(觀眾喜歡的)

  • 以影片為主(約 90% 的片段);僅在強烈的團體照時使用照片。照片過多的剪輯會感覺節奏緩慢。
  • 冷開場鉤子:8–10 個 1.2–1.8 秒的片段,使用 hook_xf 0.1 的近硬切,然後是標題卡。接著按日期順序排列,在每天的第一個片段上加上一個小的 "label": "Day N · date",使用 3–4 秒的片段,以及幾個標記為 "speech": true 的 9–12 秒精彩時刻(音樂在這些時刻會降低音量)。
  • 音樂決定鉤子的成敗。將兩個節奏相似的曲目串聯起來("music": [a, b],3 秒交叉淡入淡出),而不是循環播放一個。python work/bpm.py file.mp3 可估計節奏。
  • edit.json 的鍵:title, subtitle, closing, closing_sub, title_bg / closing_bg(+ 用於影片 ID 的 _bg_at)music / vertical_music、music_volume, duck_volume, ambient_volume, photo_seconds, hook_xf, closing_seconds, horizontal_hook, horizontal, vertical_hook, vertical。片段:{"id", "at" (0–1 中心) | "start", "dur", "speech", "label", "xf"}。
  • python work/shortlist.py → output/shortlist.jpg(每個剪輯點的一幀)。在渲染之前將其展示給使用者。

4. 渲染與品質控制

  • python build.py [horizontal|vertical|vertical-full] — 在 work/seg 中的每片段快取、xfade 鏈、loudnorm −14 LUFS、x264。
  • EDIT=other.json OUT_SUFFIX=-v2 python build.py 渲染一個替代剪輯,而不會影響主剪輯。
  • 對每個渲染進行品質控制:nb_frames == duration*30(xfade 鏈可能會丟失幀)、blackdetect 計數為 0、ebur128 ≈ −14 LUFS,以及一個幀的平鋪表(fps=1/5,tile=8x6)以目視檢查旋轉和截斷的標題。
  • ffmpeg 7+ 偏好使用 -/filter_complex file 而不是已棄用的 -filter_complex_script。

5. 節拍同步 Reels(IG / TikTok / FB)— reel.py + reel.json

  • python reel.py → output/reel.mp4(約 45 秒),基於 build.py 的片段渲染器構建。
  • 剪輯點正好落在節拍網格上(bpm 提示、自動相位、四捨五入到幀的剪輯時間)。仔細檢查節奏:粗略估計器常常會回報一半/兩倍的數值(85 對 154)。
  • 第一秒 = 最令人驚喜的時刻,並帶有一行 "POV: …" 文字。4 拍的片段,英雄時刻使用 6–8 拍,每個片段上緩慢推近,章節開始時使用白色閃爍。
  • 文字:粗體無襯線字體、白色並帶有粗黑色外框,距離頂部約 24%(避開 TikTok/IG 按鈕),向上滑入淡出。總共 5–7 行簡短文字;最後一行是活動名稱。

6. 迷因/動態剪輯 — motion.py + motion.json(僅在使用者要求迷因/貼圖時使用)

  • 很多人認為這種風格對真摯的活動來說太過頭了。預設使用第 3–5 節。
  • 使用一個長、穩定的曲目(約 3 分鐘)而不是串聯;透過梳狀濾波器搜尋來確定節拍網格。
  • 每個片段:beats、speed(0.5 慢動作 / 2 快轉)、freeze(拍數;磁帶停止 + 靜音 + 去飽和)、cap 貼圖(圓角框、傾斜、彈性彈出、彩色表情符號)、day 強力標題 + 嗖嗖聲、title、verse、shake、punch、flash、zoom。
  • 如果渲染被終止,請在重新執行前刪除那些無法通過 ffprobe 的片段檔案(快取會重複使用它們)。

7. 直立與社群媒體交付

  • 當有人批准 16:9 剪輯並要求 9:16 時,提供他們相同的剪輯直立版本(python build.py vertical-full)。不要重新設計已批准的剪輯;「讓它更具吸引力」僅意味著進行打磨。
  • 平台(尤其是 Facebook)會將帶有未經授權音樂的貼文靜音。提供一個原始聲音的版本(一個 "music": null 的剪輯)和/或一個無聲副本(ffmpeg -i in.mp4 -an -c copy out.mp4),以便可以從平台的授權庫中添加音樂。
  • 最終打磨:eq=contrast=1.07:saturation=1.2:gamma=0.97,colorbalance=rm=0.03:bm=-0.03:rh=0.02:bh=-0.02,unsharp=5:5:0.45,vignette=angle=PI/5.5 + 音訊 highpass=80,dynaudnorm,acompressor,loudnorm=I=-14。

Individual skills in this repo

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

相關技能