M4V 檔案格式
Apple 的 MPEG-4 視訊變體,常見於帶 DRM 的 iTunes 影片。
- MIME 類型
- video/x-m4v
- 副檔名
- .m4v
- 分類
- 影片
Magic number(檔案簽章)
| 0x00000004 | 66747970 | ftyp | ISO-BMFF 'ftyp' box |
| 0x00000008 | 4D345620 | M4V | brand 'M4V ' |
關於 M4V 格式
M4V 就是 iTunes Store 當年出貨的那種 MP4。容器是 ISO base media file format,box 是同一批 box,視訊通常是 H.264、音訊是 AAC — 跟一般 .mp4 唯一的結構差異,是 FileTypeBox 裡的品牌識別字串,以及在購買的內容上,樣本描述裡多出來的一層 FairPlay 加密。Apple 用另一個副檔名,是為了讓自家軟體能把檔案導去 iTunes,也為了讓有保護和沒保護的媒體一眼分得出來。就這樣而已:沒有保護的 M4V 改名成 .mp4 什麼都播得動,有保護的則不管叫什麼名字都到處播不動,因為影片的位元組是真的被加密了,不是只貼了個標籤。
檔頭結構,一個位元組一個位元組看
| 位移 | 長度 | 欄位 | 意義 |
|---|---|---|---|
| 0 | 4 | ftyp box size | FileTypeBox 的長度,大端序,含這個欄位本身。00 00 00 20 是 32 個位元組,剛好放得下一個主要品牌識別、一個次版本號和三個相容品牌識別 — Apple 和 ffmpeg 的寫入端產出來的都是這個形狀。 |
| 4 | 4 | Box type 'ftyp' | 66 74 79 70。ISO/IEC 14496-12 規定它必須是檔案裡的第一個 box,這也讓標頭裡唯一認得出來的 ASCII 落在位移 4 而不是位移 0。 |
| 8 | 4 | Major brand 'M4V ' | 4D 34 56 20 — 大寫 M、數字 4、大寫 V,然後一個 ASCII 空格,而那個空格是品牌識別的一部分。同一家族純音訊的兄弟在完全相同的位置用 'M4A ' 和 'M4B ',而且都是用同樣的方式補齊到四個字元。 |
| 12 | 4 | Minor version | 一個大端序 32 位元數字,沒有規範性意義;被 ffmpeg 重新封裝過的檔案裡會出現 00 00 02 00。它不是版本門檻,也不可以拿來拒收檔案。 |
| 16 | variable | Compatible brands | box 剩下的部分,每個品牌識別四個位元組,常見的是重複一次 'M4V ' 之後接 isom、iso2 和 avc1。這裡出現 isom,等於檔案自己直說「單純的 MP4 讀取端處理得來」— 這就是為什麼改名那麼常成功。 |
| 32 | 8 | Second box header | ftyp 之後那個 box 的大小與類型 — 'moov'、'mdat',或一個 'free' 佔位 box。ftyp 是 32 個位元組時它落在 32;請從位移 0 讀長度,不要相信位置。 |
怎麼跟長得像的格式分開
| 容易搞混的 | 怎麼分 |
|---|---|
| MP4 | 只有位移 8 那四個位元組不同:'M4V ' 對上 isom、mp42 或 avc1。檔案裡其他東西都不必改,而位移 16 的相容品牌識別清單裡通常本來就有 isom。如果你想知道手上這個 M4V 到底播不播得動,標頭不會告訴你 — 去樣本描述裡找 'sinf' 保護 box,因為 FairPlay 的內容會把編碼項目換成受保護的那一種。 |
| M4A | 同一家族裡純音訊的成員,位移 8 的品牌識別是 'M4A '(4D 34 41 20)。除此之外位元組排版一模一樣,所以光看標頭並不能證明裡面沒有影片 — 決定性的答案在每條軌的 'hdlr' box 裡的 handler 類型,'vide' 是影片、'soun' 是音訊。一個帶封面圖的 .m4a 仍然只有一條聲音軌。 |
| QuickTime Movie | 位移 8 的品牌識別是 'qt '。兩種格式都是 Apple 的、都是 ISO base media 檔案,也都常常裝著 H.264 和 AAC,所以大家在這兩個副檔名之間搬得很隨意。真正會咬人的差別是內容:QuickTime 允許的編碼與軌類型,是任何 M4V 的消費端都沒預期過的。 |
| 3GP | 位移 8 的品牌識別是 3gp4、3gp5 或 3gp6。兩者都是同一個容器針對特定裝置收斂出來的受限設定檔,一個瞄準手機、一個瞄準 Apple 的播放器,而且一般情況下都裝 H.264 和 AAC — 副檔名記錄的是預期的去處,不是結構上的差異。 |
常見的壞法
- DRM 被誤認成損壞。一個購買來的、有 FairPlay 保護的 M4V,標頭完好無缺,box 樹也走得順順的,但它就是不肯在非授權的 Apple 裝置以外的任何東西上播放。這裡沒有東西可以修;樣本資料是加密的,用 hex 編輯器一看就知道:本來該出現 H.264 起始碼的地方,是一堆高亂度的位元組。
- moov box 從來沒寫出來。匯出或下載中途被打斷,留下的是 mdat 滿的、索引卻沒有的檔案,任何東西都打不開。跟所有 ISO base media 檔案一樣,影格其實都還在,要救就得拿同一個編碼器產的健康檔案,把樣本表重建出來。
- 品牌識別被重新封裝改掉了。把 M4V 丟進一個只複製串流、卻不保留 FileTypeBox 的工具,產出的檔案位移 8 現在寫的是 isom。影片本身沒被動過、播起來也沒問題,但 iTunes 和其他任何看品牌識別做事的東西,都會把它當成另一種檔案。
- 截斷。標頭在最前面而且好好的,所以一個內容掉了大半的檔案,檔案類型偵測照樣正確地報出 M4V。把 box 走一遍才會露餡:最後一個 box 宣告的位元組數比檔案實際擁有的還多。
- 在慢速連線上 moov 在檔尾。這不是損壞,但看的時候跟損壞分不出來:索引在最後面,所以最後一個位元組到之前什麼都播不出來。把它搬到前面只會改寫位移,編碼後的影片一個位元組都不會變。
這個格式現在還在用嗎
M4V 重要的時代,是大家還在 iTunes 上買電影和影集的時候;如今同一批片庫改成串流而不是下載,它基本上已經是歷史遺跡了。檔案還是會冒出來:老的 iTunes 音樂庫、從 Apple 軟體匯出的家庭影片,還有習慣性吐出這個副檔名的 HandBrake 預設組。新東西沒有理由選它 — MP4 是同一個容器而且沒有歧義,每個播放器和每個瀏覽器也都偏好那個單純的副檔名。當你手上就是一個 M4V 時,實際要問的問題永遠只有一個:它有沒有被保護。沒有保護,它就是 MP4,改名就好。有保護的話,沒有任何轉檔工具幫得上忙,因為缺的是金鑰而不是編碼,而任何聲稱做得到的工具,講的都是破解而不是轉檔。
在這個站上打開 M4V 檔
這些全部在你的瀏覽器裡跑,檔案不會離開你的電腦。
相關格式
容易和 M4V 搞混的格式,可以比對它們的開頭位元組。
| 格式 | 開頭位元組 | 副檔名 |
|---|---|---|
| MP4 | 66 74 79 70 | .mp4 |
| QuickTime Movie | 66 74 79 70 | .mov |
| M4A | 66 74 79 70 | .m4a |