Post
2025年11月13日 下午06:15
歡迎所有互動

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

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

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

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

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

當初想做語音串流,可惜 Cloudflare 只有 Video Stream,過了兩年到現在還沒加

Audio Stream 自己做就好了吧 XD

輸出 HLS/DASH 沒有很麻煩,R2 也可以直接用

而且⋯⋯仔細想想這次遇到的 ICC Profile 跟色域轉換,用常用解決方案可能真的解不了。至少我確定 imagemagick 不會有這種自由度。

自己把東西組起來的好處就是轉換過程可以由自己 100% 掌控。

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

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

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

歡迎所有互動

一點關於 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。

🫠

歡迎所有互動

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

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

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

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

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

Lightbox Refactor(圖片/影片瀏覽器重構)

這次重構前列下的目標有:

  • 解決部分使用者不習慣滑鼠點擊黑邊不能關閉 Lightbox 的不方便
  • 改善狀態切換動畫流暢度
  • 現有三層架構(Carousel、Interaction Detection、Video Control Overlay)跟泛型(Carousel<T>, T ∈ Default, Editor)過度複雜問題
  • 修好 pinch 手勢放大圖片時錯誤使用畫面中心點作為參考點的問題

實際跳下去之後才發現問題比想像中麻煩:

  • Lightbox 狀態管理太過複雜,常有兩到三層以上的 props 傳遞
  • 既有 Flex/Grid bo...
...顯示更多 (914 字)