ARRI 的 LogC4 規格書(2025 年 1 月 23 日版)在曲線定義後面寫了一句話:這條曲線以 12 位元作為最低量化等級,10 位元的 LogC4 影像不應用於存檔或交換。這句話可以用算式檢驗,而不需要任何一台 ARRI 機器。我用規格書公開的式子重寫了曲線,先拿規格書附錄 D 的取樣列逐一核對,十個取樣點在 10 位元與 12 位元全範圍兩欄全部吻合,才往下算。結果有四條。第一,LogC4 每一檔分到的碼值數不是常數:10 位元下漸近值是 66.3,但在 18% 灰是 57.2,往暗部走會掉,到低於灰 8.7 檔時只剩 1 個碼值,12 位元則要到 10.7 檔。第二,量化誤差能不能被雜訊「蓋掉」有一條乾淨的門檻:雜訊標準差在碼值單位下要大於約 0.5 個 LSB,10 位元 LogC4 在 18% 灰處對應的電子數門檻是 2.7 萬,S-Log3 是 4.6 萬,12 位元則是 43.6 萬以上。第三,在我假設的感測器下(滿井 5 萬電子、18% 灰落在飽和下 3 檔、讀出雜訊 3 電子),10 位元 LogC4 的量化損失呈 U 型:灰附近 0.33 dB,最亮一檔升到 2.0 dB,最暗端(灰下 8 檔)1.1 dB;12 位元全程不超過 0.13 dB。第四,ARRI 那句警告的原因規格書沒有寫,我的計算只能說明它「在哪些條件下會痛」,不能說它就是 ARRI 的理由。昨天的卷簾與 IMX947留下的待驗(Z6 III 讀出 14.41 ms 對 8 到 10 ms 的衝突、SLVS-EC 編碼只讀到摘要)今天沒有新證據,維持未解,所以換題。

📖 學

一、規格書寫了什麼,我怎麼核對

LogC4 的場景參照曲線(規格書第 4.1 節)是分段的。令 為相對場景線性值(18% 灰為 0.18),則

常數為 、、。 時改用一條直線 ,而 是負值,所以所有正的場景值都落在對數段。117.45 這個數字規格書自己解釋了:它是 ,即灰的參考值對訊號最大值的比。硬體端的編碼曲線(第 3.1 節)多了一個隨曝光指數(EI)變化的增益 ,規格書強調曲線的「gamma」不隨 EI 改變,只有線性增益在動,所以解碼不需要知道拍攝時用了什麼 EI。

核對方式:規格書附錄 D 給了每 1/3 檔一列的碼值表,我取其中 10 列(灰下 6、3、1 檔,灰,灰上 1/3、1、2、5、8、11 檔),用上面的式子算 10 位元全範圍(乘 1023)與 12 位元全範圍(乘 4095)的碼值,四捨五入後與表中全部吻合,例如灰是 285 與 1140、灰上 11 檔是 1000 與 4002。硬體最大值 1.0 解碼為場景值 469.80(規格書附錄 B 也列了),,與附錄 C 最後一列的 11.35 檔一致。所以 LogC4 的 10 位元全範圍 1023 個碼值,要涵蓋灰上 11.35 檔。

S-Log3 的 Sony 原始文件我這次讀不到(下載回 Access Denied),式子取自 colour-science 的實作程式碼,該頁引用的是 Sony 的〈Technical Summary for S-Gamut3.Cine/S-Log3 and S-Gamut3/S-Log3〉。式子是

低於 0.01125 為一段直線,斜率由兩端點 95 與 171.2102946929 決定。我代入驗算: 得碼值 95.0, 得 420.0, 得 597.9。這些是 S-Log3 的常見參考點,與我的記憶相符,但出處是實作程式而不是 Sony 原文,請當成二手。10 位元最大碼值 1023 對應的場景值是 38.42,即灰上 7.74 檔(自算)。兩條曲線在同樣 1023 個碼值裡的取捨已經看得出來:LogC4 把亮部延伸到灰上 11.35 檔,S-Log3 只到 7.74 檔;從黑(95)到灰,LogC4 用掉 190 個碼值,S-Log3 用 325 個。

二、每一檔分到幾個碼值

對數編碼常被說成「每一檔分到一樣多的碼值」,這只在高訊號端近似成立。對上面的式子對「檔」()微分,可以得到解析式(自推,並用數值微分核對一致):

  • LogC4:每檔碼值數 ,其中 是位元數。第二個因子在亮部趨近 1,漸近值是 10 位元 66.27、12 位元 265.3;在 (灰下 2.65 檔)時降為一半。
  • S-Log3(10 位元):(x 在直線段以上才成立,即灰下 4 檔以上)。
相對 18% 灰LogC4 10 位元LogC4 12 位元S-Log3 10 位元
−8 檔1.596.353.30
−6 檔5.9223.7013.21
−4 檔18.6874.7647.24
−2 檔40.49162.0664.41
0(灰)57.18228.8774.58
+2 檔63.75255.1777.64
+4 檔65.63262.7278.45
+6 檔66.12264.6878.65

(單位:每檔碼值數,自算。)S-Log3 灰下 4 檔以下進入直線段,表中該欄是直線段的數值微分。

換成「相鄰碼值在亮度上差多少」:灰處 LogC4 10 位元每碼值差 ,S-Log3 10 位元差 0.93%,LogC4 12 位元差 0.30%。若有一片完全沒有雜訊的 1 檔漸層橫跨 1920 像素寬,LogC4 10 位元的色帶寬是 像素,S-Log3 是 25.7,LogC4 12 位元是 8.4(自算)。人眼對相鄰亮度差的門檻我沒有查證,常見說法在百分之一上下,這裡不拿它下結論。

暗部是另一回事。碼值數降到每檔 1 個的位置:LogC4 10 位元在灰下 8.68 檔,12 位元在 10.70 檔,S-Log3 10 位元在 10.45 檔(自算)。作為對照,我也算了 sRGB 在 8 位元下的每檔碼值數:顯示線性值 0.18 處 38.0,0.045 處(灰下 2 檔)21.3,0.0112 處(灰下 4 檔)12.0,0.0028 處(灰下 6 檔)6.4。這只是直接套 sRGB 曲線的下限,真實調色常加 S 曲線,中間調斜率比這大,所以螢幕端的步階比這個表更粗。

三、量化誤差什麼時候看不見:高斯抖動門檻

這一節是整篇的算式核心。取整(量化)一個帶高斯雜訊的訊號,平均誤差(偏差)對訊號在兩碼值之間的位置 (以 LSB 為單位,)是週期函數,第一諧波為

是進入量化器之前的雜訊標準差(以 LSB 計)。這來自高斯分佈特徵函數的傅立葉係數,是標準結果,我沒有查哪一本教科書,所以用蒙地卡羅驗證:每個 取 200 個 位置、各 40 萬個樣本,量出偏差的均方根,與預測值()比較(自算):

(LSB)預測 RMS 偏差模擬 RMS 偏差預測峰值
0.050.21420.24010.3030
0.10.18480.19210.2613
0.20.10220.10230.1445
0.30.03810.03800.0539
0.40.00960.00960.0135
0.50.00160.00180.0023

兩者吻合到小數點後第三位; 預測偏低,因為這時高次諧波不能忽略(無雜訊極限是鋸齒波,RMS 為 0.289); 的模擬值在 0.001 到 0.002 之間,是取樣誤差,不是真偏差。工程判讀: LSB 時偏差峰值只有一個步階的 0.23%, 是 5.4%, 是 14%。我把 LSB 當作「量化被雜訊抖動蓋掉」的門檻,這是我選的判準,不是標準。

把這個門檻接到感測器上。光子散粒雜訊使電子數 的相對標準差是 ,換算成「檔」是 ;乘上該處的每檔碼值數,就是碼值單位下的雜訊。令它等於 0.5 並只算散粒雜訊(自算),門檻電子數 ,在灰處:

編碼灰處每檔碼值數 門檻電子數
LogC4 10 位元57.182.72 萬
S-Log3 10 位元74.584.63 萬
LogC4 12 位元228.8743.6 萬
S-Log3 12 位元298.5274.2 萬

意思是:灰處像素的電子數低於門檻,量化步階就被雜訊蓋住。10 位元要看你的灰有沒有超過 2.7 萬或 4.6 萬電子;12 位元的門檻高到我手上沒有任何一個像素的數字能比(我沒有逐機查滿井數字,這裡不指名機種)。

四、一個假設的感測器:量化損失的 U 型

為了得到具體數字,我自擬一個感測器模型:滿井 5 萬電子,18% 灰落在飽和下 3 檔(即灰處 6250 電子,灰上 3 檔剛好 5 萬),讀出雜訊 3 電子,線性無黑位元偏移。每個檔位各抽 40 萬個像素,電子數取卜瓦松再加高斯讀出雜訊,經曲線編碼、取整到 位元、再解碼回線性值,以「線性值平均除以標準差」當 SNR,與無量化的理想值相比,差多少 dB(自算,模擬誤差約 ±0.02 dB):

相對灰理想 SNR(dB)LogC4 10 位元LogC4 12 位元S-Log3 10 位元S-Log3 12 位元
−8 檔12.511.0740.0730.2750.009
−6 檔19.510.4290.0430.0820.004
−4 檔25.830.1930.0110.0350.014
−2 檔31.910.1570.0020.047−0.013
0(灰)37.950.333−0.0040.1970.022
+2 檔43.990.9640.0820.6920.060
+3 檔(飽和)46.992.0310.1261.1970.091

(表內為損失 dB,小於 ±0.02 的負值是模擬誤差。)

U 型的兩端各有原因。暗端:碼值數隨訊號下降(第二節),LogC4 10 位元在灰下 8 檔只有 1.6 個碼值每檔,而那裡的雜訊在碼值單位下只有 0.54 LSB,量化誤差(0.29 LSB)占不小的比例。亮端:對數曲線每檔碼值數幾乎不變,但散粒雜訊相對值隨 縮小,到了灰上 3 檔,雜訊在碼值單位下只有 0.42 LSB,低於 0.5 的門檻。中間(灰下 2 到 4 檔)雜訊最大,量化損失最小。灰處我用蘇帕德修正式 預測, LSB 得 0.320 dB,模擬 0.333,吻合;但在飽和處, LSB,修正式預測 1.68 dB,模擬 2.03 dB,不吻合。我另跑了一次單點檢驗確認這是真的:量化誤差在這種低雜訊下與訊號相關,損失值取決於平均值落在碼值間的哪個位置,所以 1.7 到 2.0 dB 之間要當作範圍,不是定值。

顯而易見的推論(標準統計結論,我今天沒有查出處):對卜瓦松雜訊,方差穩定化的編碼是平方根而不是對數,平方根編碼下雜訊在碼值單位是常數,量化損失就不會有 U 型。對數編碼為了在每檔給等量碼值,付出了亮端的浪費。

五、回到 ARRI 那句警告

規格書的文字是:曲線以 12 位元為最低量化等級,10 位元影像不應用於存檔或交換;另一處說 LogC4 的硬體編碼為 12 位元最佳化,每檔精度高於 10 位元的 LogC3。我的數字只能告訴你:在我假設的感測器下,10 位元 LogC4 在灰處損失約 0.3 dB,幾乎看不見;風險集中在兩端,尤其高光端,損失到 2 dB 量級;S-Log3 10 位元因為只涵蓋 7.74 檔,碼值更密,損失較小。這不證明 ARRI 的理由是這個。「存檔」與「交換」意味著後面還有降噪(把 σ 壓到 0.3 LSB 以下,偏差回升到 5% 步階以上)、調色時的增益與對比放大、VFX 做曝光拉升,這幾種情況我都沒有模擬,所以不能斷言 10 位元一定出問題,也不能斷言一定沒問題。

六、這篇的邊界

感測器模型是我自擬的(滿井 5 萬、灰在飽和下 3 檔、讀出雜訊 3 電子),不是任何一台相機的實測;ALEV4 的滿井與讀出雜訊 ARRI 沒公布,規格書只在註腳把動態範圍定義為滿井對讀出雜訊的比。我沒有模擬編碼器壓縮(ProRes、H.264 等),也沒有模擬像素不均勻性、類比增益切換、黑位元偏移或 ADC 非線性。S-Log3 的式子來自 colour-science 程式碼,不是 Sony 原文。Anscombe 與蘇帕德修正是標準結論,我沒查出處,只用本文自己的蒙地卡羅核對過後者。

🧠 記

  • LogC4 的每檔碼值數是 :10 位元亮部漸近 66.3、灰 57.2、灰下 4 檔 18.7、灰下 6 檔 5.9、灰下 8.7 檔降到 1;12 位元在灰下 10.7 檔才降到 1。
  • 式子已用 ARRI 規格書附錄 D 核對:10 個取樣列的 10 位元與 12 位元碼值全部吻合(灰 285 與 1140、灰上 11 檔 1000 與 4002);LogC4 硬體最大值 469.80 對應灰上 11.35 檔。
  • S-Log3 10 位元只涵蓋灰上 7.74 檔,灰處每檔 74.6 碼值,相鄰碼值亮度差 0.93%,LogC4 10 位元是 1.22%,12 位元是 0.30%。
  • 量化被雜訊蓋掉的門檻是 σ 約 0.5 LSB:高斯抖動下偏差峰值 ,σ=0.5 時 0.0023、σ=0.3 時 0.054、σ=0.2 時 0.14 LSB;蒙地卡羅在 σ 從 0.2 到 0.5 吻合。
  • 灰處的電子門檻:LogC4 10 位元 2.72 萬、S-Log3 10 位元 4.63 萬、LogC4 12 位元 43.6 萬(自算,只計散粒雜訊)。
  • 量化損失是 U 型:假設模型下 10 位元 LogC4 灰下 8 檔 1.07 dB、灰 0.33 dB、飽和 2.03 dB;12 位元全程不超過 0.13 dB;高光端的偏差與位置有關,範圍 1.7 到 2.0 dB。

邊界: 感測器模型(滿井 5 萬電子、灰在飽和下 3 檔、讀出雜訊 3 電子)與 σ≥0.5 LSB 的判準都是我自擬;S-Log3 式子取自 colour-science 實作,Sony 原文讀不到;沒有模擬壓縮、降噪、調色或 VFX 流程,所以 ARRI 警告的真實理由沒有驗證;昨天的 Z6 III 讀出衝突與 SLVS-EC 編碼仍未解。

✍️ 實踐

用 25 分鐘重現 LogC4 與 S-Log3 的碼值表,並量一次你自己的量化門檻。 需要 Python 與 numpy,不需要相機。

  1. 照第一節把 LogC4 的 與編碼、解碼函式寫成程式,並把 S-Log3 的兩段式子也寫好。
  2. 驗算:LogC4 在 應得 10 位元 285、12 位元 1140; 應得 1000 與 4002;S-Log3 在 應得 420。三個數有任何一個對不上,先查括號與 的分母 117.45。
  3. 用數值微分(對 取 ±0.001 檔)印出每檔碼值數表,與第二節的表比對,差在 0.01 以內才算通過。
  4. 重現第三節的偏差表:取 σ=0.3 與 0.5,各 200 個 、每個 40 萬個樣本,量 RMS 偏差,預期約 0.038 與 0.0016 到 0.0018。若 σ=0.5 的結果明顯大於 0.003,先檢查亂數種子或樣本數。
  5. 代入你自己的感測器:查你所用相機的滿井電子數與 18% 灰的位置(若查不到就保持假設),算灰處 ,再判斷你的灰是在門檻之上還是之下。把預測與第四節的 U 型比對,只要結論和我的模型方向不同,就值得追問為什麼。

今天做得完的最小版本:只做步驟 1、2、3,不跑蒙地卡羅,用十分鐘確認自己手寫的式子能復現 ARRI 附錄 D 的表。

🔗 延伸學習

💬 問 AI

我在檢查對數編碼(ARRI LogC4、Sony S-Log3)的 10 位元量化。我的推導與數字:
(a) LogC4 場景曲線 f(E) = ((log2(aE+64) - 6)/14)·b + c,a=(2^18-16)/117.45、b=(1023-95)/1023、c=95/1023;每檔碼值數 = (2^n-1)·b/14 · aE/(aE+64)。10 位元灰處 57.18、灰下 4 檔 18.68、灰下 6 檔 5.92;降到每檔 1 個碼值在灰下 8.68 檔(10 位元)與 10.70 檔(12 位元)。
(b) S-Log3:y = (420 + 261.5·log10((x+0.01)/0.19))/1023,x≥0.01125;10 位元最大碼值對應灰上 7.74 檔,灰處每檔 74.58 碼值。
(c) 量化被雜訊抖動蓋掉:偏差峰值 ≈ e^(-2π²σ²)/π(σ 以 LSB 計),我用蒙地卡羅在 σ 從 0.2 到 0.5 驗證吻合;我把 σ≥0.5 LSB 當門檻,灰處電子數門檻 = (s/(0.5·ln2))²,LogC4 10 位元 2.72 萬、S-Log3 10 位元 4.63 萬。
(d) 假設滿井 5 萬電子、18% 灰在飽和下 3 檔、讀出雜訊 3 電子,模擬 10 位元 LogC4 的量化 SNR 損失:灰下 8 檔 1.07 dB、灰 0.33 dB、飽和 2.03 dB,12 位元不超過 0.13 dB。
請:
1. 檢查 (a)(b) 的推導與數字,並說明每一步是文件明說的、你查證到的(附出處)、還是你的推論。
2. 檢查 (c) 的高斯抖動偏差公式,並指出 σ<0.5 LSB 時蘇帕德修正式為什麼失準(我在 σ=0.42 得到模擬 2.03 dB 對修正式 1.68 dB)。
3. ARRI 規格書說 10 位元 LogC4 不應用於存檔或交換;除了我的 (d),還有哪些具體機制(降噪、調色增益、VFX 曝光拉升、編碼器壓縮)會讓 10 位元出問題?請各給一個可證偽的預測,並標明哪些是推論。
4. 以平方根(Anscombe)編碼取代對數編碼,量化損失會變成平坦嗎?請給算式並指出前提。
5. 不要編造任何相機的滿井或讀出雜訊數字,查不到就明說;不要編造連結;不要給任何器材購買建議。