在瀏覽器中使用 FFmpeg 直接將 AVI 轉檔為 MP4:對 M3 Mac 的壓力測試以及 WebAssembly 的真相

最近,我花了一些時間開發了一款小工具:這是一個完全在瀏覽器中運作的影片轉檔工具,核心由 FFmpeg 驅動。為了測試它的能耐,我拿了我的 MacBook Air M3(16GB RAM)當作白老鼠,直接在 Google Chrome 上將一個舊的 AVI 檔案轉檔成 MP4。
得到的結果既好笑又在技術層面上相當迷人:計時器停在了精準的 747.44 秒(差不多是 12.5 分鐘多一點),而以低溫聞名的 M3 晶片也讓鋁合金機身摸起來明顯發熱了。
那麼,為什麼一台配備了當今市面上最強大晶片之一的電腦,僅僅為了改變一部影片的格式,就需要「滿頭大汗」地跑上超過 12 分鐘呢?在本文中,我們將剖析這個過程背後的技術邏輯,並回答最終極的問題:如果它這麼慢,為什麼我們還需要基於瀏覽器的處理工具?
1. 第一個瓶頸:Remux 與 Transcode
這次測試花費這麼長時間的最大原因,其實不是機器的問題;而是原始檔案。我選擇的是一個較舊的 AVI 格式檔案,使用的是像是 DivX 或 Xvid 這類傳統的壓縮標準(Codecs)。
在影片處理的世界裡,你必須區分兩個核心概念:
- Remux(複製 - 速度極快): 如果你的來源影片已經使用了現代的 Codec(例如 H.264),FFmpeg 只要把影像和聲音的「核心」抽出來,然後塞進一個新的 MP4「外殼」裡就好。這個過程基本上就像是把資料從一個資料夾複製到另一個資料夾,只需要幾秒鐘的時間。
- Transcode(解碼與編碼 - 速度極慢): 因為我的 AVI 檔案使用了與 MP4 不相容的過時標準,FFmpeg 被迫「打掉重練」。它必須先將舊影片的每一個畫格(Frame)進行 Decode(解碼),然後再把這一大堆畫格 Encode(編碼) 成現代的 H.264/H.265 標準。這種逐個像素運算的過程,非常消耗 CPU 效能。
2. 瀏覽器中 WebAssembly (WASM) 的現實面
...
