Communitygithub.com

WEBGRS/reframe

將橫式影片重新構圖為直式 (9:16)、方形或 4:5 影片,每個鏡頭只保留重點內容(說話者、移動物體、鏡頭主題),並跟隨穿越畫面的主體,且不重新編碼原始素材。

reframe 是什麼?

Reframe 是一個專門的 AI 助手技能,能將橫式景觀影片智慧重新構圖為直式 (9:16)、方形 (1:1) 或 4:5 比例,無需重新編碼,保持原始影片品質。本技能首先分析每個鏡頭的畫面內容、動態、細節、色彩對比和膚色,每秒測量十次,然後為每個鏡頭決定最佳裁切視窗(固定、分割或全幅)。它會生成一份審核頁面和檢視表,讓使用者檢查每個裁切視窗,並在需要時手動調整 `object-position`。對於移動主體,Reframe 支援流暢跟隨(`--follow`),透過 CSS 關鍵幀動畫使裁切視窗平滑追蹤主體。它也提供檢查功能,驗證最終的 `film.html` 是否符合規則,標出任何違規之處(如主體被裁切、視窗漂移等)。此技能支援 Node.js 環境,並與常見的影片工作流程整合。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/WEBGRS/openfilm-reframe/tree/HEAD/skills/reframe

在你喜歡的 AI 中提問

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

說明文件

reframe 是做什麼的?

將他人的橫式素材重新構圖為直式或方形影片,看起來就像原本就是為那個形狀拍攝的:在每一刻,觀眾看到的都是鏡頭的重點,而不是旁邊的牆壁,也不是半張臉。

它的定義

每個鏡頭根據自己的內容來構圖。一個從頭到尾統一的中央裁切,無論多麼整潔,都不算數;將整個橫式畫面縮小放在模糊的黑色條紋之間,也不算數。

必須符合的條件

  • 先測量,再審視。 每個裁切視窗都來自測量結果,以及你親眼觀察這些畫面的判斷。測量可能出錯;畫面說了才算。
  • 主體保持完整。 臉部、說話者、移動中的物體以及重要的文字,都必須留在畫面內,並且周圍留有空間。當兩樣東西都很重要且無法同時容納時,畫面會留給當下最重要的那個(誰在說話、什麼在移動、旁白提到了什麼),而觀看者會聽到被省略的部分。
  • 平穩構圖。 靜止的主體在該鏡頭中只會有一個固定的裁切視窗。只有當主體移動時,視窗才會移動:在上次移動至少一秒後進行一次乾脆的重新定位,或者進行流暢的跟隨;絕不允許漂移或抖動的裁切。
  • 保持原始素材原樣。 使用 #t= 修剪同一檔案,並透過剪輯自身的 CSS(object-fit: cover 搭配 object-position,或使用 translate 移動的素材形狀盒子)進行裁切;絕不重新編碼、不裁切為新檔案,也不改變速度。同一鏡頭的片段彼此首尾相接,因此鏡頭的聲音可以連續不中斷地播放。

你擁有的工具

node <此技能資料夾>/scripts/reframe.mjs <影片> --aspect 9:16 --src assets/<檔案>(在影片資料夾中執行)會寫入 reframe/<名稱>.json、一個審核頁面以及 reframe/<名稱>-sheet.jpg。它會找出各個鏡頭,每秒十次評估動態(已扣除攝影機本身的移動)、細節、色彩對比和膚色,並為每個鏡頭指定一個 fixed(一個片段)、split(同一檔案的多個片段,每個至少一秒,各有自己的位置)或 whole(素材本身的形狀),同時準備好附帶各自來源秒數的 <video> 行。

閱讀它列印的每一張檢視表(look: … (Read it))。 每張圖片都是一個時間點(每個片段的開始、標記為 WEAKEST 的最弱時刻,每隔 1.5 秒一張):畫面中標示出裁切視窗的輪廓,外部區域變暗,顯示畫面尺寸的百分比標尺,以及影片最終呈現的裁切結果。如果主體位於視窗外部或被視窗切割,請自行設定 object-position;輸出會提供計算公式。held 表示視窗與測量結果一致的程度,並非主體確實在視窗內的證明。標記為 ! 的行表示需要特別留意的地方。

流暢跟隨 (--follow): 使用 @keyframes follow-N 表示分割鏡頭路徑的 translate,以及套用該動畫的一個 <video> 片段,這些也會寫入 reframe/<名稱>-follow.css。將這些關鍵幀放入 film.html 的 <style> 中。動畫會根據片段自身的 at 時間來運行:一個從鏡頭開始後 a 秒處開始修剪的片段,其 animation-delay 會設為 -a s。該片段保留自身的聲音。

修剪一個鏡頭 只保留新的 #t= 範圍內的片段,外側的兩個片段會被裁切到該範圍,位置保持不變。

影片寫好後進行檢查: 在影片資料夾中執行 node <此技能資料夾>/scripts/reframe.mjs check,它會讀取 film.html 自身的裁切設定,並列印出每個視窗、移動時間、每次重新定位、視窗保留最少測量內容的時刻,並將它們繪製在一張檢視表中。它會列出違反上述規則的項目,並標記 !。修正每個 ! 標記的項目,然後再次執行。

影片的形狀由其 viewport 決定(<meta name="viewport" content="width=1080, height=1920">)。執行 npx openfilm look 來預覽裁切後的影片。

與使用者合作

以使用者的需求為優先:他們想要的形狀(當他們說直式時就是 9:16)、必須包含在內的鏡頭、任何必須保留在畫面中的元素(產品、標誌、第二位說話者)。在不耽誤工作的前提下提問。完成後,針對每個鏡頭說明:held 值、每個 ! 行、每個你移動過的視窗及其原因,以及裁切後遺漏了什麼內容。

相關技能