影片壓縮器的準確度,是工具在工作結束後實際測量並回報的數值,而不是預設按鈕旁邊印出的容量標籤。一個值得信賴的壓縮器會顯示真正的輸入位元組、真正的輸出位元組、實際的輸出尺寸,以及音訊是否成功寫入檔案——並讓你在刪除原始檔之前先驗證結果。Video Compressor 遵循這個原則:它在目前的分頁中將瀏覽器可解碼的影片重新編碼為 WebM,即時播放來源,並根據兩個實際 Blob 大小印出測量出的百分比變化。這裡所說的準確度,意指對實際發生情況的透明揭露,而不是保證一定會縮小。

如果你曾經把一段影片載入網頁工具,看著「壓縮後」的檔案跑完,結果打開下載檔才發現大小一樣——甚至更大——你就已經明白為什麼準確度是個測量問題,而不是行銷問題。真正的百分比變化,來自於同一個工作階段中兩個具體檔案的比較。下文將說明 Video Compressor 會記錄哪些資料、為什麼「更小」的結果取決於內容,以及在決定採用前該如何檢查輸出檔。

video compressor accuracy
Video Compressor 準確度:實際回報的內容

對影片壓縮器而言「準確度」代表什麼

在影片壓縮中,準確度是工具所宣稱的內容與它實際交付內容之間的差距。那個宣稱的可測量部分有明確的定義:輸出檔案的位元組大小、輸出解析度的像素數、輸出時長的秒數,以及音軌是否被擷取。工具無法測量的任何東西——例如「這個預設看起來很棒」——只是主觀意見,並非準確度。Video Compressor 把準確度視為一個回報問題:每次執行後,它會列出 Canvas 所繪製的尺寸、錄製器所產生的位元組,以及這些位元組與瀏覽器實際解碼之來源檔之間的有號百分比變化。

從這個定義可以推出三個細節。第一,準確度是按每次執行計算,而非按預設計算——兩段影片透過「Balanced」執行,可能會得到截然不同的大小,因為它們的動態、底片顆粒和編碼器歷史都不同。第二,準確度包含負值結果:當輸出 Blob 比輸入大時,工具仍會回報真實的百分比,絕不會把成長標示為縮減。第三,準確度是本地的——沒有伺服器紀錄可供比對,因為解碼、Canvas 繪製、MediaRecorder 編碼與下載,全都發生在同一個分頁內。這也是為什麼來源、解碼後的畫格與輸出檔案從不離開裝置。

Video Compressor 在執行後回報的內容

當來源播放結束時,頁面會把錄製完成的檔案讀成 Blob,並與你選擇的輸入 Blob 計算差異。回報會顯示三項你可以採取行動的資訊:

  • 輸出尺寸——錄製期間 Canvas 使用的向下取整的偶數像素寬度與高度。這取決於預設的最大寬度、來源長寬比,以及工具絕不放大這條規則。
  • 輸入與輸出位元組——每個 Blob 實際的位元組大小,不是四捨五入的估計值。有號差異就是下載按鈕旁顯示的百分比。
  • 音訊是否存在——瀏覽器是否透過來源元素公開了可擷取的音軌。如果有,該音軌會被加入錄製串流中;如果沒有,輸出檔就只有影片。

這些數字都不會被修飾或調整以讓結果更好看。較大的輸出與較小的輸出採用相同的回報方式——測量出的百分比變化反映的是實際的 Blob 大小。這就是準確度契約的本質:測量進來、測量出去、有號變化、下載該 Blob。

預設限制與有界位元速率範圍

這三個預設是明確、有界的產品選項,而不是通用的「最佳」標籤。它們設定最大輸出寬度、目標影格率,以及由有界每像素位元數啟發式所選出的影片位元速率,並限制在 180 kbps 到 8 Mbps 之間。下表列出已公布的限制;實際輸出位元組仍取決於內容以及瀏覽器的 MediaRecorder 實作方式。

預設 最大輸出寬度 目標影格率 位元速率範圍 長寬比處理
Small 640 px 24 fps 180 kbps – 8 Mbps(依內容而定) 保留,絕不放大,偶數像素
Balanced 1280 px 30 fps 180 kbps – 8 Mbps(依內容而定) 保留,絕不放大,偶數像素
Quality 1920 px 30 fps 180 kbps – 8 Mbps(依內容而定) 保留,絕不放大,偶數像素

寬度上限很重要,因為它限制了記憶體與 Canvas 配置。影格率目標很重要,因為 MediaRecorder 是在來源播放的同時觀察 Canvas 串流——繪製與錄製以選定的節奏進行,不會更快。每像素位元數啟發式很重要,因為它把位元速率與解析出的輸出尺寸綁在一起,所以 640 × 360 的 Small 執行會得到與 1920 × 1080 的 Quality 執行不同的預算。180 kbps 下限與 8 Mbps 上限則限制了錄製器所要求的位元速率。

為什麼輸出可能比來源更大

顯示的百分比僅根據兩個實際 Blob 的大小計算。這個工具從不宣稱每次結果都會更小,有幾種內容模式確實會讓檔案變大:

  • 低動態動畫或已經高效率編碼的來源——如果輸入是以較慢的預設和較緊的位元速率編碼的,那麼在相同的有效預算下重新編碼,可能會產生大小相近或更大的 WebM。
  • 雜訊、底片顆粒與感測器雜訊——隨機的高頻細節在任何編解碼器中都會耗用位元數;透過 MediaRecorder 的 VP9 或 VP8 通道,可能無法像原始編碼器那麼緊密地壓縮它。
  • 畫面晃動與快速變化的細節——高動態畫格需要更多位元數,而即時錄製器無法執行多pass分析來有效率地分配位元。
  • 瀏覽器編碼器的差異——錄製器會依據瀏覽器所回報的支援,依序嘗試 VP9、VP8,再試通用的 WebM。因此即使使用相同的預設和來源,Chrome、Firefox 與 Safari 之間的輸出位元組也可能不同。

誠實的規則是:如果百分比為正,新檔案就比來源大。換用更緊的預設、接受目的端能容忍這個結果,或把檔案送進支援雙pass速率控制的維護良好的桌面編碼器。

如何壓縮並驗證結果

  1. 開啟 Video Compressor 並選擇一個瀏覽器可解碼的影片。檔案不得大於 500 MiB、時長不得超過五分鐘、每邊最多 4096 像素、解碼後面積最多 3840 × 2160 像素。
  2. 選擇 Small、Balanced 或 Quality。每個預設都會設定最大輸出寬度、影格率目標,以及有界的每像素位元數預算——它們都不會放大來源或扭曲長寬比。
  3. 按一下開始並保持分頁開啟。頁面會即時播放來源,將每個顯示的畫格繪製到 Canvas 上,再透過 MediaRecorder API 用瀏覽器回報的第一個支援的 WebM MIME 錄製該 Canvas 串流。因此兩分鐘的來源大約需要兩分鐘,而不是瞬間完成。
  4. 觀察百分比變化。它是輸入與輸出 Blob 大小之間的有號差異——新檔較小為負,較大為正。兩種結果都不會被悄悄重新標示。
  5. 下載 WebM 並在刪除原始檔之前完整播放一次。確認畫面、聲音、時長,以及該檔案能在你接下來要使用的應用程式中開啟。

如果第一個預設不符合你的目的端,請用同一個來源跑不同的預設。先前的執行紀錄不會被重複使用;任何暫時的 Object URL 都會在你選擇新檔案、更換預設、取消或離開頁面時被撤銷。

影響準確度的限制

有些失敗是可見的,有些在純網頁的壓縮器中是靜默的。Video Compressor 會把可見的錯誤顯示出來:無效的檔案、不支援的解碼器、時長超過上限、畫面超過上限、缺少 Canvas 串流、或沒有可用的 WebM MIME,這些情況都會產生錯誤且不下載任何檔案。不會為了讓結果符合條件而悄悄截斷。較不顯而易見的限制則與編解碼器和瀏覽器相依性有關:

  • 解碼取決於瀏覽器。.mp4 或 .mov 之類的副檔名並非保證——能否成功解碼仍取決於目前瀏覽器中安裝的編解碼器。有效的副檔名無法讓不支援的編解碼器變得可解碼。
  • 錄製取決於 MediaRecorder 支援。此工具使用瀏覽器在 VP9、VP8 與通用 WebM 中所回報的第一個 MIME 來錄製 Canvas 串流。不同的瀏覽器即使在同一個來源和預設下,也會產生不同的位元組。
  • 音訊擷取是有條件的。當來源透過來源元素公開可擷取的音軌時,工具會將其加入錄製的串流中;否則輸出就只有影片。在即時處理期間來源會以可聽的音量播放,因此請使用裝置音量,並在下載後同時確認畫面與聲音。
  • 容器功能不會被保留。字幕、章節、附件、旋轉標記、色彩元資料、HDR 訊號以及許多容器特有的欄位都不會被帶入 WebM 輸出中。只能使用 WebM 容器,因為瀏覽器的 MediaRecorder 對產生的 MP4 支援仍然不一致。

什麼時候桌面編碼器更準確

Video Compressor 是本機的瀏覽器工具,而不是封存工具。若需要具確定性、跨平台的輸出、精確的編解碼器設定檔、雙pass速率控制、固定關鍵影格間隔、字幕保留,或一份可在數月後重新編碼並逐位元組重現的母版,請使用維護良好的桌面編碼器,例如搭配審核過指令的 FFmpeg。Video Compressor 所依賴的 MediaRecorder 管線無法提供這些保證,畫面上顯示的百分比是對該次特定執行的測量結果,而不是對下一次執行的承諾。

這也是為什麼在播放完完整的輸出檔、確認大小、時長、畫面、聲音與相容性都符合目的端需求之前,原始檔案都值得保留。準確度是被驗證出來的,而非被假設的——而驗證發生在檔案已存到磁碟上、並在你真正打算使用的應用程式中之後。

相關閱讀:Video Compressor 替代方案:瀏覽器型,無需上傳

相關閱讀:從影片擷取畫格:準確度限制詳解