ベンダー納品・AI レンダ・CMS 書き出しで AVIF が混ざり、下流は依然 PNG+8bit+sRGB+バイト監査というチーム向けの実務マトリクスです。AVIF 転 PNG・リモート Mac M4 での 批処理・容量しきい値を、対照表・検収表・コピペ可能なコマンドに落とします。フォーマット割り当ては WebP/AVIF/PNG チェックリスト、色彩ポリシーは sRGB と Display P3 の整理表と併読してください。
論点チェックリスト(納品契約が無いと必ず破綻する項目)
- 色深:10/12bit AVIF をそのまま書くと 16bit PNG になり、CMS が拒否することがある。
- 色域・トーン:BT.2020 や PQ タグはビューアで「パキッと」見え、PNG 化後に別物になる。
- アルファ:
-pix_fmt rgb24系の誤指定で透明が消える。検収は合成必須。 - 再現性:GUI 一発書き出しでは 批処理の証跡(ツール版・ハッシュ)が残らない。
上流が WebP だった履歴とデコード差を争わないよう、WebP→PNG 納品マトリクスと同じ「README 一行の契約」を AVIF 側にも複写してください。
ツールチェーン選型(ffmpeg/libavif/ImageMagick の考え方)
リポジトリごとに主復号器を一つ決め、ワーカーの brew を自動更新から外す。並列前に UI 平坦・細い毛のアルファ・ノイズ写真のゴールデン3枚で合否を固定します。
| ツール | 向いているケース | 注意 |
|---|---|---|
avifdec(libavif) |
静止画、libaom 版に紐づけたい、フィルタ驚きを減らす | ICC 方針は別途 magick で統一 |
ffmpeg 6.1+ |
既に -filter_complex 中心のパイプ、メタデータが変則 |
-pix_fmt rgba と rgb24 を取り違えるとアルファ消失 |
ImageMagick 7 magick |
identify と変換を同一スタックで、PNG32/-depth 8 が明示しやすい |
CI と同じ delegate 版に固定し magick -list format で AVIF を確認 |
色彩・透明処理のパラメータ表(契約フィールド単位)
| 契約項目 | 推奨フラグ・値 | 不合格条件 |
|---|---|---|
| 出力色深 | magick in.avif -depth 8 PNG32:out.png |
identify -verbose に 16-bit と出るのに brief は 8bit のみ |
| sRGB ロック | デコード後に -colorspace sRGB、ICC は「埋める」か「剥がす」を SKU で一行固定 |
製品承認なしの Display P3 埋め込み |
| 直線アルファ RGBA | PNG32、#FFFFFF と #0B0D12 上でロゴ縁のフリンジ検査 |
斜め線で灰縁・リング |
| 任意の損失量子化 | pngquant --quality=70-85 --speed 1 --skip-if-larger -f -o q.png lossless.png |
合意帯を超えた肌のバンディング |
ソース信号と出す PNG の対照(意思決定表)
| ソース | PNG 方針 | リスク |
|---|---|---|
| lossy AVIF・8bit・sRGB タグ付き | 無損 PNG→max_bytes 超過時のみ pngquant 帯で退避 |
色は低リスク、AVIF 比でバイト膨張しやすい |
| HDR/PQ タグの静止画 | 可能ならレイヤーマスタから再グレード。否則トーンマップ演算子を全ワーカー同一文書化 | Safari と Chrome で見え方が割れる |
| モノクロ UI クローム | brief が許す場合のみパレット PNG。多くは RGBA 8bit のまま | 誤パレット化でソフト影が壊れる |
バッチスクリプトの手順と失敗リトライ
リモート M4 は専用ユーザー、入力は読み取り専用、staging/ 経由で out/ へ原子的 mv。I/O は指数バックオフで最大3回(sleep $((2**n)))。デコーダ不正は式の版を上げるまでリトライせず、JSONL に revision を残す。
手順1 — libavif で復号
avifdec -d 8 --png-compress 2 "$src" "$tmp/${base}.png" \
|| echo "{\"file\":\"$src\",\"step\":\"avifdec\",\"ts\":\"$(date -Iseconds)\"}" >> batch_failures.jsonl
手順2 — ffmpeg 代替路
ffmpeg -hide_banner -y -i "$src" -frames:v 1 -pix_fmt rgba "${tmp}/${base}.png"
手順3 — 色彩タイプの正規化
magick "$tmp/${base}.png" -colorspace sRGB -depth 8 PNG32:"$work/${base}.png"
手順4 — バイトゲートと容量しきい値
bytes=$(stat -f%z "$work/${base}.png")
test "$bytes" -le "$MAX_BYTES" || pngquant --quality=70-85 --speed 1 --skip-if-larger -f -o "$work/${base}.q.png" "$work/${base}.png"
並列は物理コア−1 程度に抑え、サーマルスロットルを「不安定デコード」と誤認しないようにする。
デザイン書き出しディレクトリと連動する検収しきい値(表)
フォルダ名で意味を運ぶ。例:ui-lean/avif→下表 lean、marketing/hero/avif→hero。CI は YAML/シェルテーブル読み取り、口頭の数値は禁止。
| 相対パス(例) | max_bytes |
長辺上限 | 必須検査 |
|---|---|---|---|
ui-lean/avif |
≤ 350000 | ≤ 1600 px | アルファありは PNG32、sRGB は README の ICC 方針どおり |
components/std/avif |
≤ 800000 | ≤ 2048 px | identify Type が truecolor-alpha、manifest に sha256 |
marketing/hero/avif |
≤ 1600000 | ≤ 2880 px | 明暗背景での合成、pngquant はリード署名付き帯のみ |
shasum -a 256 を日次 manifest に載せる。リモート 批処理の監査線として効きます。
チケットに貼れる検収ワンライナー
- lean 帯:
test "$(stat -f%z "$png")" -le 350000(macOSstat -f%zはバイト)。 - pngquant 帯:既定
70–85、グラデ多めは75–90へ README で変更。
次のステップ(常時ワーカーへ寄せる)
夜間スイープや大量 AVIF 転 PNG をローカルから切り離すなら、ホームでサービス概要を確認し、料金・ノードを比較のうえ 購入・レンタルへ。ご利用ガイドはログイン不要です。関連記事は 技術インサイト一覧から続けて読めます。
PNG 契約を M4 バッチで止めない
復号スタックを固定し、JSONL で失敗を残し、フォルダ別 max_bytes をワーカーで機械検収。デザインはデザイン、検収は検収に分離できます。