MediaConvert Probe APIにUIが追加されたので、FFprobeと使い分けを検証してみた

MediaConvertProbeAPI

AWS上での動画メタデータの取得方法

みなさんはAWS上で動画を処理するとき、その動画の尺やコーデックといったメタデータはどうやって取得していますでしょうか?

私が実際に行ったことのある具体的なユースケースを挙げてみます。例えばスポーツ中継の実況を文字起こしするときに、4時間を超える試合をAmazon Transcribeで処理しようとするとエラーになってしまいます。そのため、あらかじめ尺を確認してから処理させる必要がありました。

その他にも「インターレース素材ならプログレッシブに変換する」「HDR素材かどうかを確認してSDRに変換する」など、事前にメタデータを確認してから処理を分岐させるケースは意外と多いです。

LambdaでFFprobeを使用

上記のような確認が必要となった場合、私はこれまではLambdaでFFprobeを使ってメタデータを解析するという方法を取っていました。

ちなみにFFprobeをLambdaで使う方法はいくつかあります。コミュニティ製のLambdaレイヤーを使う方法、自前でレイヤーをビルドして登録する方法、Dockerイメージにバイナリを含めてパッケージングする方法、そしてS3にバイナリを置いてLambda実行時にダウンロードして使う方法です。 私(のようなIT初心者)の場合、Pythonのバージョンに依存しないっていうところがちょっとした保守の削減に有効ではないか?と感じ、S3にバイナリを置く方式を使っていました。しかし、こちらはもちろんダウンロードする時間があるため処理時間が少しかかってしまうところは難点でした。

MediaConvert Probe API

そこで今回記事のネタとしたのがMediaConvert の Probe APIというものです。

こちら、2025年2月ごろにProbe APIが登場したものみたいですが、私は使ったことがありませんでした。そんな中、2026年2月にマネジメントコンソールのUIも追加されたということを知ったので、そもそもどんな情報が取得できるのかも含めて、改めて検証してみました。

改めて、Probe APIは動画ファイルのヘッダーメタデータを読み取ることで、実際にエンコード処理をすることなく、コーデックや色空間、素材尺などの情報を高速で取得できるというものです。しかも無料とのこと。もっと早く知っておけばよかったです。

ということで、さっそく使ってみます!

マネジメントコンソールで検証してみた

ジョブの作成画面を開くと、入力欄に「入力を調べる - 新規」というボタンが追加されています。これが今回追加されたProbe UIです。

入力ファイルのURLを指定してボタンを押すと、メタデータが返ってきます。

いくつかのフォーマットで試してみました。

MP4

{
  "metadata": {
    "fileSize": 232255745,
    "mimeType": "video/mp4"
  },
  "container": {
    "format": "mp4",
    "duration": 180.032,
    "tracks": [
      {
        "index": 1,
        "codec": "AVC",
        "duration": 180,
        "trackType": "video",
        "videoProperties": {
          "frameRate": { "numerator": 30, "denominator": 1 },
          "width": 1920,
          "height": 1080,
          "bitDepth": 8,
          "bitRate": 10000425,
          "codecMetadata": {
            "profile": "Main",
            "level": "4.1",
            "scanType": "Progressive",
            "colorPrimaries": "ITU_709"
          }
        }
      },
      {
        "index": 2,
        "codec": "AAC",
        "trackType": "audio",
        "audioProperties": {
          "sampleRate": 48000,
          "channels": 2,
          "bitRate": 317369
        }
      }
    ]
  }
}

こちら、マネジメントコンソール上では1秒もかからず結果が返ってきました。別リージョンのファイルでも3秒かからず取得できました。時間尺、プログレッシブ判定、色空間など実用的な情報が揃っています。

WAV

{
  "metadata": {
    "fileSize": 6228676,
    "mimeType": "audio/wave"
  },
  "container": {
    "format": "wave",
    "duration": 32.3323125,
    "tracks": [
      {
        "index": 1,
        "codec": "PCM",
        "duration": 32.3323125,
        "trackType": "audio",
        "audioProperties": {
          "sampleRate": 48000,
          "channels": 2,
          "bitDepth": 16,
          "bitRate": 1536000
        }
      }
    ]
  }
}

音声ファイルでも問題なく取得できました。尺やサンプルレート、チャンネル数などが確認できます。冒頭で挙げたAmazon Transcribeの時間尺チェックにも使えそうです。

MXF

{
  "metadata": {
    "fileSize": 134157384,
    "mimeType": "application/mxf"
  },
  "container": {
    "format": "mxf",
    "tracks": [
      {
        "index": 512,
        "codec": "MPEG2",
        "trackType": "video",
        "videoProperties": {
          "frameRate": { "numerator": 30000, "denominator": 1001 },
          "width": 1920,
          "height": 1080,
          "transferCharacteristics": "ITU_709"
        }
      },
      {
        "index": 768,
        "codec": "PCM",
        "trackType": "audio",
        "audioProperties": {
          "sampleRate": 48000,
          "channels": 1,
          "bitDepth": 24,
          "bitRate": 1152000
        }
      }
    ]
  }
}

残念ながら放送業界でよく使われるMXF素材では、時間尺や詳細なコーデック情報が取得できませんでした…。用途によってはまだFFprobeが必要になりそうです。

続いて、UI以外で使う時の方法もやってみます。

Step Functions での検証

アクションの欄の MediaConvert に Probe という項目があるので、それを使用します。引数には以下を指定します。

{
  "InputFiles": [
    {
      "FileUrl": "{% $states.input.FileUrl %}"
    }
  ]
}

実行時の入力値を以下のようにします。

{ "FileUrl": "s3://[bucket_name]/filename.mxf" }

実行すると、以下のように出力されました。

CLI での検証

CLIでも試してみます。

aws mediaconvert probe \
  --input-files FileUrl=s3://[bucket_name]/filename.mxf \
  --endpoint-url https://mediaconvert.ap-northeast-1.amazonaws.com

するとこのように返ってきました。

{
    "ProbeResults": [
        {
            "Container": {
                "Format": "mxf",
                "Tracks": [
                    {
                        "Codec": "MPEG2",
                        "Index": 512,
                        "TrackType": "video",
                        "VideoProperties": {
                            "FrameRate": {
                                "Denominator": 1001,
                                "Numerator": 30000
                            },
                            "Height": 1080,
                            "TransferCharacteristics": "ITU_709",
                            "Width": 1920
                        }
                    },
                    ...
                ]
            }
        }
    ]
}

マネジメントコンソール(UI)、Step Functions、CLIのいずれからでも問題なく使えることが確認できました。

まとめ

結論としては、使えるケースでは本当に爆速でした。

MP4やWAVでは時間尺、プログレッシブ判定、色空間、サンプルレートなど実用的なデータが揃っていました。一方、放送業界でよく使われるMXF素材では、時間尺や詳細なコーデック情報など必要な情報が取得できないケースもあり、まだFFprobeに頼る場面も多そうです。

とはいえ、取得できる情報が用途と合致するケースであれば、インフラの管理も不要で無料、かつ爆速で使えるのは大きなメリットと感じました。まずは使えるところからProbe APIに切り替えていき、取得したい情報が足りない場合はFFprobeを使うというのが現時点の運用かなと思いました。

Previous Post