Lottieアニメーションのパフォーマンス最適化:ファイルサイズ削減と描画高速化

Lottieアニメーション最適化

Lottieアニメーションは「軽量」というイメージがあるが、作り方次第でJSONファイルが数MBに肥大化し、描画でCPUをフル使用するほど重くなることもある。この記事では実務で確認した最適化手法を具体的に解説する。

Lottieが重くなる主な原因

  1. ビットマップ素材のインライン化:PNG・JPEGがbase64でJSONに埋め込まれると1画像で数百KBになる
  2. 不要なキーフレーム:AEで自動生成された余分なキーフレームがデータ量を増やす
  3. 複雑なパス:パスポイントが多いシェイプは描画負荷が高い
  4. 多層のPrecomp:ネストが深いほどJSONが複雑になる
  5. Canvasレンダラーの非使用:SVGレンダラーは複雑なアニメで描画が遅い

あなたの「作りたい」を叶えるAdobeの動画ツール

初心者からプロまで。目的に合わせて最適な制作方法が見つかります

1まずは無料で始めるなら Adobe Express

豊富なテンプレートとAI機能で、誰でも簡単に見栄えの良い動画が作れます。SNS投稿やショート動画の作成に最適。ブラウザやスマホアプリですぐに始められます。

2プロ品質を求めるなら テンプレート活用

「こんな動画が作りたい」というイメージに合うテンプレートを選ぶだけ。テキストや映像を差し替えるだけで、プロが作ったような動画が驚くほど手軽に完成します。

3本格的な編集に挑戦するなら Creative Cloud

テンプレートのカスタマイズや、ゼロからオリジナリティを追求するならプロ用ツールが最適。2つの代表的なアプリで、表現の幅は無限大に広がります。

  • Premiere Pro: カット編集、テロップ、色調整など、動画編集の全てをこなす万能ツール。
  • After Effects: VFXやモーショングラフィックスなど、映像をリッチに彩る特殊効果ツール。

これらを含む20以上のアプリが全て使えるコンプリートプランがおすすめです。

あなたの「作りたい」を叶えるAdobeの動画ツール

1無料で手軽に始める

豊富なテンプレートとAI機能で、SNS投稿やショート動画の作成に最適です。

Adobe Expressを試す

2プロ品質の本格編集へ

Premiere ProやAfter Effectsで、テンプレート活用から本格的な映像制作まで挑戦できます。

3か月半額で始める

ファイルサイズ削減:AEの書き出し前にやること

1. キーフレームの間引き

AEでエクスプレッションを「キーフレームに変換」すると大量のキーフレームが生成される。Bodymovin書き出し前にこれらを手動で削除するか、「Lazy」オプションを使う。

2. ビットマップ素材をシェイプに置き換える

ロゴ・アイコンなど単純なグラフィックはIllustratorでSVG化し、AEにシェイプとしてインポートする。

3. Precompの展開

Bodymovinの「Flatten precomps」オプションを有効にするか、書き出し前に手動でPrecompをアンリンクする。

書き出し後の最適化ツール

lottie-optimizerを使ったCLI最適化

# インストール
npm install -g lottie-optimizer

# 最適化実行
lottie-optimizer input.json output.min.json

# オプション
lottie-optimizer input.json output.json --precision 2  # 小数点以下2桁に丸め
lottie-optimizer input.json output.json --expressions   # エクスプレッション保持

LottieFiles オンラインオプティマイザー

lottiefiles.comのオンラインツールでJSONをアップロードして最適化できる。品質を調整しながら圧縮率を確認できる。

Pythonで独自最適化スクリプト

import json
import re

def optimize_lottie(input_path: str, output_path: str, precision: int = 3):
    with open(input_path, "r", encoding="utf-8") as f:
        data = json.load(f)

    # 数値の精度を下げる(再帰的に処理)
    def round_numbers(obj):
        if isinstance(obj, float):
            return round(obj, precision)
        elif isinstance(obj, list):
            return [round_numbers(x) for x in obj]
        elif isinstance(obj, dict):
            return {k: round_numbers(v) for k, v in obj.items()}
        return obj

    optimized = round_numbers(data)

    with open(output_path, "w", encoding="utf-8") as f:
        json.dump(optimized, f, separators=(",", ":"), ensure_ascii=False)

    import os
    orig_size = os.path.getsize(input_path) / 1024
    opt_size = os.path.getsize(output_path) / 1024
    print(f"元: {orig_size:.1f}KB → 最適化後: {opt_size:.1f}KB ({100*(1-opt_size/orig_size):.1f}%削減)")

optimize_lottie("animation.json", "animation.min.json", precision=2)

描画パフォーマンスの改善

1. SVGからCanvasレンダラーに切り替える

// 複雑なアニメーションにはcanvasレンダラーが有効
lottie.loadAnimation({
  container: document.getElementById("lottie"),
  renderer: "canvas",  // "svg"から変更
  loop: true,
  autoplay: true,
  path: "/animation.json"
});

Canvasレンダラーはブラウザのハードウェアアクセラレーションを活用するため、複雑なアニメーションで大幅に高速化できる。ただしSVGの DOM操作ができなくなるため、インタラクティブな操作が必要な場合はSVGのままが良い。

2. Intersection Observerで画面外のアニメを停止

const anim = lottie.loadAnimation({ ... });

const observer = new IntersectionObserver(
  (entries) => {
    entries.forEach((entry) => {
      if (entry.isIntersecting) {
        anim.play();
      } else {
        anim.pause();  // 画面外では停止してCPUを節約
      }
    });
  },
  { threshold: 0.1 }
);

observer.observe(document.getElementById("lottie"));

3. requestAnimationFrameとの同期

// フレームレートを制限する(デフォルト60fps → 30fpsに)
const anim = lottie.loadAnimation({
  ...
  rendererSettings: {
    dpr: Math.min(window.devicePixelRatio, 2),  // 高解像度デバイスでの負荷制限
    progressiveLoad: true,
  }
});

// 30fpsに制限
anim.setSpeed(0.5);  // 0.5倍速 = 実質30fps相当の更新間隔

Reactでのパフォーマンス最適化

import { memo, useMemo } from "react";
import Lottie from "lottie-react";

// memoでコンポーネントの不要な再レンダリングを防ぐ
const LottiePlayer = memo(function LottiePlayer({ src }: { src: string }) {
  // useMemoでanimationDataをメモ化
  const animationData = useMemo(() => {
    return require(`../assets/${src}.json`);
  }, [src]);

  return (
    <Lottie
      animationData={animationData}
      loop
      autoplay
      rendererSettings={{ preserveAspectRatio: "xMidYMid slice" }}
    />
  );
});

最適化前後のパフォーマンス計測

// Chrome DevToolsのPerformanceパネルで計測
// または簡易計測
const start = performance.now();
// アニメーション1秒分の描画
setTimeout(() => {
  const duration = performance.now() - start;
  console.log(`描画時間: ${duration}ms`);
  // 16ms以内なら60fps維持
}, 1000);

まとめ:最適化のチェックリスト

  • ✅ ビットマップ素材をシェイプに置き換え済みか
  • ✅ 書き出し後にlottie-optimizerを実行したか
  • ✅ 複雑なアニメーションはcanvasレンダラーを使っているか
  • ✅ 画面外のアニメーションはIntersection Observerで停止しているか
  • ✅ Reactコンポーネントはmemo・useMemoで最適化されているか

これらを実装するだけで、Lottieアニメーションの体感速度は大幅に改善できる。

あなたの「作りたい」を叶えるAdobeの動画ツール

初心者からプロまで。目的に合わせて最適な制作方法が見つかります

1まずは無料で始めるなら Adobe Express

豊富なテンプレートとAI機能で、誰でも簡単に見栄えの良い動画が作れます。SNS投稿やショート動画の作成に最適。ブラウザやスマホアプリですぐに始められます。

2プロ品質を求めるなら テンプレート活用

「こんな動画が作りたい」というイメージに合うテンプレートを選ぶだけ。テキストや映像を差し替えるだけで、プロが作ったような動画が驚くほど手軽に完成します。

3本格的な編集に挑戦するなら Creative Cloud

テンプレートのカスタマイズや、ゼロからオリジナリティを追求するならプロ用ツールが最適。2つの代表的なアプリで、表現の幅は無限大に広がります。

  • Premiere Pro: カット編集、テロップ、色調整など、動画編集の全てをこなす万能ツール。
  • After Effects: VFXやモーショングラフィックスなど、映像をリッチに彩る特殊効果ツール。

これらを含む20以上のアプリが全て使えるコンプリートプランがおすすめです。

あなたの「作りたい」を叶えるAdobeの動画ツール

1無料で手軽に始める

豊富なテンプレートとAI機能で、SNS投稿やショート動画の作成に最適です。

Adobe Expressを試す

2プロ品質の本格編集へ

Premiere ProやAfter Effectsで、テンプレート活用から本格的な映像制作まで挑戦できます。

3か月半額で始める
タイトルとURLをコピーしました