AWS Elemental Linkのサムネイル画像をAWS CLI経由で取得してみた

これまでAWS Elemental Linkデバイスのサムネイル画像はAWSマネジメントコンソールからしか取得できませんでしたが、先日のアップデートによりAPI経由でも取得できるようになりました。実際にAWS CLIから取得して確認してみます。
2020.08.07

はじめに

清水です。以前のエントリでAWS Elemental LinkをAWS CLIから操作してみた際、マネジメントコンソールから確認できるLinkデバイスのサムネイル画像(入力された映像が確認できるもの)については、コマンドが存在せずに取得することができませんでした。ですが先ほどAWS API Changesを確認していると、ちょうどこのサムネイル取得に対応するAPIアップデートがありました。DescribeInputDeviceThumbnailというAWS Elemental MediaLiveのAPIで、2020/07/22に新規追加されたようです。

Channelリソースにアタッチされている、またはアタッチされていなくても、このAPIを利用することでサムネイルが取得できるようです。また以前はマネジメントコンソールからのみサムネイルが取得可能だった、とのことでした。

このAPIアップデートの確認ののち、AWS CLIについても確認したところ、こちらもサムネイル画像取得のコマンドが追加されていました。

AWS CLIコマンドリファレンスで確認すると、AWS CLI v2では2.0.34(2020/07/24リリース)から追加されていたようです。

本エントリではこのdescribe-input-device-thumbnailコマンドを使って、Linkデバイスに入力している映像のサムネイル画像をAWS CLIで取得してみたのでまとめてみます。

Linkデバイスのサムネイル画像をAWS CLIから取得してみる

では実際にAWS CLIを使って、Linkデバイスのサムネイル画像をAWS CLIから取得してみます。検証に利用した環境はmacOS上のAWS CLI v2で、具体的には下記となります。

% aws --version
aws-cli/2.0.38 Python/3.7.4 Darwin/19.6.0 exe/x86_64

AWS CLIコマンドリファレンスのdescribe-input-device-thumbnailのページでコマンドの詳細を確認しましょう。以下のようにデバイスID、Acceptヘッダ、そして出力ファイル名の3つを引数として必要とします。

% describe-input-device-thumbnail \
    --input-device-id <value> \
    --accept <value> \
    <outfile>

デバイスIDはhd-ではじまるLinkデバイスに紐づけられているIDですね。マネジメントコンソールやList系APIのほか、Linkデバイス底面に貼られているシールでも確認ができます。Acceptヘッダについてはimage/jpgeが現在指定可能な値のようです。

コマンド実行方法について確認できたので、実際のコマンド実行、サムネイル取得のための準備をします。Linkデバイスの電源をLANケーブルを接続、映像信号を入力します。映像信号について、今回はMacBook Proのデスクトップ画面をミラーリングしたものをHDMIで入力、音声もHDMI経由として、Big Bug Bunny4K版をVLC media playerでフルスクリーン再生しました。

マネジメントコンソールでDevicesの項目を確認すると以下の状態です。なおMediaLiveのChannelにはアタッチしていない状況となります。

いざ、describe-input-device-thumbnailコマンドを実行してみます。

% aws medialive describe-input-device-thumbnail \
    --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \
    --accept image/jpeg \
    /path/to/file/202008/link-thumbnail.jpg \
    --region us-west-2
{
    "ContentType": "image/jpeg",
    "ContentLength": "28675",
    "ETag": "588bd811d73048014f9e08549b577526XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "LastModified": "2020-08-07T11:50:59+00:00"
}

レスポンスとして、ContentType、ContentLength、Etag、 LastModifieのそれぞれの情報が返ります。サムネイル画像本体はAWS CLI実行環境に保存されているので確認してみましょう。以下が実際に取得したサムネイル画像ファイルです。

macOSからファイルの情報を確認すると、以下のように320x180解像度の画像であることが確認できます。

なおマネジメントコンソールから右クリックして保存した画像についても、同様に320x180の解像度でした。

Linkデバイスに映像を入力していない場合の挙動についても確認しておきましょう。AWSマネジメントコンソールでは「No preview is available」の表示になりますね。AWS CLIでdescribe-input-device-thumbnailコマンドを実行すると、「エラーになる」ではなく、以下のようにContentLengthが0バイトでレスポンスがありました。OS側にも0バイトのファイル(ようは空のファイル)として存在はしています。

% aws medialive describe-input-device-thumbnail \
    --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \
    --accept image/jpeg \
    /path/to/file/202008/link-thumbnail-noinput.jpg \
    --region us-west-2
{
    "ContentType": "image/jpeg",
    "ContentLength": "0",
    "ETag": "7c036ecfd6af9123c266e3dde2878473XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "LastModified": "2020-08-07T11:56:33+00:00"
}

Linkデバイスが接続されていない状態でも、同様に0バイトでのレスポンスが返る結果となりますした。実行環境へのファイルの保存も同様です。(0バイトのファイルが作成されています。)

% aws medialive describe-input-device-thumbnail \
    --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \
    --accept image/jpeg \
    /path/to/file/202008/link-thumbnail-disconnected.jpg \
    --region us-west-2
{
    "ContentType": "application/json",
    "ContentLength": "0",
    "ETag": "7c036ecfd6af9123c266e3dde2878473XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "LastModified": "2020-08-07T12:01:08+00:00"
}

まとめ

先日アップデートされたAWS CLIのaws medialive describe-input-device-thumbnailを使って、AWS Elemental Linkデバイスに入力されている映像のサムネイル画像を取得してみました。これまでサムネイル画像はマネジメントコンソールからのみしか取得できませんでしたが、アップデートでAPI経由でも取得できるようになったのは嬉しいですね!また私の覚えている限り、画像が取得できる2つ目のAWS CLIコマンドとなりました。1つ目はみなさまご存知のとおり、aws ec2 get-console-screenshotコマンドですね。(【新機能】EC2コンソールのスクリーンショットを取得可能になりました | Developers.IOaws ec2 get-console-screenshotコマンドでは出力結果がBASE64エンコードされているので確認のため一処理必要でしたが、aws medialive describe-input-device-thumbnailコマンドだと特に必要ないのも嬉しいなぁと思いました。