OpenAICloudflare Developer Platform2026/03/18 0:00

Stream - Media Transformations binding for Workers

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

Stream - Workers向け Media Transformations バインディング

Key Points

  • R2から直接変換
  • フレーム/音声抽出対応
  • wranglerで簡単設定

Summary

Media Transformations の Workers バインディングを使うと、R2 を含むプライベートな場所にある動画を Workers 内で直接変換(リサイズ、トリミング、フレーム抽出、音声抽出など)でき、変換結果をそのまま R2 へ保存したり AI ワークフローに渡したりできます。エッジでの最適化やトランスコード、フレーム抽出を簡単に統合できます。

Key Points

  • 設定(wrangler)
// wrangler.jsonc
{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "media": { "binding": "MEDIA" }
}
# wrangler.toml
[media]
binding = "MEDIA"
  • 基本的な使い方(JS/TS)
const video = await env.R2_BUCKET.get("input.mp4");
const result = env.MEDIA
  .input(video.body)
  .transform({ width: 480, height: 270 })
  .output({ mode: "video", duration: "5s" });
return await result.response();
  • 出力モード: video (MP4最適化), frame (静止画), spritesheet (複数フレーム), audio (M4A)
  • 主な利用ケース: プライベートソースの変換、動画最適化→R2保存、フレーム抽出による分類/説明、音声抽出→文字起こし
  • 実運用メモ: 入出力はストリーム処理可能、出力を再度 R2 に保存してキャッシュや再利用が容易

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

Stream - Workers の Media Transformations バインディング

Stream - Workers の Media Transformations バインディング

公開日: 2026-03-18 カテゴリ: Stream

Cloudflare の Media Transformations バインディングを Workers で使用できるようになりました。これにより、R2 バケットなどのプライベートな場所に保存された動画でも、リサイズ、クロップ、フレーム抽出、オーディオ抽出といった変換が可能になります。

主な利用シーン

  • プライベートまたは保護されたソースに保存された動画の変換
  • 動画を最適化して、出力を R2 に直接保存して再利用
  • Workers AI と組み合わせて、分類や説明のために静止フレームを抽出
  • Workers AI を使った文字起こしのためにオーディオトラックを抽出

始め方

まず、Wrangler の設定に Media バインディングを追加します。

wrangler.jsonc の例:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "media": {
    "binding": "MEDIA"
  }
}

wrangler.toml の例:

[media]
binding = "MEDIA"

その後、Worker 内でバインディングを使って動画を変換します。

JavaScript 例

export default {
  async fetch(request, env) {
    const video = await env.R2_BUCKET.get("input.mp4");
    const result = env.MEDIA.input(video.body)
      .transform({ width: 480, height: 270 })
      .output({ mode: "video", duration: "5s" });
    return await result.response();
  },
};

TypeScript 例

export default {
  async fetch(request, env) {
    const video = await env.R2_BUCKET.get("input.mp4");
    const result = env.MEDIA.input(video.body)
      .transform({ width: 480, height: 270 })
      .output({ mode: "video", duration: "5s" });
    return await result.response();
  },
};

出力モード

  • video — 最適化された MP4 クリップ
  • frame — 静止画像
  • spritesheet — 複数フレームのスプライトシート
  • audio — M4A の抽出

詳細は Media Transformations binding documentation を参照してください。