AWS Elemental MediaConvertの使い方（AWSマネジメントコンソール利用）

AWSのElmentalシリーズで MediaConvertを使う機会が増えそうなため勉強を兼ねてメモ

#AWS Elemental MediaConvertとは
S3などに置いたメディアファイルを簡単に配信したい方式に変換してくれる

使ってみた感触は手軽にFFMPEGなどの代わりに映像、音声を変換してくれる
様々な形式に変換可能であり、HLSなどストリーミングやMP4だけではなく、サムネイルなども簡単に作れる
VOD配信サービスなどを作る際に面倒なメディア変換部分を全部AWSに任せられる
と使い勝手が良い

#手順概要
大まかに３つの手順
1. 下準備：メディアファイルを置くS3やIAMロールを用意
2. 出力のプリセット、ジョブテンプレートを作成：映像の設定を作成
3. ジョブの作成（変換実施）:実際に変換ジョブを設定して実施

#下準備
詳細は以下に記載されている
参照：https://docs.aws.amazon.com/ja_jp/mediaconvert/latest/ug/getting-started.html

ざっくり手順は以下
1. 変換前、変換後のメディアファイルを配置するS3バケットを作成。一緒でもいいし、別々でもいい
2. IAMでMediaConvert用のIAMロールを作成する。MediaConvertロールのテンプレート的なサービスはもうあるので選択して作成するだけ
3. 変換したい（変換前）メディアファイルをアップロードしておく。試すだけなら手動で。システムなどではLambdaなどで連携してS3にアップロードする想定。

2がポイント。何も調べずに適当に触ってたら、ここで詰まった。

#出力プリセット、ジョブテンプレートの作成
ジョブという単位で毎回変換を実行するが、入出力の設定を毎回設定するのは面倒なため、テンプレート化しておく
・出力プリセット：コーデック、フレームレートなど出力時の映像・音声フォーマット設定
・ジョブテンプレート：入出力設定の固定パラメタ、ファイル形式などを設定。例えば、出力はHLS形式でHIGH/LOWの２つの解像度＋サムネイルを出力するなど

ここでは**「HLS形式でHIGH:720/LOW:360の２つの解像度＋サムネイルを出力する」**というジョブテンプレートを作成してみる

#####1.ジョブテンプレートメニューを選択して、テンプレートを作成
![MediaConvert Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/31435/e7f216ed-6b48-7dca-d291-9b9dd7d0651a.png)

#####2.一般設定項目に名前と説明を入力（なんでもいい）
![MediaConvert Management Console (1).png](https://qiita-image-store.s3.amazonaws.com/0/31435/0ecfe7b6-6edf-3ce4-763d-c318c03a4bdd.png)


#####3.出力グループを追加して、出力形式を設定
※入力の詳細設定が必要であれば、入力を設定する。普通に出力する分には細かな設定は不要
![MediaConvert Management Console (9).png](https://qiita-image-store.s3.amazonaws.com/0/31435/108a59f6-8124-fe03-2fa8-b110d075d1f8.png)

#####4.HLS出力設定

######4-1.HLS形式なら以下を選択
![MediaConvert Management Console (2).png](https://qiita-image-store.s3.amazonaws.com/0/31435/25cdad91-2ff9-6bbf-fe7a-2810d5a9cd7d.png)

######4-2.出力グループ名と各出力の識別子を設定（HIGH/LOW２つ出力するので２つ設定）
![MediaConvert Management Console (5).png](https://qiita-image-store.s3.amazonaws.com/0/31435/6b4ba209-8496-78e3-bd41-e2eeee153c1a.png)

######4-3.解像度など細かい出力を設定（Highとして720の解像度を設定）
S3の出力先を設定するのを忘れないこと
※必要あればフレームレートやCBR/VBRなども設定
![MediaConvert Management Console (6).png](https://qiita-image-store.s3.amazonaws.com/0/31435/25f19da8-25d4-3d68-592c-e31de273850a.png)

**もう１つ同じようにLowとして360の解像度の出力設定を作る**

#####5.サムネイル出力設定

サムネイルなら以下を選択
![MediaConvert Management Console (3).png](https://qiita-image-store.s3.amazonaws.com/0/31435/7db29037-1979-ff3e-5179-c46bad244948.png)

同様に出力グループ名と各出力の識別子を設定

細かい出力設定で以下２つを設定するのがサムネイル作成のポイント
「No Container」を選択
![MediaConvert Management Console (8).png](https://qiita-image-store.s3.amazonaws.com/0/31435/5a3fb2d9-3885-f78a-9356-0060cd541326.png)

また、「Frame Capture to JPEG」を選択
![MediaConvert Management Console (7).png](https://qiita-image-store.s3.amazonaws.com/0/31435/3091090c-1bef-26a3-4a1d-c18fdfdabd9b.png)

最大キャプチャはサムネイルの最大数になる
フレームレートが1/5なら　映像を5分割してそこの画面キャプチャをとるイメージ
欲しい内容によって調整する

また、S3の出力先を設定するのを忘れないこと

上記の手順でジョブテンプレートが作成される

*注：エラーが出る場合、エラー内容が非常にわかりにくいので、なんとなくメッセージから妄想する
大体S3の出力先とか識別子が設定されてがないゆえのエラー（バリデーションチェックが書いている時点では荒い）*


#ジョブの作成（変換実施）
ジョブテンプレートができていれば、後はジョブを作成して変換するのみ
#####1. ジョブテンプレートからジョブを作成
![MediaConvert Management Console (10).png](https://qiita-image-store.s3.amazonaws.com/0/31435/4dee6e2a-5522-e448-a8fa-2626acfedb8b.png)

#####2. 入力情報として変換前のメディアファイルをアップロードしたS3のバケットとファイルを選択
![MediaConvert Management Console (11).png](https://qiita-image-store.s3.amazonaws.com/0/31435/a4d4d658-1197-5849-5a0b-297ffbcff343.png)

出力設定はジョブテンプレートで設定しているのでそのままでOK
（変えたいところがあれば変える）

#####3. 設定を選択して、IAMロールとして下準備で作成したMediaConvert用のIAMロールを割り当てる
![MediaConvert Management Console (12).png](https://qiita-image-store.s3.amazonaws.com/0/31435/c8baea92-85b3-1f76-a683-f29c2c26e782.png)
![MediaConvert Management Console (13).png](https://qiita-image-store.s3.amazonaws.com/0/31435/6160bf0d-a2a8-e59e-1c76-7fa3b1992f76.png)

#####4. 作成ボタンを押して、完了

これでメディア変換がはじまり、変換前→変換後のファイルができあがる
S3のファイルを見れば、変換後のフォルダにm3u8のプレイリストが２つとサムネイルができている
HLSメディアはVLCプレイヤーなどで確認する

#まとめ
メディア系のAWSコンポーネントは触ったことがなかったが、かなり簡単にマネジメントコンソールから作ることができた。
前述したとおり、コンソールのバリデーションエラーが荒いため、エラーから失敗した内容を想像する必要があるが、ここも徐々にわかりやすくなると思われる。

今後はAPIでの操作やElastic Transcoderとの比較をしていきたい

あと、サムネイルは決まったパターンから数枚抜き出すことはできたが、映像からベストなサムネイルを抜き出すなどはどうすればよいかまだわかってない。別の設定があるか調べてみたい。Amazon Rekognitionなどを利用すればよいのだろうか。