將影片壓縮到 50 MB 代表重新編碼一個較大的來源檔案,讓產生的 WebM 檔案大小約為 50,000,000 位元組或更少,而 Video Compressor 是無需上傳就能完成這項工作的最簡單方式。這個基於瀏覽器的工具會將來源檔案的每一幀繪製到一個有邊界的 Canvas 上,使用目前瀏覽器提供的 WebM 編解碼器錄製該串流,並在來源播放完畢時回報實際的輸入與輸出位元組數。由於輸出大小取決於解析度、影格率、動態、雜訊以及預設所選的位元率,因此沒有任何瀏覽器工具能保證每個片段都產生精確的 50 MB 檔案。Video Compressor 能保證的是:編碼結果受預設值限制,位元率被限制在 180 kbps 到 8 Mbps 之間,並顯示實際的壓縮前後大小,讓你能自行判斷結果是否符合你的 50 MB 目標。

compress video to 50mb
compress video to 50mb

為何無法保證精確達到 50 MB

影片壓縮取決於內容,光是這個事實就讓任何誠實的工具無法承諾每個來源檔案都能產生精確的檔案大小。低動畫的動畫可以壓縮到原始大小的一小部分,而雜訊多、有顆粒、鏡頭晃動或快速變化的細節則可能難以縮小。原本就已經有效率的來源,有時產生的輸出大小會與輸入相近,甚至比輸入更大,而 Video Compressor 顯示的百分比僅根據兩個實際的 Blob 大小計算 — 工具並不會把較大的檔案標示為縮減。

這也是為何單一預設無法涵蓋所有「壓縮到 50 MB」的工作。乾淨光線下兩分鐘的訪談影片,與有群眾動作的兩分鐘運動精彩片段,透過同一個編碼器壓縮的結果會差異極大。正確的做法是執行一個預設,讀取工具回報的位元組變化,再決定結果是否符合你的 50 MB 目標。如果不符合,就執行更緊的預設,並將新的位元組變化與第一次嘗試進行比較。

Video Compressor 對來源影片做了什麼

整個管線都在目前的瀏覽器分頁中執行,這就是為何資料不會離開你的裝置。你選擇一個檔案、挑選一個預設,然後頁面會在本機播放來源影片。影片元素顯示的每一幀都會被繪製到一個不透明的 Canvas 上,工具接著透過 MediaRecorder,使用瀏覽器回報為支援的 WebM 編解碼器錄製該 Canvas 串流。來源結束時,工具會解析 Segment Info 與 TimestampScale,將 Matroska Duration 浮點數以 timestamp-scale 刻度插入,使下載的 WebM 具有有限持續時間,接著計算帶正負號的位元組變化,並提供下載產生的檔案。Canvas 串流由 HTMLCanvasElement.captureStream() 產生,這就是為何編碼會以預設選擇的速率即時進行。

為了讓記憶體、Canvas 配置與即時工作保持在可處理範圍內,工具將輸入限制為 500 MiB、五分鐘、任一邊 4096 像素,以及 3840 × 2160 的解碼區域。檔案名稱可能是 MP4、WebM、MOV、M4V 或 Ogg,但是否能成功解碼仍取決於目前瀏覽器中安裝的編解碼器 — 有效的副檔名無法讓不支援的編解碼器變得可解碼。任何超出這些限制的狀況都會產生錯誤且不下載,而不是產生悄悄截斷的檔案。

逐步將影片壓縮到接近 50 MB

實際操作流程很短,因為一旦選好預設,繁重的工作就會自動完成。開啟工具、放入片段、挑選最符合你期望大小的預設,然後讓來源影片播放到結束。

  1. 在目前的瀏覽器分頁中開啟 Video Compressor。
  2. 選擇一個瀏覽器可解碼的影片,大小不超過 500 MiB、五分鐘,或 3840 × 2160 像素的解碼區域。
  3. 根據你的 50 MB 目標有多嚴格,選擇 Small、Balanced 或 Quality,然後開始壓縮。
  4. 保持分頁開啟,讓來源影片即時播放 — 編碼會跟隨來源播放進行,因此兩分鐘的來源大約需要兩分鐘,而不是瞬間完成。
  5. 當來源結束時,讀取工具回報的實際輸出尺寸、輸入位元組、輸出位元組以及帶正負號的百分比變化。
  6. 下載 WebM 檔,在你打算分享的平台上從頭到尾播放一次,然後才刪除原始檔。

預設取捨一覽

這三個預設是明確的產品選擇,而不是對通用最佳值的宣稱,因此下表的比較直接來自工具的文件化行為。每個預設都保留來源長寬比、永不放大來源,並將輸出尺寸向下取整為偶數像素值,以提升編解碼器的相容性。

預設 最大寬度 目標影格率 典型用途
Small 640 px 24 fps 螢幕分享類型影片的最緊湊檔案大小
Balanced 1280 px 30 fps 以 50 MB 為目標的一般分享用途
Quality 1920 px 30 fps 當來源本身已有餘裕時,提供更好的細節

所選的預設也會驅動一個每像素位元數的啟發式,用以設定要求的錄影位元率,接著會被限制在 180 kbps 到 8 Mbps 之間。這個限制就是為何一個微小、低動態的片段無法被壓到每秒幾百 kb 以下,而一個雜訊多的 4K 片段也不會被灌到超過上限,因此每個預設在給定來源下都會落在可預測的大小區間。

當輸出仍然大於 50 MB 時

如果結果超過 50 MB,通常正確的做法是降低一級預設並重新執行來源,而不是用相同設定反覆重試。從 Quality 切換到 Balanced 會將最大寬度從 1920 降到 1280 像素,並改變位元率目標;從 Balanced 切換到 Small 則會同時降低寬度與影格率。由於工具每次執行都會回報實際的位元組變化,因此可以並排比較兩個輸出,並保留較小的檔案。

值得留意的是,有些東西在多次執行之間並不會改變。音訊只有在瀏覽器透過 HTMLMediaElement.captureStream 公開可擷取軌道時才會被納入,因此在即時處理過程中將來源靜音,可能也會一併移除擷取到的音訊。字幕、章節、附件、旋轉標記、色彩中繼資料與 HDR 訊號都不會保留,因此在刪除原始檔之前,應先檢查下載的 WebM 的畫面、音訊與相容性。

當你確實需要嚴格的 50 MB 上限時

瀏覽器編碼器無法像雙段速率控制那樣承諾目標檔案大小,因為 MediaRecorder 是即時觀察 Canvas 串流,而位元率在編碼開始前就已選定。對於精確的 50 MB 輸出 — 例如當目的端拒絕任何超過上限的檔案 — 一個有維護且經過審閱命令列的桌面編碼器是更安全的選擇,而瀏覽器工具產生的 WebM 可以作為快速的首輪產出,在嚴格版本備妥前先分享出去。

對於「約 50 MB」即可接受的日常分享,上述三步驟流程就已足夠。挑選適合來源的預設、觀察工具印出的位元組變化,並在從頭到尾播放一次後才下載檔案。當實際目標是不同的數字時,同樣的做法也適用,這也是 將影片壓縮到 25 MB 而無需上傳 指南所涵蓋的情況。

若想深入了解,請參閱 在 Android 上無需上傳即可從影片擷取影格