こんにちは、技術2課の芳賀です。さて、今回はElemental MediaConvertについて触る機会があったので手順をまとめてみました。
MediaConvertとは
AWS Elemental MediaConvert は、ファイルベースの動画処理サービスで、コンテンツオーナーやコンテンツディストリビューターは、所有するメディアライブラリのサイズに関係なく、スケーラブルに動画処理を行うことができます。MediaConvert はプレミアムコンテンツの体験を実現する、以下の高度な機能を提供します。
動画の変換処理を数ステップで実行することができます。以下のドキュメントを参考にMediaConvertを使ってみたいと思います。
AWS Elemental MediaConvert の開始方法
AWS Elemental MediaConvert でのジョブテンプレートを使用したジョブの作成
手順の概要としては以下です。
- ファイルストレージの作成・変換元ファイルの配置
- IAMロールの作成
- ジョブテンプレートの作成
- ジョブを作成する
- 動作確認
1.ファイルストレージの作成・変換元ファイルの配置
MediaConvertでエンコードする動画を格納するためのS3バケットを作成します。
S3のサービスにて「バケットを作成する」で作成します。バケット作成時の設定ウィザードではデフォルトのまま非公開の設定で作成します。ここでは「for-mediaconvert」というS3バケットを作成しました。(同じ名称でS3バケットは作成できないため、任意の名称で作成してください)
「for-mediaconvert」のS3バケット内に「input」、「output」のフォルダを作成します。「input」にはエンコード前の動画を格納します。「output」にはエンコード後の動画が格納されるよう後ほどMediaConvert側に設定します。
ここでは「input」に複数のTSファイル(動画ファイル)を配置しました。
2.IAMロールの作成
MediaConvertを使用するためにIAMロールを作成します。
IAMサービスより「ロール」を選択し、「ロールの作成」を選択します。
ロール作成画面にてAWS サービス「MediaConvert」を選択し、「次のステップ」を選択します。
MediaConvertを使用する際に必要なポリシーが選択された状態になります。「次のステップ」を選択します。
タグは任意で設定します。ここでは特に何も設定せず「次のステップ」を選択します。
ロール名を入力します。ここでは「role-mediaconvert」を入力し「ロールの作成」を選択します。
MediaConvert用の「role-mediaconvert」のIAMロールが作成されました。
3.ジョブテンプレートの作成
Media Convertはジョブという単位で1つのファイルをエンコードすることができます。毎回ジョブを一から作成するのは大変手間な為、ジョブテンプレートという形でテンプレートを作成します。同じ形式にエンコードする場合はこのジョブテンプレートを流用することができます。
AWS Elemental MediaConvert でのジョブテンプレートを使用したジョブの作成
Media Convertのサービスより「ジョブテンプレート」を選択し、「テンプレートの作成」を選択します。
「一般設定」を選択し、ここでは名前に「job-template-appleHLS」を入力します(カテゴリ、説明は任意です)。
入力の「追加」を選択します。ここでは入力項目はデフォルトのままとします(このままでも問題なくエンコードすることができます。細かい指定を指定場合は変更してください)。
出力グループの「追加」を選択します。
今回はHLS形式に変換したかった為、出力グループの追加にて「Apple HLS」を選択します。
エンコード後の動画を格納するS3バケットを指定します。ここでは作成したS3バケットの「output」を選択します。
カスタムグループ名に任意の名前を入力します。ここでは「output-group」としました(未入力可)。Output1の名前修飾子は「convert1」としました。エンコード後のファイル名に付与されます(必須)。セグメントの設定についてここではデフォルトの設定としています。必要に応じて変更してください。
出力グループの「Output1」を選択します。エンコード後の形式を細かく設定することができますが、ここではプリセットとして用意されている「System-Avc_16x9_1080p_29_97fps_8500kbps」を選択しました。1つのジョブで複数の形式にエンコードしたい場合は、出力グループの「追加」を選択することでOutput2として別なエンコード形式を選択することもできます。
「作成」を選択します。
Media Convertのジョブテンプレートが作成されました。
4.ジョブを作成する
ジョブテンプレートをもとにジョブを作成し、動画をエンコードします。
作成したジョブテンプレートを選択し「ジョブの作成」を選択します。
入力1にて「参照」を選択します。
エンコード前のファイルを選択します。格納先のS3バケットを選択、エンコード対象となるファイルを選択します。
そのほかの入力項目はジョブテンプレートに設定した内容が反映されています。必要に応じて変更してください(特に変更せずにエンコード可能です)。
ジョブの設定の「設定」にて、作成したMediaConvert用のIAMロール「role-mediaconvert」を選択します。
「作成」を選択します。※エンコードが即開始されます
ジョブを確認するとステータスが「PROGRESSING」のジョブのレコードが追加されたことが確認できます。
しばらく待つとステータスが「COMPLETE」になります。
S3バケットの「output」を確認するとエンコード後の画像ファイルが格納されていることを確認できます。ここでは18秒の動画に対してセグメントの長さを10秒でエンコードした為、セグメントファイル(.tsファイル)が2つになっています。
5.動作確認
「変換前のファイル名」+「.m3u8」のオブジェクトURLに対してアクセスすることで動画を再生することができます。S3から直接動画を再生する為には、対象のオブジェクトURLが公開されている必要があります。
※CloudFront、Route53などを組み合わせることで、対象オブジェクトのURLを公開せずともアクセスすることが可能になります。
オブジェクトURLにアクセスすると動画をストリーミング再生することが確認できます。
最後に
MediaConvertの出力設定の画面を初めて見たとき、設定項目が多過ぎ & 専門的な用語が多くかなり躊躇しました。ただ、出力設定にはプリセットという事前に設定済みの項目を選択することができ、一般的な出力設定は網羅されているのかと思われます。このおかげで比較的簡単に動画をエンコードすることができました。
今回は手動でMediaConvertを操作しましたが、複数の動画をエンコードする場合に毎回操作するのは辛いかと思います。その場合、LambdaからMediaConvertのAPI+今回作成したジョブテンプレートを使用することで、S3配下に配置された動画を一括で変換するなどの実装も可能です。
本ブログにてMediaConvertの使い方を少しでもイメージ頂けたら幸いです。