Post
2025年11月13日 上午11:24
歡迎所有互動

一點關於 AVIF 的小事

一般常見的 JPEG 除了內容的 RGB/YUV 之外還會有 ICC 作為輔助色彩描述。但在 AVIF,雖然格式本身也支援 ICC,但同時有新的 NCLX/CICP 標準。

AOMedia 的 libavif 支援寫入 ICC 或 CICP(CICP 為主),而社群的開源專案如 ravif(rav1e-based)偏好 CICP。

所以⋯⋯我猜 Best Practice 是用 lcms2 解 ICC 的 primaries 跟 transfer,重包 CICP 交給 ravif。

🫠

例如:這是一隻橘貓,未使用 ICC Profile

這是同樣一隻橘貓,但套用過 ICC 和正確色域

完全看不出差別

實作後心得給 @yamiodymel 參考:

  1. AVIF SDR 可以用 sRGB 跟 BT.709 兩種標準色域。建議 sRGB,在電腦或手機上看會比較精準(當然想支援電視的話 BT.709 也是可以啦)。sRGB 會有一點點壓縮效率損失,而且沒有 YUV 4:2:0 之類的 Chroma Subsampling,但整體來說影響不大。
  2. 除非特殊狀況,不建議使用 CICP 或 ICC。標準 sRGB、BT.709 的色彩範圍已經足夠日常使用了。不需要為了差一點點的色域大小硬支援 DCI-P3。
  3. 其實大多數使用者的裝置看不出色偏🙁

這東西是寫得出來的嗎🫠

Mosir 開發筆記14 篇文章
歡迎所有互動

GraphQL 以及 Mosir 的檔案上傳系統

開發筆記 Frontend Backend

GraphQL 是現代服務常用的 API Query Language,高效能跟靈活性使得許多人在開始新專案時會直接考慮,Mosir 也在專案初期就選擇 GraphQL 作為前後端的共通標準。但 GraphQL 本身的架構在遇到檔案上傳時帶來不少麻煩。

歡迎所有互動

新功能上線,明天早上再來寫公告

另外還有一些一堆累積問題要修

歡迎所有互動

講到圖片色差就剛好想到另一件事

Mosir 並沒有使用 imagemagick、libvips、ffmpeg/libav 或 handbrake。

雖然對處理過影像/影片的人來說可能會很詭異,但這幾個解決方案真的是肥到我沒有很想用,而且 dependency 也多到一個爆炸。

不選擇常用方案的後果是前前後後加起來大概有一整個人月的時候都消耗在多媒體處理上。雖然過程中也學了不少東西,但我不確定這是不是好做法。

不過相對而言的好處是,Mosir 的 media worker 是 stream-based 的,從 network source、buffer、processor、network target 可以一口氣跑完,沒有不必要的暫存檔。未來(我不確定有沒有機會)也可以支援直播或是 voice chat。

歡迎所有互動

關於多媒體檔案處理 pipeline 的一些事情

圖片/影片上傳是大多數服務都會需要的功能,但處理多媒體檔案的架構其實是蠻麻煩的事情。

架構一:收到檔案之後直接拿來用

如果伺服器在收到檔案之後直接拿來使用當然是最快也最輕鬆的。如果經營的是雲端硬碟那好像也沒什麼問題。但如果是要分享給他人的東西⋯⋯:

  1. 使用者上傳的檔案多半都很大:一般手機拍攝的照片大約在 2~4MB 不等,影片可以到 512MB~1GB。網路流量費用跟儲存費用都會相當可觀。
  2. 不同系統對格式的支援不同:分享圖片或影片的最大原因還是希望讓其他人看。可惜現在已經不是以前那個只有 jpeg 的時代了,A 拍攝的照片用 B 的手機不一定能看,...
...顯示更多 (526 字)