透過動画を諦めない 代替設計ハンドブック 2025
公開: 2025年9月22日 · 読了目安: 3 分 · 著者: Unified Image Tools 編集部
“αが必要=動画一択”ではありません。UI/合成要件を分解すれば軽くて堅牢な道が見えます。
TL;DR
- まずは要件分解:本当に“動く透過”が必要か?固定背景+合成で代替できないか?
- UI/アイコン/小物演出 → Lottie/CSS/SVG。写真系の短尺透過 → APNG/animated WebP
- ループで等間隔の動き → スプライト+
steps()
が最軽量 - 長尺や全画面 → αなし動画(MP4/AV1)+背景側の合成で“透過風”に
- 配信はINP/LCPを壊さない:LCP候補のみ高優先度、他は遅延
内部リンク: モダンWebのアニメーション画像資産 設計と最適化 2025, シームレスループの作り方 2025 — GIF/WEBP/APNG の境界を消す実務, INP中心の画像配信最適化 2025 — decode/priority/スクリプト協調で体感を守る, 高DPR時代のレスポンシブ画像設計とimage-set活用 2025, AVIF vs WebP vs JPEG XL 徹底比較 2025 — 実測と導入戦略
要件分解(意思決定フレーム)
- 透過の種類:完全透過か、輪郭のみ(ノックアウト/マスク)で十分か
- 面積とDPR:表示面積/倍率が大きいほどラスター透過は重くなる
- 再生制御:スクロール同期/ホバー/クリックで開始・停止が必要か
- 互換性:iOS/Safariで動くか、フォールバックの許容範囲は
- 制作コスト:デザイナ/エンジニアの運用容易性(差し替え/バージョン管理)
この5つで選定ツリーを作ると迷いにくい:
- 小面積×シンプル形状 → Lottie/SVG/CSS で軽量・高解像度
- 中面積×写真的×短尺×高い抜き品質 → APNG/animated WebP
- 反復/タイリング → スプライト(
steps()
) - 大面積×長尺ד透過風の演出”でOK → αなし動画+CSSマスク/混色
代替技術の実務カタログ
1) Lottie(JSONベクター)
- 長所: スケーラブル、配色差し替え容易、DOM/Canvas制御、容量が小さい
- 短所: 写真表現に弱い、複雑パスでCPU負荷、ブラウザ依存差
- 適所: アイコン/ロゴ/モーションUI、マイクロインタラクション
実装断片(React):
// 例: lottie-web を使用
import { useEffect, useRef } from 'react'
import lottie from 'lottie-web'
export function LogoMotion({ json }: { json: object }) {
const ref = useRef<HTMLDivElement>(null)
useEffect(() => {
if (!ref.current) return
const anim = lottie.loadAnimation({
container: ref.current,
renderer: 'svg',
loop: true,
autoplay: true,
animationData: json,
})
return () => anim.destroy()
}, [json])
return <div ref={ref} aria-hidden />
}
2) APNG / animated WebP(ラスター透過)
- 長所: 透過品質が高い(縁のにじみが少ない)、UI上に自然に合成できる
- 短所: フレーム数×面積に比例してサイズ増、生成パイプラインが必要
- 適所: 写真系の短尺ループ、背景が透ける装飾、表情差分
生成例:
# WebP アニメ生成
ffmpeg -i seq-%03d.png -lossless 0 -qscale 80 -loop 0 anim.webp
# APNG 生成(apngasm があれば)
apngasm anim.apng seq-%03d.png 1 30 # 30fps
<picture>
でフォールバック:
<picture>
<source srcset="/anim/logo.webp" type="image/webp" />
<img src="/anim/logo.apng" alt="ロゴアニメ" width="240" height="240" loading="lazy" decoding="async" />
<!-- 必要なら最後に GIF を置くが、容量/画質面で最終手段 -->
<!-- <img src="/anim/logo.gif" alt="" /> -->
</picture>
3) スプライト+CSS steps()
- 長所: もっとも軽量(1枚画像)、デコードコストが低い、制御容易
- 短所: 透過は画像側任せ、コマ間の境界設計が必要
- 適所: アイコンの周期動作、等間隔フレームのループ
CSS 例:
.sprite { width: 160px; height: 160px; background: url(sprite.png) 0 0/cover no-repeat }
.run { animation: run 1s steps(8) infinite }
@keyframes run { from { background-position:0 0 } to { background-position:-1280px 0 } }
4) “透過風”の動画合成(αなし)
“背景が固定”できる時は、動画自体はαなしで、背景側でノックアウト/マスクを行うと軽い。
- CSS マスク:
mask-image
/-webkit-mask-image
を画像で指定(動画の上に重ねる) - ブレンド:
mix-blend-mode:multiply/screen
などで下地になじませる(素材次第) - 2レイヤ重ね: 下に動画、上に輪郭マスクPNGを重ねる(
pointer-events:none
)
注意: ブラウザ差/パフォーマンス差があるため、小面積から検証。
配信とパフォーマンス(INP/LCPを壊さない)
- INP 対策: 非重要アニメは遅延/低優先度。インタラクション直前にプリロードを検討
- LCP 候補は1つだけ高優先度(画像配信 INP)
- DPR 対応:
image-set()
/2x 素材は“必要な要素のみ”に限定 - キャッシュ: 短尺は長期キャッシュ+ファイル名ハッシュ、差し替えはimmutable戦略
診断フレーム(何を見るか)
- デコード/初回表示までの時間(動画はポスター表示を工夫)
- ループ継ぎ目、背景との境界ににじみ/ジャギーが出ていないか
- バッテリー影響(モバイル)— フレーム数/サイズ/コーデックの見直し
- iOS/Safariでの挙動/フォールバックの自然さ
よくある落とし穴と回避
- α付き動画の乱用 → デコード負荷/互換性問題/電力消費。まずはベクター/スプライト/APNGを検討
- 1ファイルに何でも詰める → キャッシュ効率悪化。用途別に分割、差し替え容易に
- 自動再生の多用 → モバイルで嫌われる。視認域/ユーザ操作トリガに限定
チェックリスト
- [ ] 透過の種類(完全透過/輪郭)と背景固定の可否を決定
- [ ] Lottie/APNG/WebP/Sprite/動画合成 から容量・互換・制御で選択
- [ ] フォールバック(APNG↔WebP、最終手段としてGIF/MP4)
- [ ] DPR/表示面積に合わせて素材最適化(
image-set()
) - [ ] INP/LCP を壊さない配信(LCPのみ高優先度、他は遅延)
FAQ
-
Q: WebM(alpha)は使えますか? A: Chrome系では可能ですがSafari/iOSの互換が不十分です。運用コストを考えるとAPNG/animated WebPやLottieで代替する方が安心な場面が多いです。
-
Q: 画質が粗い/輪郭がギザギザします A: 元素材のエッジと背景のコントラストを調整、プレマルチっぽい縁取りを避ける、APNGならパレット調整と前処理(わずかなぼかし)を試してください。
-
Q: どれから試すべき? A: アイコン/ロゴはLottie、写真短尺はAPNG/WebP、反復動作はスプライト。長尺はαなし動画+合成で“軽く壊れない”構成に寄せるのがおすすめです。
まとめ
“透過動画”は目的ではなく手段です。要件を分解し、より軽く・壊れにくく・運用しやすい代替に写経する。小さく検証しながら、最終的にINP/LCPに優しい配信へ落とし込めば、見た目と体験を両立できます。
制作パイプライン(現場ノウハウ)
- ソース管理: ベクターは.lottie/.json、ラスターはPNG連番(16bit→最終8bit)で管理。差分レビューしやすい構造に
- カラーマネジメント: sRGBに正規化(P3素材なら事前変換)。Premultiplied vs Straight Alphaの混在に注意
- 抽出/輪郭設計: 透過縁のハローを避けるため、1px程度の収縮/拡張や微小ガウスぼかしで縁を整える
- 量子化/圧縮: APNGはパレット最適化、Zopfli/oxipng併用。WebPは
-qscale
で画質を見極め、動きが少ない区間はキーフレーム間隔を伸ばす
APNG最適化の一例:
apngasm anim.apng seq-%03d.png 1 30 -ks # シンプルな差分最適化
pngquant --quality=70-90 --speed 1 --force --strip --output out.png in.png
oxipng -o 4 -Z -i 0 -strip all anim.apng
WebPアニメ最適化の一例:
ffmpeg -i seq-%03d.png -lossless 0 -qscale 72 -loop 0 -pix_fmt yuv444p -fpsmax 30 anim.webp
スプライト生成(自動化):
# ImageMagick で横連結
magick montage seq-*.png -tile x1 -geometry +0+0 sprite.png
ブラウザ対応とフォールバック戦略
- Safari/iOS: WebM(alpha)未対応。APNG/animated WebP、もしくは「αなし動画+マスク」構成を第一候補に
- Edge/旧環境: APNGが静止PNGで表示される可能性 →
<picture>
でWebP優先、最終手段のGIFは極力避ける - メディアクエリ:
prefers-reduced-motion
に応じてアニメーションを停止/静止画差し替え
@media (prefers-reduced-motion: reduce) {
.run { animation: none }
}
アクセシビリティ(A11y)
- 情報の重複: 動きが意味を持つ場合は、非アニメでも理解できるテキスト/ARIAを提供
- 動きの制御: 再生/停止/速度の操作UIを(必要に応じて)用意。自動再生はユーザー意図に限定
- フォーカス: マスク合成で重ねた要素は
pointer-events:none
やaria-hidden="true"
でフォーカス妨害を避ける
テストと計測
- 計測観点: 初期デコード時間、合成コスト(Compositorスレッド負荷)、メモリ、バッテリー
- ツール: Performanceパネル、
performance.mark
、Battery/CPUスロットリング、LighthouseのINP/LCP - 可視バグ検知: ループ継ぎ目のピクセル差分比較(差分ヒートマップ)で継ぎ目を自動検出
Next.jsへの実装ヒント
- 動画/画像のプリロードは
next/head
の<link rel="preload">
やImage
コンポーネントのpriority
を使い分け - LCP候補を1つに絞り、他は
loading="lazy" decoding="async"
。fetchpriority="high"
はLCP候補のみ - ルーティング単位で分割: アニメーション素材はページ分割し、不要ページで読み込まない
トラブルシュート早見表
- ぼやけ/にじみ → Σ: エッジのプレマルチ除去/縁ぼかし、色空間の正規化、拡大縮小の順序見直し
- コマ落ち/カクつき → Σ: フレーム数削減、
steps()
化、Canvas/OffscreenCanvas移行、CPUパス削減 - 電池消費多い → Σ: 解像度/DPR削減、フレームレート30fps以下、アニメ領域を縮小
追加サンプル(CSSマスクで“透過風”)
<div class="stage">
<video src="/movie/loop.mp4" autoplay muted loop playsinline></video>
<img class="mask" src="/mask/shape.png" alt="" aria-hidden="true" />
</div>
.stage { position: relative; width: clamp(240px, 50vw, 800px); aspect-ratio: 16/9 }
.stage > video { width: 100%; height: 100%; object-fit: cover }
.stage > .mask {
position: absolute; inset: 0; width: 100%; height: 100%;
-webkit-mask-image: url(/mask/shape.png);
mask-image: url(/mask/shape.png);
-webkit-mask-size: cover; mask-size: cover;
pointer-events: none;
}
小さく始めて、安全に広げる
- 小面積・短尺・UI寄りから導入(Lottie/スプライト)
- 効果が高い箇所にAPNG/animated WebPを限定展開
- 長尺は“透過風の合成”で置換し、安定運用の足場に
- INP/LCP/バッテリーのメトリクスを週次で点検し、差し替えしやすい仕組みに