在 Resolve 時間軸上製作螢幕教學影片
將教學描述(film.json)及其螢幕截圖轉換成時間軸,讓編輯人員可以繼續加工。片段帶有一般的 Inspector 關鍵幀,標題是 Fusion 標題並在 Inspector 中帶有控制項,場景也已標記。它不會加入音訊,因此旁白和音樂可以在之後加入。
Resolve API 無法設定關鍵幀或標題的長度,因此建置過程會將它們寫入時間軸檔案再匯入。references/how-it-works.md 說明了這點並列出了已知問題。如果某個步驟失敗或 Resolve 版本比 21.2 新,請先閱讀該文件。
開始之前
- Resolve Studio 正在執行中,且已開啟一個專案。使用
get_resolve_status檢查,並在專案伺服器請求時,使用since參數設為21.0呼叫get_whats_new一次。 - Resolve 之外:需安裝 Python 及
pillow套件,且 ffmpeg 需在 PATH 環境變數中。 - 專案的時間軸格式必須是 1920x1080。
preflight會檢查此項。
與使用者共同決定
如果可能,請從對話中確定以下事項,僅詢問缺少的部分:
- 專案。 時間軸會建立在已開啟的專案中。請向使用者確認專案名稱。切換專案可能會導致未儲存的變更遺失,因此如果是錯誤的專案,請要求使用者自行切換。
- 螢幕截圖。 它們來自使用者,或由您自行擷取。使用 Playwright 時,請採用 1920x1080 的視窗大小搭配
deviceScaleFactor: 2:產生的圖片為 3840x2160,且getBoundingClientRect給出的座標已可直接用於film.json。檢視每張提供的圖片,選用適合觀眾的圖片,並告知使用者您排除了哪些。 - 品牌。 顏色、字型、標誌以及任何標籤(例如「主機」或「管理員」)。請優先在使用者的程式碼或先前建立的標題中尋找。Text+ 只能看到已安裝的字型,未經詢問請勿安裝新字型。
- 時間軸的名稱。 選擇一個未被使用的名稱。切勿取代不是您建立的時間軸。
撰寫 film
建立一個資料夾來存放影片,並在其中寫入 film.json。references/film-format.md 說明了格式。現在就閱讀它。
一些閱讀體驗良好的時間設定:
- 每個場景顯示 6 到 10 秒,說明列維持足夠閱讀兩次的時間,大約每 8 個字元 1 秒。
- 攝影機移動約需 1 秒,並在游標移動或高亮顯示前留出穩定時間。
- 游標移動約需 0.8 秒,點擊後約 0.3 秒產生效果。
- 如果點擊後的新畫面佈局與目前縮放比例一致,則直接在點擊後接續新鏡頭;如果頁面完全改變,則在點擊後立即結束場景,讓溶解轉場過渡到下一場景。
- 為了讓游標在溶解轉場中保持靜止,請將下一場景的游標起始位置設在畫面上的相同位置,使用公式
x' = tx + x * zoom。 - 在影片的開頭和結尾各使用一個約 3 秒的卡片。
說明列應僅表述螢幕截圖所顯示或使用者告知的內容,任何您推測的資訊都應放在您的報告中。
高亮框偏離按鈕是此格式最明顯的錯誤,因此請測量而非估計。圖片的顯示比例可能與其實際尺寸不同,請勿直接從圖片上讀取座標:
python "<SKILL>/scripts/measure.py" grid shot.png grid.png
開啟 grid.png(上面標有畫面座標),以找到按鈕填充區域的粗略位置。然後取得其精確的矩形範圍並檢查結果:
python "<SKILL>/scripts/measure.py" at shot.png 1250 470
python "<SKILL>/scripts/measure.py" show shot.png check.png 1200,450,180,40
邊框與附近顏色相近的按鈕可能會發生溢出,請留意警告,如果矩形看起來太大,請降低容差值。
建置
SKILL 是此技能的資料夾,WORK 是影片的資料夾。Shell 步驟可在任何地方執行。Resolve 步驟需透過 run_script_unsafe 執行。每次呼叫請傳入 timeout: 60,因為該工具的預設超時時間為 10 秒,而這些步驟可能需要更長時間。每個步驟都以以下程式碼開頭:
SKILL = r'<此技能資料夾路徑>'; WORK = r'<影片資料夾路徑>'
exec(open(SKILL + r'\scripts\resolve_steps.py', encoding='utf8').read())
在 film.json 存在之前,project_format(project) 會提供專案的尺寸、幀率和時間軸列表,fonts_available('Lato', ...) 則會回傳已安裝的字型及其樣式。除非有特殊原因,否則將 fps 設為專案的幀率。
1. 檢查專案。 在繼續之前修正 problems 中的所有問題,當需要使用者決定時請詢問使用者,並傳遞所有 notes。此步驟不會更改任何內容。
result = preflight(project, WORK)
2. 規劃,並安裝標題。 閱讀警告並修正 film.json 中的重要問題。這會將標題安裝到 Resolve 的範本資料夾中對應的品牌目錄,並會取代相同名稱的檔案,因此請告知使用者。
python "<SKILL>/scripts/plan.py" "<WORK>"
python "<SKILL>/scripts/templates.py" "<WORK>" --install
3. 建置時間軸。 此步驟會匯出建置區塊、寫入時間軸檔案、匯入時間軸、套用 API 可以設定的設定、檢查結果,並移除本次建置產生的兩個暫存時間軸。它只會取代由此資料夾建立的時間軸,因此如果使用者可能已編輯過該時間軸,請先詢問,因為編輯內容將會遺失。
result = build_film(project, WORK)
verify.problems 應為空。如果 done 為 false,請重複執行 result = finish_batch(project, WORK) 直到其為 true,然後執行 result = dict(verify=verify(project, WORK), cleanup=cleanup(project, WORK))。Resolve 可能需要幾秒鐘才能看到新安裝的標題,因此 build_film 會等待它們。如果仍然無法插入標題,請要求使用者在儲存工作後重新啟動 Resolve。
請勿刪除媒體夾(bin),無論是在此處還是後續清理時:片段可能從一個媒體夾連結到其他時間軸(請參閱 references/how-it-works.md)。
4. 檢視結果。 此步驟會直接從時間軸匯出帶有標籤的畫面圖表:每個場景、每個高亮的中間畫面,以及每次點擊後的畫面。這需要幾秒鐘,且無需渲染,因此不會更改渲染設定。在 build/review/ 資料夾中開啟這些圖表。
result = review_frames(project, WORK)
檢查高亮是否位於其元素上、游標是否落在預期位置、波紋是否可見、說明列是否合適,以及畫面是否沒有全黑。如需更詳細的檢視,可以使用 review_frames(project, WORK, seconds=[10.5, 20.2]) 以全尺寸輸出這些時間點(以時間軸秒為單位)。plan.py 會列印每個場景的開始時間,以便從場景時間進行轉換。
這些畫格與同一幀的渲染結果相符,已在 Resolve 21.2 上測試通過。review_frames 需要 21.2 版本才有的幀匯出 API。在較舊的 Resolve 上它會引發錯誤,此時可以使用下方的渲染方法:在沒有參考圖片的情況下對渲染結果執行 review.py,以獲得相同的圖表。
5. 渲染,當您需要一個檔案時。 為了提供影片給使用者,或供 remotion-to-resolve 進行比較,請進行渲染。start_render 會變更專案的渲染設定,請告知使用者。
result = start_render(project, WORK, 'review')
result = wait_render(project, '<job id>', 50) # 重複直到狀態變為 Complete
python "<SKILL>/scripts/review.py" "<WORK>" "<WORK>/build/render/review.mp4"
移除您的渲染任務,且僅移除您自己的,因為佇列中可能包含使用者的其他任務:
result = remove_job(project, '<job id>')
若要修改內容,請編輯 film.json,重新執行 plan.py,然後再次呼叫 build_film,接著重新檢視。如果您已渲染,請先移除該任務。如果品牌或 fps 有變更,也請重新執行 templates.py。如果使用者已手動編輯時間軸,請在重建前先詢問,或直接在時間軸上手動修改。
完成
除非使用者要求,否則將儲存操作留給使用者,因為儲存也會提交他們已開啟的其他未儲存編輯。回報以下事項:
- 時間軸、媒體夾及軌道
- 標題安裝的位置
- 新的時間軸現在是目前使用中的時間軸,需指出
preflight找到的原本開啟的時間軸名稱,如果您已渲染,也需告知渲染設定已變更 - 任何您推測的說明列措辭,以及螢幕截圖中與簡報衝突的內容
- 您檢查了什麼,以及您未檢查什麼。畫格顯示了畫面,但無法顯示動態效果或在 Resolve 中 Inspector 和時間軸的呈現方式
- 任何近似處理的內容,以及以下限制:無音訊、僅靜態圖片,以及高亮在攝影機移動期間停留在畫面上
片段來自磁碟上的檔案,因此移動影片的資料夾或螢幕截圖會導致片段離線。請同時保留 build/assets/ 目錄,因為游標和背景板存放在那裡。
若要從效果庫移除某個品牌的標題,請執行 templates.py "<WORK>" --uninstall。它只會移除該品牌的四個檔案。已建立的時間軸會保留自己的副本:移除後進行的渲染結果仍是相同的。