無需上傳, 100% 本機處理, 無需帳戶

文章

提取視頻幀用於縮圖和聯繫表

視頻是靜止圖像的序列。從中取出一張圖像可以得到縮圖、封面或聯繫表。當您了解視頻編碼器如何儲存幀以及哪些時刻值得捕獲時,結果會更清晰且更可預測。

幀與幀率

視頻檔案是一系列靜止圖像,以足夠快的速度顯示以創造運動的幻覺。每秒顯示的圖像數量是幀率,以 fps 表示。常見值為電影的 24 fps、PAL 廣播的 25 fps、網路視頻的 30 fps 和遊戲影片的 60 fps。在 24 fps 時,一部兩小時的電影包含約 172,800 個單獨的幀。每個幀對應時間中的一個特定時刻;提取一個幀就將那個時刻凍結為獨立的圖像。幀率還決定了批量提取時每秒影片中獲得多少幀:在 30 fps 時,從一分鐘的視頻中提取每一幀可以得到 1,800 張圖像,這通常遠超所需。以較低的幀率提取,或在支援的工具中每隔 N 幀提取一次,是減少數量同時仍覆蓋完整時長的實用方法。

一條時間軸條,顯示每秒影片中的 24 個單獨幀,每幀下方可見幀號和時間戳。

關鍵幀與插值幀

現代視頻編碼器不將每一幀儲存為完整圖像。它們使用三種幀類型來節省空間。I-frame,也稱為關鍵幀,是一個完整的、自包含的圖像。P-frame 只儲存自上一個 I-frame 或 P-frame 以來發生變化的像素。B-frame 相對於前一幀和後一幀儲存變化,需要兩側的幀才能重建。由於 P-frame 或 B-frame 本身是不完整的,解碼一個需要周圍的參考幀。如果這些參考幀包含運動模糊或過渡,重建的圖像會繼承該模糊。相比之下,I-frame 是獨立解碼的。它始終清晰,因為它不從鄰近幀借用任何東西。提取用作縮圖的幀時,落在 I-frame 上可以得到最乾淨的結果。大多數編碼器在場景切換處放置 I-frame,這些自然是清晰的起始點。

選擇正確的時刻

即使是解碼良好的 I-frame,如果捕獲的時刻不理想,也可能成為糟糕的縮圖。幾個因素會降低縮圖品質。當相機或主體在幀曝光期間快速移動時,就會出現運動模糊;產生的拖影使幀看起來柔和,即使解碼是乾淨的。在溶解或淡入淡出中間捕獲的過渡幀包含兩個疊加的圖像,很少適合作為獨立圖片。曝光不足或過度曝光的幀,常見於場景開始前自動曝光穩定之前,在陰影或高光部分失去細節。最佳縮圖幀來自有清晰動作或表情、良好照明和穩定相機的時刻。使用顯示精確時間戳的播放器瀏覽視頻,讓您在提取前識別這些時刻。在播放器中暫停看起來好的幀,作為靜止圖像匯出通常也會很好。

一個視頻播放器在動作中的主體的光線良好、穩定的幀上暫停,角落顯示時間戳。

匯出:解析度、格式與每隔 N 幀

提取幀時,匯出的圖像應與視頻的原始解析度相符。放大會引入插值偽影;縮小會丟棄您可能需要的像素。1080p 的視頻產生 1920x1080 像素的圖像,4K 視頻產生 3840x2160 的圖像。對於格式,PNG 精確保留每個像素,是需要最大清晰度用於編輯或進一步縮放時的正確選擇。JPEG 較小,適合預覽或分享,但在銳利邊緣附近引入壓縮偽影。如果您正在製作聯繫表(覆蓋完整時長的小代表幀網格),以固定幀率提取,而非逐幀提取,是標準做法:從 30 fps 的來源要求每秒 1 幀,可以得到每秒一張畫面的影格;使用 5 或 10 fps 等較高的幀率,則可以得到更密集的一組畫面供仔細檢視。確切的幀率取決於您需要多少細節,以及您想要處理多少圖像。

使用 video-extract-frames 在本地完成

Sunasty 上的 video-extract-frames 工具使用編譯為 WebAssembly 的 FFmpeg,完全在瀏覽器內部解碼您的視頻。您放入一個檔案,選擇每秒 1 到 30 幀之間的幀率,選擇 PNG 或 JPEG,工具就會以該幀率在您瀏覽器的記憶體中解碼影格,並將結果以個別下載的方式提供,每次執行上限為 300 張。您的視頻檔案從不離開您的裝置。在整個過程中,沒有任何位元組傳送到伺服器。這對包含個人或敏感內容的影片尤為重要:家庭錄影、訪談,或編輯前的原始素材。瀏覽器將視頻載入 RAM 中的虛擬檔案系統,執行 FFmpeg 解碼,然後將圖像返回給您。取捨是解碼透過 WebAssembly 在您的 CPU 上以軟體方式完成,因此長時間或高解析度的視頻需要比原生應用程式更多的時間。對於提取少量幀或從短片製作聯繫表,速度是實用的。

本文涉及的工具

常見問題

為什麼我提取的幀看起來模糊?

最常見的原因是在有運動的時刻落在 P-frame 或 B-frame 上。這些幀儲存差異而非完整圖像,源素材中的運動模糊會進入解碼中。嘗試提取最近的 I-frame(對應場景切換或定期關鍵幀),以獲得更清晰的結果。

應該將幀匯出為 PNG 還是 JPEG?

如果您計畫編輯幀、放大它,或在壓縮偽影會可見的環境中使用它,請選擇 PNG。如果您需要較小的檔案用於快速分享或預覽,且輕微的品質損失是可以接受的,請選擇 JPEG。對於以固定小尺寸顯示的縮圖,以合理品質設定的 JPEG 通常就足夠了。

如何從視頻製作聯繫表?

請選擇一個夠低的幀率,讓靜態畫面的數量控制在可管理的範圍內,而不是設定單一時間戳。對於一段兩分鐘的片段,每秒 1 幀會得到約 120 張畫面,已足夠密集,可以從中挑選出理想的網格;不論如何,每次執行的輸出上限都是 300 張。目前沒有比每秒 1 幀更低的幀率了,因此若想要更稀疏的畫面表,請以每秒 1 幀提取,再自行保留最終網格所需的畫面。