AWS Elemental MediaConvert をちょっと触ってみた

お久しぶりです。
一年に一回以上はQiitaへ投稿する @Momijinn です。

この記事は、 AWS Elemental MediaConvert をちょっと触ってみた話を書いていきます。

#  AWS Elemental MediaConvert とは

動画ファイルを色々な形式に変換する AWS のメディアサービス です。
さらっと見た限りだと、できないことはないレベルで色々できる印象です。

詳細は下記参照。

https://aws.amazon.com/jp/mediaconvert/

（余談ですが、色々な設定ができるからこそ コードに組み込むのはすごく大変。）

ユースケースは、以下の資料がわかりやすいです。

https://pages.awscloud.com/rs/112-TZM-766/images/20200331_AWSBlackBelt_MediaConvert.pdf

# 作ってみた

CDK で軽く作ったものをのせます。

## ソースコード

https://github.com/Momijinn/sample-aws-media-convert

## 構成

ユーザが直接 S3 へ動画ファイルをアップロードして、変換されたものをユーザが直接確認するみたいな構成です。

MediaConvert は、動画を `640 x 360` の大きさにします。
また、音声も出力に含めました。

| 構成図 |
| --- |
| ![page0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/db7bc26a-a820-446e-15f1-fbd7f2516267.jpeg) |

* `S3://${bucket}/input` : 変換をする動画を入れるところ
* `S3://${bucket}/output` : MediaConvertで変換された動画がはいるところ 

## デモ

色々な事情で紙芝居形式に書いていきます。

### 変換を行う動画

どこにでもある mp4 を用意。

https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4

| 動画 | 動画情報 |
| --- | --- |
| ![スクリーンショット 2024-12-13 20.32.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/42dfffa4-66c2-cb71-2426-b5dba4cf10cf.png) | ![スクリーンショット 2024-12-13 20.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/536d4049-2853-bd9c-d454-cb21e9939522.png) |

### S3 へアップロード

| S3 へ |
| --- |
| ![スクリーンショット 2024-12-13 20.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/4ea6c1b7-d132-1d56-ffd9-133f07c0db21.png) |

### 動画が生成される

| 生成される |
| --- |
| ![スクリーンショット 2024-12-18 11.12.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/3f7ab546-8a37-a4a7-4e60-ff8b0edb7ae6.png) |

動画情報を見るとたしかに `640 x 360` の大きさになっています。

| 生成された動画情報 |
| --- |
| ![スクリーンショット 2024-12-13 20.38.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/bbe63245-fe18-90c7-9ef9-a6d91cb18060.png) |

MediaConvert のジョブをみるとたしかに生成されたことが確認できます。

| MediaCovnert |
| --- |
| ![スクリーンショット 2024-12-13 20.41.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/676c4d1d-558e-4239-d92b-0aa80db6522a.png) |

## 引っかかったポイント

### MediaConvert のパラメータ多すぎ問題

単純に「動画の大きさ変えてほしい」場合も「出力する動画の種類は何？」を設定しないとエラーになります。
また、出力したい動画（出力グループ）によっては必須パラメータが変わります。
なにが必須なのかを確認するのがしんどい・・・。

| 出力したい動画（出力グループ） |
| --- |
| ![スクリーンショット 2024-12-13 19.37.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/75fc1d7f-814c-0635-38f2-93a56c7a3eb3.png) |

下記にパラメータ情報があるが なかなかの数。
https://any-api.com/amazonaws_com/mediaconvert/docs/Definitions/OutputGroup

私が作ったコードだと以下の部分です。

https://github.com/Momijinn/sample-aws-media-convert/blob/main/app/lambda/mediaConverter/index.ts#L34-L92

#### 解決策

ネットを漁ると UI 上で 設定を作り込んでから、設定情報をエクスポートして Media Convert の設定に貼るのが楽とのこと。
確かにドキュメントにらめっこするよりは楽。

Media Convert -> 出力が成功したジョブ -> JSON 表示で確認ができる。

| JSON 表示 |
| -- |
| ![スクリーンショット 2024-12-13 19.40.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96450/50c5e73e-3b17-0ada-f0fa-759c8fc627f3.png) |

### 権限の設定が多い問題

（※ これは私が CDK 慣れていないってものあるかもです。）

今回のデモをするのに以下の権限が必要で、何度も CloudWatch のお世話になりました。

* Mediaconverter に対して、S3の読み書き権限の付与

* Lambdaに対して、 AWSのサービスを使える権限（iam:PassRole）と Mediaconverter を実行する権限（mediaconvert:CreateJob）の付与

* S3 に対して Lambda にイベントを通知する権限の付与

私が作ったコードだと以下の部分です。

https://github.com/Momijinn/sample-aws-media-convert/blob/main/app/lib/app-tokyo-stack.ts#L17-L50

# まとめ

Elemental MediaConvert をちょっと触ってみたみたという話をしました。
動画ファイルを色々な形式に変換したい場合は、良いサービスだと思いました。
その一方で設定項目がかなりある（& メディアならではの専門用語もたくさんある）ので、なかなかハードル高い。

# 最後に

今年も無事にアドベントカレンダーに参加することができました。
それではよい年末をお過ごしください。