Elemental MediaConvertを利用してmp4をHLS変換 + サムネイル出力

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

Elemental MediaConvertを利用してmp4をHLSに変換してみました。コンテナとかコーデックについては、こちらを確認ください。前提知識として持っておくと、Elemental MediaConvertの設定を理解しやすいです。

やりたいこと

  • S3バケットにあるmp4ファイルから、HLSとサムネイルを出力する
  • 何度も変換を行いたいのでジョブパラメータをテンプレート化したい

です。MediaConvertを利用すると結構簡単に実装できました。

やってみた

MediaConvertを開くと、メニューが表示されます。今回はジョブテンプレートを利用します。

  1. ジョブ:一回きりのジョブ。解像度とかビットレートなどを毎回指定必要
  2. 出力プリセット:出力に関するテンプレート。コンテナやコーデック、解像度などを指定しテンプレート化します。
  3. ジョブテンプレート:入力ファイル、出力先、アウトプット形式(コンテナやコーデック)を含めたジョブのテンプレート。出力形式を複数指定できます。今回のようにHLS + サムネイルみたいなジョブも作成できます。

ジョブテンプレートの設定

一般設定

テンプレートの名前やカテゴリ、説明を入力しましょう

入力

入力の設定をします。つまり、S3上に配置されている入力ファイルに関する設定です。入力を追加します。

設定変更は特にしません。ビデオセレクタは動画の開始位置などを指定、オーディをセレクタは音声チャンネル(日本語とか英語複数ある場合)を指定しますが、今回は変更しないのでデフォルトとします。

出力グループ:HLS

出力グループを追加します。これは、入力で指定したファイルをどのように出力するかを指定します。今回は、HLS + サムネイル出力するので出力グループを2つ追加します。

出力グループの追加をクリックし、HLS形式を選択します。

Outputをクリックしコーデックや解像度、ビットレートなどを設定します。今回は、以下の項目を変更しました。

  • Video
    • ビデオコーデック:H.264
    • 解像度:1280 x 720
    • フレームレート:30
    • ビットレート:5000000
  • Audio
    • オーディオコーデック:AAC
    • オーディオプロファイル:LC

名前修飾子の設定をします。これは必須入力なので、入力しないとエラーでテンプレートを作成できません。必ず入力しましょう。例えば「_hls」と指定すると、入力のファイル名に「_hls」が追加されたファイル名で出力されるようになります。

出力グループ:サムネイル

サムネイル用に、出力グループをもうひとつ追加します。ファイルグループを選択します。

まずは、サムネイルだけ欲しいのでオーディオは不要です。削除しましょう。

出力はファイルjpgファイルがほしいので、コンテナ形式での出力は不要です。No Containerを選択します。

ビデオコーデックはJPEG、サムネイル用なので1枚キャプチャがあればいいので、1を指定します。

名前修飾子の設定をします。HLSと同じように設定しましょう。

あとは、「作成」をクリックしテンプレート作成は終了です。

IAMロール

ジョブ実行用のIAMロールを作成する必要がります。こちらを参考に作成しましょう。

ジョブを実行する

ジョブテンプレートを利用して、ジョブを実行しましょう。

テンプレートで指定した入力、出力グループが設定された状態で、ジョブを作成できます。

ここでは、入力ファイルと、出力先S3を指定するだけでジョブが実行できます。それぞれ指定しましょう。

あとは、ジョブを作成します。

ジョブが実行されます。問題なければ、ジョブがCOMPLETEになるはずです。

S3を確認すると、ちゃんとファイルが出力されていました。

最後に

MediaConvertを利用して、mp4をHLSに変換できました。VIDEOJSなどのプレイヤーを使って、S3から直接ストリーミング配信もできますし、CloudFrontを導入することでキャッシュすることもできます。 また、ジョブテンプレートを使っているので、入力ファイルと出力先を指定するだけで、動画変換ができるようになりました。今度は、S3にmp4をアップロードしたことをトリガーにHLSに変換するような仕組みを作ってみたいと思います。