MOV 轉 MP4
同一段影片、同一段聲音,只是換一個外殼 —— 而且什麼都不上傳。
本機處理把檔案拖進來,或點擊選擇
支援 MOV, QT, M4V。沒有大小上限,不用註冊。
選一個檔案,這一頁會先把裡面的軌讀出來給你看 —— 編碼、長度、關鍵影格間隔 —— 然後才動手寫檔。全程沒有任何東西被上傳。
MOV 與 MP4 大多數時候是同一段錄影裝在兩種外殼裡。這個工具把外殼拆掉、換成 MP4 的,過程中把每一個已經壓縮好的影音 packet 原封不動搬過去。沒有重新編碼這一步,所以沒有東西可以損失:出來的畫面跟進去的畫面在位元組層級完全相同。
為什麼 MOV 跟 MP4 底下常常是同一個檔案
QuickTime 檔案格式是 Apple 在 1990 年代初設計的。後來 MPEG 需要一個容器來裝 MPEG-4,就是拿 QuickTime 當起點。結果是 MOV 與 MP4 共用同一套內部結構 —— 一棵由 moov、trak、mdat 這種四個字母命名的 box 組成的樹 —— 也共用同一套描述軌道、時間與編碼的方式。主要差別是檔案開頭附近一個很短的「品牌」欄位,宣告它遵循哪一份規格。
這就是為什麼兩者互換不需要動到影片本身。壓縮好的影格已經是 MP4 期待的排列方式,會變的只有外面那張標籤與幾個記帳用的 box。這件事叫 remux(換容器),跟 transcode(重新編碼,也就是把每一格解出來再壓一次)是完全不同的操作。
實際差別很具體:這一頁的處理時間是毫秒級而不是分鐘級,你的檔案不會變大也不會變模糊,而且跑兩次不會讓畫質退化。6 秒的 720p 大約 13 毫秒;1080p 一分鐘大約 87 毫秒,換算下來每秒搬動約 500 MB 的影音資料。
MOV 真正會出問題的地方,以及不會出問題的地方
很容易順口說「瀏覽器打不開 MOV」。那句話是錯的 —— Chromium 系的瀏覽器播得動很多 MOV,即使那個標準的格式偵測呼叫回傳的是空字串。所以如果一支 MOV 在你的瀏覽器裡播得動、卻在別的地方被退掉,問題從頭到尾都不在瀏覽器。
真正的摩擦在別處。上傳表單、線上課程平台、廣告平台、智慧電視、Android 手機,以及很多 Windows 軟體,是看副檔名或那個品牌欄位來決定收不收 —— 跟裡面裝什麼無關。Windows 上的剪輯軟體也一樣。把副檔名改掉沒有用,因為檔案裡面的品牌欄位還是寫著 QuickTime。把容器重寫一次才有用,而這一頁做的就是這件事。
有一種情況這個工具老實說解決不了。專業攝影機與剪輯軟體產生的 MOV 有時裝的是 ProRes、DNxHD 或 QuickTime Animation。MP4 沒有位置可以放這些編碼,所以不存在任何「只換外殼」的做法能讓它變成可播的 MP4,唯一的路是真的重新編碼。如果我們沒辦法確認一條軌的編碼、無法安全地把它搬過去,這一頁會直接說明,而不是產出一個「看起來正常、播起來不對」的檔案。
iPhone 錄影、HEVC,以及為什麼不需要解碼器
iOS 11 之後 iPhone 錄影預設是把 HEVC(也叫 H.265)裝在 MOV 容器裡,因為 HEVC 大約用一半的位元率就能得到接近的畫質。這也是大部分人會找到這一頁的原因:檔案在手機上播得好好的,然後電腦上沒有一個東西願意收。
HEVC 換容器跟 H.264 一模一樣。把一個壓縮好的 packet 從一個容器搬到另一個容器全程不會解碼它,所以這一頁不需要 HEVC 解碼器就能完成工作 —— 而這件事我們是驗過的,不是假設的:一次是在執行期間計算解碼器被建立了幾次(零次),一次是把 HEVC 解碼整個關掉再跑一遍。兩次搬出來的 packet 完全相同。
有一個後果值得直說,因為它看起來很像失敗其實不是。如果你的裝置沒有 HEVC 解碼器,那台機器上沒有任何東西顯示得出畫面,包括這一頁。播放器在那種情況下會回報正確的時長、播出聲音、然後給你一塊黑色方框 —— 那跟「轉檔壞了」看起來一模一樣。所以這一頁會在你開始之前先檢查解碼器並告訴你,而不是把那塊方框丟給你自己解讀。檔案本身是完整正確的:下載後用 QuickTime、VLC、「照片」,或用它原本那支手機打開就看得到。
如果你手上其實是 iPhone 的照片而不是影片,對應的工具是「HEIC 轉 JPG」與「HEIC 轉 PNG」,運作方式一樣 —— 在你的瀏覽器裡,什麼都不上傳。
怎麼確認真的沒有重新編碼
這裡每一次轉換都會回報搬了幾個影片 packet 與幾個音訊 packet。一個 packet 是一個壓縮單位,影片通常就是一格。如果數量跟來源相同、而且整件事只花了幾毫秒,那就沒有編碼器在跑:在瀏覽器裡編一分鐘的 1080p 要二十幾秒,大約是搬運的 250 倍。
想要更硬的檢查就直接比媒體資料本身。ffprobe 這類工具可以印出每一個 packet 的雜湊值,換容器的話兩邊會逐個吻合。這一頁上線前就是這樣驗的,因為比較鬆的檢查不夠用:一個被偷偷重新編碼過的檔案照樣播得動、時長照樣正確、編碼字串照樣一樣。只有比位元組才分得出來。
隱私那一面可以用同樣的精神查。打開瀏覽器的開發者工具、切到 Network 分頁,然後跑一次轉換。你的檔案不會出現在任何一筆請求裡,因為沒有伺服器在接收。這個網站送出的 Content-Security-Policy 標頭把網路連線限制在我們自己的來源,所以就算真有腳本想送出去,你的瀏覽器也會先擋下來。
實際的限制
我們不設檔案大小上限、不設每日額度、不加浮水印、不用註冊。真正的天花板是你的裝置:完成的檔案會先在記憶體裡組起來才給你下載,所以要預留大約「輸出大小 + 一百多 MB 的工作空間」。桌機上 500 MB 以內是舒服的,手機請砍半。
超過那個值的時候頁面會先警告你,而不是讓分頁安靜死掉。還是值得試 —— 那是一個參考值不是一道牆 —— 但如果分頁重新載入了,原因就是這個。針對好幾 GB 的檔案「邊做邊寫進磁碟」的模式我們還沒做,與其暗示一個還沒交付的容量,不如直接說。
常見問題
畫質會變差嗎?
不會。壓縮好的影音是直接搬過去的,全程沒有被解碼,所以結果是位元組完全相同的媒體裝在新容器裡。你想跑幾次都可以,不會有世代損失。
為什麼輸出跟輸入差不多大?
因為裡面裝的是同一份影音資料。變的只有容器的記帳資訊,通常前後差幾 KB。如果一個工具讓檔案小很多,那它是重新編碼過了。
我的 MOV 是 iPhone 的 HEVC,可以嗎?
可以。HEVC 跟其他編碼一樣直接搬,而換容器從來不需要解碼,所以連沒有 HEVC 解碼器的機器也做得出來。在那種機器上結果不管在哪裡播都會是有聲音沒畫面(包括這一頁),但檔案本身是好的,而且頁面會在你開始之前就警告你。
為什麼它拒絕我的檔案?
幾乎都是兩種原因:影片軌是 MP4 沒有位置可放的編碼(ProRes、QuickTime Animation 之類),或者編碼標記根本認不出來 —— Dolby Vision 錄影就是這樣。與其寫出一個播起來不對的檔案,這一頁會停下來說明。
我直接把副檔名改成 .mp4 不行嗎?
有時可以有時不行,那是最糟的組合。檔案裡面的品牌欄位還是寫著 QuickTime,所以嚴格的播放器與上傳檢查照樣會退。把容器重寫一次才會連那個欄位一起改掉。
第二條音軌或字幕會怎樣?
只有第一條影片軌與第一條音訊軌會被搬過去,而且如果原本還有更多,頁面會告訴你。不會安靜丟掉任何東西。