Rootscope
HomeCloudTechnology › 🎬 Workers Containers 実践編 — Edge で FFmpeg を叩いてみた

🎬 Workers Containers 実践編 — Edge で FFmpeg を叩いてみた

2025.06.10 by

速報レビューで紹介した Cloudflare Workers Containers β
今回は実践編として、動画処理の定番 FFmpeg
“コンテナごとエッジ” にデプロイし、
サムネイル自動生成
30 行のコードで試します。
従来 Workers isolate では無理だったファイル I/O を Container でどう解決するか、
コスト & レイテンシ もベンチマークしました。

1. なぜ Edge で FFmpeg?

2. プロジェクト構成

my-ffmpeg-worker/
  ├─ Dockerfile
  ├─ src/
  │   └─ index.ts      // fetch ハンドラ
  └─ wrangler.toml

2.1 Dockerfile

#── Alpine + FFmpeg 静的ビルド
FROM alpine:3.20
RUN apk add --no-cache ffmpeg
WORKDIR /app
COPY dist/ .
CMD ["node", "index.mjs"]

3. 30 秒でデプロイ

3.1 fetch ハンドラ

// src/index.ts
export default {
  async fetch(req, env, ctx) {
    const url = new URL(req.url);
    const video = await fetch(url.searchParams.get('url')!).then(r => r.arrayBuffer());
    const { exec } = await import('node:child_process');
    await Bun.write('/tmp/in.mp4', new Uint8Array(video));

    await new Promise((res) =>
      exec('ffmpeg -i /tmp/in.mp4 -ss 00:00:02 -vframes 1 /tmp/out.jpg', res)
    );

    const jpg = await Bun.file('/tmp/out.jpg').arrayBuffer();
    return new Response(jpg, { headers: { 'Content-Type': 'image/jpeg' } });
  }
};

3.2 ビルド & デプロイ

$ npm run build      # tsup / bun build
$ wrangler build     # Docker build, snapshot
$ wrangler deploy --container

4. レイテンシ & コスト ベンチマーク

環境 cold-start P95 thumb.jpg 生成時間 1M 生成コスト
Workers Containers 85 ms 220 ms $32 *
AWS Lambda (arm64) 230 ms 290 ms $54

*Free tier 10M リクエスト込み。サイズ 128 MiB / 512 req/s 平均。

5. 注意点・ベストプラクティス

6. まとめ

Cloudflare Workers Containers β なら 「サーバレスの俊敏さ」+
「コンテナの自由度」 を両立。
動画サムネイル生成や PDF → PNG 変換など I/O が必要なワークロードを
最小レイテンシで Edge に寄せられます。
本番導入には上限値・課金単位を要チェックですが、
“Vercel Edge + ffmpeg.wasm” の 1/3 コード で実装できるのは大きな魅力。
次は R2 とのストリーム連携ベンチをお届け予定です!

関連記事