返回部落格

指引 / K6 · 格式與相容

同一部影片,電腦能播、手機放不出來:逐層核對清單(每一層都附實測讀數)

電腦放得開、手機放不開,原因通常不在畫質,也不在檔案壞沒壞。在真正畫出第一格之前,有四層會各判一次;任何一層不過,看到的都是同一個結果——「打不開」。所以正確的第一步不是換一個工具再壓一遍,而是讀檔案,判斷是哪一層攔住了你。

1. 在一格畫面出現之前,四層已經各自定了

這四層是分別判的,所以症狀也是分別的:容器不對=根本不開;標籤不對=開了畫面卻不動;聲音不對=開了沒聲音;字幕不對=片子好好的,字幕沒了。把四種症狀混成「這工具不行」,是這一類產品最常被誤判的地方。

2. 第一步是讀檔案,不是換工具

讀一層看一層:任何能列出檔案內部結構的檢查工具,都會把容器、每條軌道的編碼名稱、軌道標籤、位元深度、像素格式、時長、位元組數分開列出來。這一步花掉的是幾分鐘,替你做掉的是後面幾個小時的反覆重試。

下面所有讀數來自同一台機器上的同一趟檢查,環境寫在第 8 節。

樣本容器畫面軌道標籤檔級/像素格式尺寸位元組數
Bmp4hev1Main 10/yuv420p10le1920×108012,973,400
Cmp4hvc1Main 10/yuv420p10le1920×108012,973,400

這兩枚檔案來自同一段兩分鐘長的畫面,畫面一格都沒有重新編碼,位元組數一模一樣;唯一的區別是那一枚四字元的軌道標籤。

改副檔名不會改變上面任何一層;把畫面按高位元率再壓一遍,也改變不了攔住你的那一層。先定位,再動手。

3. 標籤這一層:同一段畫面,兩種寫法

在 MP4 這一族容器裡,HEVC 會被宣告成 hvc1 或 hev1。區別在於解碼設定寫在哪裡:hvc1 把它寫進軌道的樣本描述,讀取方在碰到第一格之前就能把解碼器配好;hev1 允許這份資料隨串流一起傳。需要在開工前拿到設定的讀取方,不會等它半路出現。

這一層不需要重壓一格畫面:把畫面按複製帶過去,只重寫那一枚軌道標籤。上面那對樣本正是這麼來的——同一段畫面寫兩次,產物逐位元組等長。

值得記住的是這一層的代價:它是一次複製,不是一場重壓。凡是能把範圍收在這一層解決的問題,都不該動用重新編碼。

4. 聲音這一層:畫面完美也會被一條音軌拖住

畫面已經被接受之後,決定「能不能播、有沒有聲音」的就只剩聲音軌。這一族的實際存量比多數人以為的更寬:同一批素材裡同時見過 TrueHD、E-AC3、AC-3、Opus、FLAC、MP2、MP3、DTS 與 PCM。

來源容器畫面聲音產物聲音怎麼辦
GmatroskaHEVC Main 10TrueHDmp4/hvc1改寫為 AAC(畫面未重壓)
ImatroskaHEVC Main 10E-AC3mp4/hvc1原樣帶過(標籤 ec-3)

兩趟裡畫面都沒有重新壓縮,差別全在聲音:一支必須改寫,一支可以直接帶走。還有一件事只有逐條數軌道才會發現——只檢查第一條音軌的做法,產出的就是「打得開卻一片安靜」的檔案。多語言片子裡你要的那一門,常常正坐在第二條上。

5. 字幕這一層:文字與圖片是兩種資料

來源聲音字幕產物字幕的去向
K(matroska)AC-3、Opus、AACSubrip、ASSmp4兩條都落成文字軌(mov_text/tx3g)
F(matroska)FLACHDMV PGS(圖片)—圖片沒有對應的軌道位置

文字那類(SRT、ASS)搬進目標容器還是文字,字級、顏色仍然歸你改。圖片那類——藍光那種被壓成一頁頁圖片的字幕,以及 DVD 與電視盒錄影帶的那種——本質是字幕的照片。MP4 的字幕軌道按文字建,圖片沒有裝它的位置。

可行的兩條:把圖片裡的字認讀回文字再帶過去(認讀是一項能力,不是一枚保證,認出來的字可能有錯,交付前該核對),或者不要這條字幕。畫面一個像素都不會動,也不會把字燒進畫面——那種做法出的是一條新的畫面軌,不是你原本的片子。

問「支援不支援字幕」沒有意義。要問的是:這一條是文字還是圖片,轉換之後它還是不是同一種東西。

6. 讀得出檔案,讀不出裝置

這份清單能帶你走到「知道哪一層要動」。它不替你決定某一台裝置收不收:位元深度與檔級、顏色標記、影格率、4:2:2、長 GOP 這些條件,落在具體裝置上才有答案。同一批樣本裡同時存在 Main 10 與 Main 8,顏色標記也分帶與不帶——這些差別在檔案裡讀得出來,在裝置上才見分曉。

7. 照著走的核對順序

  1. 讀內部。容器、畫面標籤、逐條聲音、逐條字幕,一趟列全。
  2. 容器這一層。檔案不在目標裝置肯打開的那一族裡,就足以解釋「根本不開」,哪怕裡面的畫面完全沒問題。
  3. 標籤這一層。容器對、畫面是 HEVC 卻讀不出設定,先按第 3 節把標籤重寫一遍——這是複製,不是重壓。
  4. 聲音這一層。列出每一條音軌,不只第一條;決定哪一門語言該排在前面,是有意的選擇,不是碰運氣。
  5. 字幕這一層。文字能搬,圖片只能認讀或放棄。
  6. 最後才考慮重壓畫面。標籤救不了的那一類才需要重新編碼,那是另一件更慢的活,有它自己的體積邊界。

順序錯了,人就會在同一台裝置上把同一個錯誤做三遍。

8. 這一頁的讀數從哪來,我們做什麼

上面每一條數字都取自同一台機器上的一趟檢查:Apple M2、macOS 27.2,命令列檢查工具 9.0.2。樣本出自我們自有的測試包。B 與 C 由同一段自產畫面複製寫成(源件是一枚兩分鐘長的自有測試檔:HEVC Main 10、1920×1080、yuv420p10le、一條 AAC 聲音軌,讀回 14,956,756 位元組;B 與 C 是把它的畫面原樣複製進兩枚 mp4,只重貼軌道標籤,位元組數見上面那張表);G 到 L 是圍繞光碟時代的聲音與字幕格式搭的測試件。本頁不轉發任何樣本檔案——上面每一族結構,你都能在自己已有的素材上重建出來。

我們做的是一款 iPhone、iPad 與 Mac 上的產品,產物只有一個容器:MP4。沒有位元率、編碼器、解析度這些旋鈕;替你做的決定只有三選一——只換容器、換容器並改寫聲音、把畫面重新編碼。一個本來就能直接播放的檔案不算一次轉換:App 不為它生成第二份檔案,也不計數。付費形態是一次買斷(這項購買在產品裡叫 Opus),它只改變之後還能轉換多少次,這一件事寫在這裡。

常見問題

將 .mkv 改名為 .mp4 可以嗎?

不行,這一步從來不是捷徑。副檔名只是標籤,改標籤不重寫容器內部的結構,也不改畫面編碼;裝置打開檔案時讀的是裡面的結構,不是檔名。改名之後「能打開」的機率不會變,而你會失去判斷哪一層出問題的機會。

只重寫標籤,檔案會變成另一回事嗎?

不會。上面那對樣本讀回來位元組數完全相同(都是 12,973,400),畫面一格都沒重壓。這也正是這一層的價值:一次複製就能解決的層,不該用一次重新編碼去試。

我的片子有五條音軌,會不會只剩一條?

軌道要逐條判,不是整條檔案一個結論。能帶的按條帶走,帶不動的那一條走重編;真正會造成「只剩一條」的,是工作只盯著第一條音軌的那種做法。多語言片子動手前先數清楚你要的那一門坐在第幾條。

圖片字幕能原樣放進 MP4 嗎?

不能。MP4 的字幕軌道按文字建,圖片那類沒有對應的位置。可行的做法只有兩種:認讀成文字再帶過去(可能有錯,要核對),或者放棄這條字幕。不存在既保留原始圖形、又把它放進文字軌道的第三種做法。

這些讀數能不能在我這台機器上複算?

讀的是檔案內部,任何一台機器上都能複算——你手上那枚檔案裡有什麼,檢查工具列得出來。複算不出來的只有後半段:裝置那一側收不收,只能靠一次真實播放。這一頁給的是判斷順序,不是一張要你相信的表。


Axiom One LLC — CineX