影片壓縮可能產生比原始檔案更大的檔案、遺失音訊、捨棄字幕,或回傳一段瀏覽器無法讀取時長的剪輯,且單次執行就可能同時引發多項這類失敗。結果取決於來源影片、目標位元率、瀏覽器可用的編解碼器,以及工具最初擷取影格的方式。這些失敗並非罕見的極端情況:基於瀏覽器的編碼器上每個預設都是用大小換取品質,而這種取捨會因剪輯而異,因此某個設定能讓一部影片縮小,卻可能讓另一部影片變大。一個有用的思考模型是:壓縮是編碼器的位元預算與輸入不可預測性之間的協商,而失敗模式只不過是該協商破裂的各個節點。

下方的對照表列出每種失敗模式、解釋其發生原因,並說明 Video Compressor 如何誠實地處理它,而不是把它藏在一個籠統的「壓縮」按鈕背後。在你按下 Start 之前先閱讀,可避免誤刪一份你仍然需要的原始檔案。

what can go wrong when i use video compression
使用影片壓縮時可能出錯的地方

壓縮出錯的位置:失敗對照表

大多數失敗的壓縮執行都屬於以下其中一類。事先為它們命名,能讓你在看到輸出時更容易辨識,而不是事後去追查錯誤的修正方式。

失敗模式你會看到的情況發生原因
輸出比來源大百分比變化顯示正數來源已使用高效率編解碼器,或影片雜訊過多,因此在固定位元率下重新編碼無法使其縮小
音訊缺失播放時無聲瀏覽器未提供可擷取的音軌,或該音軌未被附加至 MediaRecorder 串流
字幕、章節或色彩中繼資料消失播放器未顯示字幕與章節列表基於 Canvas 的重新編碼僅繪製像素,不會複製側車資料、容器標記或 HDR 訊號
與編解碼器相關的播放行為同一預設在 Chrome、Firefox、Safari 會產生不同的檔案MediaRecorder 會依據瀏覽器回報的支援情況,挑選 VP9、VP8 或通用的 WebM
工作停止或分頁凍結未下載,或錄製提前結束輸入超過 500 MiB、5 分鐘或 3840 × 2160、解碼器缺失,或在即時處理過程中分頁被關閉

這些失敗嚴格來說都不是錯誤,而是將編碼器跑在瀏覽器內部時可預見的後果。一個會提醒你、回報實際位元組數、並拒絕造假結果的工具,遠比一個默默產出無音訊檔案並顯示綠色勾號的工具更有用。

當輸出比來源還大時

壓縮並不保證位元組一定會變少。Video Compressor 工具會向瀏覽器要求介於 180 kbps 與 8 Mbps 之間的特定位元率,再要求 MediaRecorder 遵循該請求。若你的來源已經以數 Mbps 的 H.264 或 HEVC 編碼,而你選擇了 Quality 預設,錄製器可能被要求使用高到讓 WebM 容器與所選編解碼器最終寫入比輸入更多位元組的位元率。你之後看到的百分比數字,是依據兩個實際的 Blob 大小計算而成,工具絕不會把較大的檔案標示為縮減。

有三種來源特性特別容易讓輸出變大:

  • 已經是高效率的編解碼器。現代的 HEVC 檔案幾乎沒有剩餘冗餘可供刪除。
  • 大量的雜訊或顆粒。隨機的像素變化會擊敗省位元率的啟發式機制,迫使編碼器將位元花費在視覺雜訊上。
  • 快速運動、相機晃動或頻繁的場景變換。編碼器無法重複使用影格,因此每個影格都帶有完整細節。

若某個預設產生大小相同或更大的檔案,務實的作法是嘗試較小的預設、若結果符合用途則予以接受,或改用具備兩段式速率控制的桌面編碼器以取得更嚴格的目標大小。

消失的音訊、字幕與其他元素

將影格繪製到 Canvas 的瀏覽器型編碼器,只能擷取 Canvas「看見」的東西,也就是像素。音訊只有在瀏覽器在來源元素上提供可擷取的音軌、且工具將其附加到錄製串流時才能保留下來。字幕、章節、附件、旋轉標記、色彩中繼資料與 HDR 訊號存在於像素串流之外,因此 Canvas 處理流程無法保留這些資訊。這並非錯誤,而是把瀏覽器當作轉碼器而非結構化解多工器所付出的代價。

實際的後果會出現在一些在播放結果之前很容易忽略的地方:

  • 當來源使用瀏覽器無法解碼的編解碼器時,即使副檔名看起來正常,仍可能產生無聲的結果。
  • 側車字幕、內嵌字幕與章節標記將無法保留。
  • 直向影片不會保留其旋轉標記,請在上傳前先將檔案旋轉至正確方向。
  • 輸出不會保留 HDR 訊號與色彩中繼資料。

在刪除原始檔之前,請從頭到尾播放下載的檔案,並同時檢查影像與聲音。若上述任何元素對你的目的地很重要,請在該目的地上驗證檔案,而非僅在你執行壓縮的裝置上驗證。

你應該預期到的瀏覽器與編解碼器差異

兩個瀏覽器在相同的預設與來源檔案下,可能產生大小不同、視覺品質也略有差異的 WebM 檔案。MediaRecorder 的支援會因引擎而異,因此錄製器所選的編解碼器會隨瀏覽器不同而改變。錄製器會先嘗試 VP9,再嘗試 VP8,最後才嘗試通用的 WebM MIME,並採用目前瀏覽器回報為支援的第一個選項,這在 MDN MediaRecorder 參考文件 中有記載。容器本身固定為 WebM,因為透過 MediaRecorder 由瀏覽器產生 MP4 在各引擎間仍不一致。

在大多數日常用途中這並不明顯。但當你的目的地平台、播放器或剪輯套件有嚴格的編解碼器要求時,這點就變得重要。若你需要特定的編解碼器設定檔、兩段式編碼、固定關鍵影格間隔,或可預期的跨平台輸出,選擇一個有維護且經審核指令的桌面工具才是正確選擇。瀏覽器重新編碼是一種快速、本機的便利手段,而非交付規格的保證。

限制、錯誤與中途停止的工作

Video Compressor 工具將輸入上限設為 500 MiB、300 秒、任一邊 4096 像素,以及 3840 × 2160 的解碼區域。這些上限是為了限制記憶體、Canvas 配置,以及頁面執行的即時工作量。當輸入超過任何上限、遇到不支援的解碼器,或 Canvas 串流無法產出影格時,會觸發錯誤且不會下載任何檔案。不會靜默地截斷內容。

即時編碼本身也有其失敗模式。由於 MediaRecorder 在來源播放時觀察 Canvas 串流,兩分鐘的來源處理起來大約也需要兩分鐘。關閉分頁、挑選新檔案、更換預設或按下取消,都會讓進行中的工作失效,並釋放頁面配置的暫存 Object URL。若你需要暫時離開,請保持分頁開啟;若聲音造成困擾,請使用裝置音量,但不要以為靜音對擷取中的音軌沒有影響,因為錄製器執行期間來源會以可聽見的方式播放。

為無聲的螢幕錄影選錯預設、挑選一個沒有解碼器的 4K 來源,或嘗試壓縮一堂長講座,都會在介面上產生完全相同的錯誤:沒有出現下載。修正方式永遠相同:閱讀訊息、調整來源或預設,然後再試一次。

每個預設實際做了什麼

這三個預設是透明的產品選擇,並非對通用最佳值的宣稱。每個預設都會保留來源長寬比、永不放大來源,並將輸出尺寸向下取整為偶數像素值以維持編解碼器相容性。位元率由有界限的每像素位元啟發式機制決定,並限制在 180 kbps 至 8 Mbps 之間。

預設最大寬度目標影格率典型用途
Small640 px24 fps快速分享、重視檔案大小更勝細節
Balanced1280 px30 fps一般用途播放,檔案大小合理
Quality1920 px30 fps盡可能保留來源細節

這些都無法保證輸出會比來源小。低動畫幅的動畫可能會大幅縮小;雜訊多的影片、已經是高效率的來源,或激烈的運動,則可能產生相近甚至更大的檔案。

如何順利地執行 Video Compressor

  1. 挑選瀏覽器可解碼的影片,檔案不大於 500 MiB、長度不超過 5 分鐘、解碼區域不超過 3840 × 2160。
  2. 開啟 Video Compressor 頁面,從你的裝置選擇檔案。
  3. 依需求選擇 Small、Balanced 或 Quality:要分享就選較小的預設,要保留細節就選較大的預設。
  4. 開始壓縮,並在來源即時播放期間保持分頁開啟;不要切換檔案或關閉分頁。
  5. 執行完成後,請閱讀回報的輸出尺寸、輸入與輸出位元組數,以及測量得到的百分比變化。
  6. 下載 WebM 並完整播放,包括影像、聲音與時長,再刪除原始檔。

若百分比變化不是你想要的結果,請嘗試不同的預設並加以比較。回報的數字是該次執行的真實情況,而非行銷估計,並反映錄製器實際產生的輸入與輸出位元組。

在刪除原始檔之前檢查結果

確認結果最可靠的方式,是在與你的目的地同類型的播放器上播放。能在 Chrome 中開啟的檔案,可能在聊天應用程式、剪輯軟體或電視瀏覽器中卡住。請留意可見的瑕疵、音訊中斷、時長顯示為零,以及位元率看起來與解析度相比過低的情況。如需更多驗證相關的內容,影片壓縮後如何檢查結果指南詳細說明了各項檢查步驟。

請保留原始檔,直到你確認壓縮後的檔案符合目的地的所有要求。工具回報的位元組數描述的是該次執行,而非目的地的相容性;只有完整的播放測試才能告訴你這場協商是否真的奏效。

延伸閱讀:影片壓縮中 500 MiB 上限的意義。