[UPDATE] AWS Elemental MediaConvertで動画解析用のAPIが利用可能になりました! [Probe API]

[UPDATE] AWS Elemental MediaConvertで動画解析用のAPIが利用可能になりました! [Probe API]

メディアファイルのコーデックやフレームレート、解像度など詳細情報を取得できるProbe APIがMediaConvertにやってきました!これまでFFprobeやMediaInfoを使っていたケースでも、MediaConvertの標準機能で実現ができます。
Clock Icon2025.04.11

はじめに

清水です。ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConverで、メディアファイルを分析して詳細なメタデータを取得できる Probe というAPIが追加されました。What's New at AWSへのポストは2025/04/11時点で確認できておりませんが、AWS CLIのCHANGELOG、バージョン 1.38.4 の記載でアップデートを確認することができます。

  • api-change:mediaconvert: The AWS MediaConvert Probe API allows you to analyze media files and retrieve detailed metadata about their content, format, and structure.

APIの更新確認に便利なサイトAWS API Changesで確認すると、本アップデートは2025/02/28付けのものだったとのことです。

この Probe API 、誤解を恐れず簡単に言ってしまえばFFprobeMediaInfoのMediaConvert版です。入力メディアファイルのコーデックやフレームレート、解像度といった各種詳細情報を取得することができます。

本エントリではこのMediaConvert Probe APIについて、必要となる背景や実際の動画解析結果などをまとめてみました。

動画変換前にメディアファイルの詳細情報が知りたい

さて冒頭に述べたとおり、MediaConvertの基本的な機能としてはファイルベースの動画 変換 です。変換処理中にMediaConvertの内部で入力メディアファイルの詳細情報(コーデックやフレームレート、解像度などなど)を解析することはあれど、それをユーザ側が知る術はありませんでした。

しかし、動画変換前に入力メディアファイルの詳細情報を知りたいという要件はあります。MediaConvertを利用しているケースの多くでは、例えばAWS Lambdaと連携するなどして処理を自動化しているかと思います。MediaConvertのJobを作成する処理の中で、入力メディアファイルの詳細情報によってJobに指定するPresetやJob Templateを切り替えたい、ということがありますよね。例えば、解像度が4KなのかFull HDなのかHDなのか、もしくは横長Landscapeなのか縦長Portraitなのか、といった情報でJob Templateを切り替えるというぐあいです。

こんなとき、従来であればFFprobeMediaInfoを使ってメディアファイルの詳細情報を取得する、ということをしていたかと思います。LambdaでFFprobeやMediaInfoを動かす、という情報は、例えばAWS公式ブログでもいくつか目にしますよね。

かくいう私も、以前LambdaでMediaInfoを動かしたことがあります。

MediaInfoについては公式サイトでLambda Layer版も配布しています。

FFprobeについてもAWS Serverless Application RepositoryAWS verified authorのバッチを持つ作成者の方が公開しているLambda Layer版があります。(おそらく公式というわけではなさそうですが。)

このように、最近ではFFprobeもMediaInfoもLambdaで利用すること自体のハードルは下がっているのかなと思います。(以前筆者は、MediaInfoをLambdaで動作させるのに苦労したこともありましたが、今は昔の話です。)

しかし、あくまで外部ライブラリとなるので管理など多少なりとも手間は発生してしまいますよね。そんな中、MediaConvertの公式ツールというようなかたちでメディアファイルの詳細情報を取得できるProbe APIが登場してくれました!

MediaConvertのProbe APIで動画を解析してみた

Probe API登場の背景などを確認できたところで、さっそくこのProbe APIを使ってみましょう。

なお本ブログエントリ執筆時点(2025/04/11)で、このProbe APIについてMediaConvert User Guide上の記載は見当たりませんでした。MediaConvert API Referenceを参照しつつ、実際に使用するAWS CLIのCommand Referenceを確認していきます。

そもそも、Probe API の名のとおり、基本的には各種SDKやAWS CLIなどAPI経由で使用することが前提の機能なのかなと思います。MediaConvertのマネジメントコンソール上でも(ざっとみた限りですが)、この機能のUIなどは確認できませんでした。

なお、本エントリではAWS CLIを用いて動作確認をしていますが、もちろんほかSDKでも利用は可能のようです。参考までにBoto3のドキュメンのURLを掲示しておきます。

今回、AWS CLIの実行環境はAWS CloudShellを使いました。バージョンなどの情報は以下となります。

[cloudshell-user@ip-10-132-87-200 ~]$ aws --version
aws-cli/2.25.13 Python/3.12.9 Linux/6.1.130-139.222.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023

AWS CLIでのMediaConvert Probe API(サブコマンドprobe)ですが、以下のように--input-filesオプションで入力メディアファイルのURLを指定して利用します。

aws mediaconvert probe --input-files FileUrl=s3://bucket-name/path/to/object

細かい点ですが、--input-filesオプションではFileUrl=に続けてS3のURLを指定することに注意しましょう。(私は当初、このFileUrl=を見落としてしまい、エラーと格闘しました。)

では実際に1つ目の動画解析結果をみてみましょう。iPhoneで撮影した4Kの動画ファイルを入力としました。動画の長さやフォーマット、コーデックやビットレート、解像度などの情報が取得できていますね。フレームレートがDenominatorNumeratorでの取得となる点には注意しましょう。

[cloudshell-user@ip-10-132-87-200 ~]$ aws mediaconvert probe \
  --input-files FileUrl=s3://bucket-name/path/to/IMG_6660.MOV
{
    "ProbeResults": [
        {
            "Container": {
                "Duration": 51.20333333333333,
                "Format": "quicktime",
                "Tracks": [
                    {
                        "Codec": "HEVC",
                        "Duration": 51.20333333333333,
                        "Index": 1,
                        "TrackType": "video",
                        "VideoProperties": {
                            "BitDepth": 8,
                            "BitRate": 54023789,
                            "ColorPrimaries": "ITU_2020",
                            "FrameRate": {
                                "Denominator": 709,
                                "Numerator": 42522
                            },
                            "Height": 2160,
                            "MatrixCoefficients": "ITU_2020_NCL",
                            "TransferCharacteristics": "ARIB_B67",
                            "Width": 3840
                        }
                    },
                    {
                        "AudioProperties": {
                            "BitDepth": 16,
                            "BitRate": 189147,
                            "Channels": 2,
                            "FrameRate": {
                                "Denominator": 256,
                                "Numerator": 11025
                            },
                            "LanguageCode": "und",
                            "SampleRate": 44100
                        },
                        "Codec": "AAC",
                        "Duration": 51.20333333333333,
                        "Index": 2,
                        "TrackType": "audio"
                    },
                    {
                        "DataProperties": {
                            "LanguageCode": "und"
                        },
                        "Duration": 51.20333333333333,
                        "Index": 3,
                        "TrackType": "data"
                    },
                    {
                        "DataProperties": {
                            "LanguageCode": "und"
                        },
                        "Duration": 51.20333333333333,
                        "Index": 4,
                        "TrackType": "data"
                    },
                    {
                        "DataProperties": {
                            "LanguageCode": "und"
                        },
                        "Duration": 51.20333333333333,
                        "Index": 5,
                        "TrackType": "data"
                    }
                ]
            },
            "Metadata": {
                "ETag": "\"098922ead11ecf89ef230d931dab01d3-21\"",
                "FileSize": 347576662,
                "LastModified": "2023-06-26T05:48:06+00:00",
                "MimeType": "video/quicktime"
            },
            "TrackMappings": [
                {
                    "AudioTrackIndexes": [
                        2
                    ],
                    "DataTrackIndexes": [
                        3,
                        4,
                        5
                    ],
                    "VideoTrackIndexes": [
                        1
                    ]
                }
            ]
        }
    ]
}

MediaConvertは入力メディアファイルがS3にあることを前提としながらも、HTTPSないしHTTPでアクセス可能であればそのメディアファイルも入力として使用できます。([アップデート] AWS Elemental MediaConvertがHTTPSからのファイル入力に対応していました! | DevelopersIO)これと同様に、Probe APIもHTTPSないしHTTPでアクセス可能なURLを入力として指定することができます。ということで2つ目の例は、デジカメ(OLYMPUS STYLUS SH-3)で撮影した動画ファイルをHTTPS経由で入力としてみました。(ただしHTTPSのホスティング先はS3バケットです、パブリック読み込み可能な公開状態としています。)

[cloudshell-user@ip-10-132-87-200 ~]$ aws mediaconvert probe \
  --input-files FileUrl=https://bucket-name.s3.ap-northeast-1.amazonaws.com/path/to/PC011010.MOV
{
    "ProbeResults": [
        {
            "Container": {
                "Duration": 37.037,
                "Format": "quicktime",
                "Tracks": [
                    {
                        "Codec": "AVC",
                        "Duration": 37.037,
                        "Index": 1,
                        "TrackType": "video",
                        "VideoProperties": {
                            "BitDepth": 8,
                            "BitRate": 18067827,
                            "FrameRate": {
                                "Denominator": 1001,
                                "Numerator": 30000
                            },
                            "Height": 1080,
                            "Width": 1920
                        }
                    },
                    {
                        "AudioProperties": {
                            "BitDepth": 16,
                            "BitRate": 1024000,
                            "Channels": 2,
                            "FrameRate": {
                                "Denominator": 6,
                                "Numerator": 125
                            },
                            "LanguageCode": "eng",
                            "SampleRate": 32000
                        },
                        "Codec": "PCM",
                        "Duration": 37.037,
                        "Index": 2,
                        "TrackType": "audio"
                    }
                ]
            },
            "Metadata": {
                "ETag": "\"1d1ce6630521ab3da025302fd02eeba3-6\"",
                "FileSize": 88420768,
                "LastModified": "2023-06-26T05:36:37+00:00",
                "MimeType": "video/quicktime"
            },
            "TrackMappings": [
                {
                    "AudioTrackIndexes": [
                        2
                    ],
                    "VideoTrackIndexes": [
                        1
                    ]
                }
            ]
        }
    ]
}

フォーマットがQuickTimeのものが続いたので、3つ目はMP4形式のものを確認してみましょう。といっても手ごろなものがなかったので、Elastic Transcoderで変換したMP4ファイルを入力としてみました。Preset ID 1351620000001-000010でMP4形式に変換したメディアファイルです。

[cloudshell-user@ip-10-132-87-200 ~]$ aws mediaconvert probe \
  --input-files FileUrl=s3://bucket-name/path/to//mp4-IMG_5820.mp4
{
    "ProbeResults": [
        {
            "Container": {
                "Duration": 61.301,
                "Format": "mp4",
                "Tracks": [
                    {
                        "AudioProperties": {
                            "BitDepth": 16,
                            "BitRate": 160038,
                            "Channels": 2,
                            "FrameRate": {
                                "Denominator": 256,
                                "Numerator": 11025
                            },
                            "LanguageCode": "und",
                            "SampleRate": 44100
                        },
                        "Codec": "AAC",
                        "Duration": 61.301,
                        "Index": 1,
                        "TrackType": "audio"
                    },
                    {
                        "Codec": "AVC",
                        "Duration": 61.262,
                        "Index": 2,
                        "TrackType": "video",
                        "VideoProperties": {
                            "BitDepth": 8,
                            "BitRate": 2393765,
                            "FrameRate": {
                                "Denominator": 1001,
                                "Numerator": 30000
                            },
                            "Height": 720,
                            "Width": 1280
                        }
                    }
                ]
            },
            "Metadata": {
                "ETag": "\"cc256eb83361f525393be2fcfd7f3abd-4\"",
                "FileSize": 19610148,
                "LastModified": "2025-04-01T07:53:21+00:00",
                "MimeType": "video/mp4"
            },
            "TrackMappings": [
                {
                    "AudioTrackIndexes": [
                        1
                    ],
                    "VideoTrackIndexes": [
                        2
                    ]
                }
            ]
        }
    ]
}

MediaConvert Probe APIの料金について

AWS CLIのaws mediaconvert probeコマンドを使ってメディアファイルの詳細情報を取得してみました。

さて、とても便利なMediaConvert Probe APIですが、気になるのはその料金です。本ブログエントリ執筆時点(2025/04/11)でMediaConvert PricingページにProbe APIの料金は掲載されていません。先に述べたとおり、MediaConvert User Guideにも記載がありません。

MediaConvert変換した動画の長さ(時間)によって料金が決まります。さすがに入力メディアファイル全体の長さに対して課金はされないだろう、いやしかし無料で使えるということもないだろうなぁ、などと少しヤキモキしていたのですが、Probe API初利用から数日してAWS利用費を確認したところ、一部ですがProbe APIの料金が判明しました。

mp01

$0.00 per Invocations from 0 to 1,000,000 for NRT-Probe in Asia Pacific (Tokyo) ということで、100万回のProbe API呼び出しまでは無料とのことですね。これ以上の利用については不明なのですが、おそらく有料になるのではないかと筆者は推測しています。

あくまでAWSマネジメントコンソールから確認した利用明細を基準とした情報とはなりますが、MediaConvert Pricingページが更新されるまでの参考にしていただければと思います。

まとめ

AWS Elemental MediaConvertで新たに利用可能になったProbe APIについて確認してみました。入力メディアファイルのコーデックやフレームレート、解像度といった各種詳細情報を取得することが可能なAPIです。MediaConvertをプログラマブルに利用している場合は必須ともいえる機能であり、MediaConvertの標準機能として実装されたことを大変うれしく思います。一定量までは無料で利用できる(らしい)ことも魅力的ですよね。積極的に活用していきましょう!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.