AWS ElementalMediaConvertを使って動画のエンコードをする

はじめに

クラウドストレージに保管しているファイルの多くが個人的に撮ったゲームの動画であり、かなりの容量を使っている。
全部生データなので、エンコードしてどうにか軽くしようという算段である。

AWS Elastic transcoder もあるらしいが、 AWS Elemental Media Convert の方を今回は使ってみる。
コスト的な面で Elemental Media Convert の方が安く済みそうだからだ。

ただ、ストレージがwasabiでAWSでアプリケーションを実行することができるのかというのも気になったので検索をかけてみた。
wasabiの公式ページ(よくある質問)ではこう書かれているようだ。

Wasabiにデータを保存して、Amazonのクラウドでアプリケーションを実行することはできますか?

はい。 WasabiはAmazonのDirect Connect機能を利用し、EC2などAmazonの他のクラウドサービスからWasabiへの高速なデータ転送を可能にしています。

引用: https://wasabi.com/ja/s3-api-compatible-wasabi-cloud-storage/

と書いてあったので行けるかなと思ったのですが、

AWS Elastic Transcoder can not be used with Wasabi as this product does not allow for the use of non-AWS storage services. Other transcoding services including encoding.com can be used with Wasabi.

訳: AWS Elastic Transcoder を Wasabi で使用するにはどうすればよいですか? この製品は AWS 以外のストレージ サービスの使用を許可していないため、 AWS Elastic Transcoderは Wasabi では使用できません。encoding.comを含む他のトランスコーディング サービスは、Wasabi で使用できます。

引用: https://wasabi-support.zendesk.com/hc/en-us/articles/360016605071-How-do-I-use-AWS-Elastic-Transcoder-with-Wasabi-

というわけなのでできなそう。 実際に、IAM ロールを駆使してできるかなと思ったけど S3のARN入力でwasabiのバケットを指定しても上手くいかなかった…。 Unable to Open file って出てくる。

というわけで、 AWSのみで実践する!

環境

AWS Elemental Media Convert (https://aws.amazon.com/jp/mediaconvert/)

流れ

  • S3に動画を置く
  • Elemental Media Convert の設定とかをする
  • Elemental Media Convert を使う。

みたいな流れになると思う。
手探りだが下記から実施する。

S3の設定

S3バケットを作成する

バケット名: my-new-convert

で作成する。他は特にいじらずデフォルトのまま create-s3-bucket

入力/出力用のフォルダ作成

Media Convert にて入力のフォルダと出力のフォルダを分けたいので作成しておく。

入力用フォルダ: input
出力用フォルダ: output
create-s3-folder

動画ファイルの配置

今回は pupuyo_cpu.mkv を配置する。
1分弱の動画なので時間はかからないと思われる。
s3-put-media-file

ElementalMediaConvertの設定

AWSサービス 「ElementalMediaConvert」を選択

ジョブテンプレートを作成

「ジョブテンプレートを作成」を選択 create-job-template-1

1. 「一般設定」に名前を入力する。

今回は、「s3-media-convert」とする。
create-job-template-2

2. 入力を追加する。

入力の追加後、今回は特に何もいじらずデフォルトのままにしておく。

create-job-template-3

3. 出力を追加する。

出力の追加後、「出力グループの追加」というウィンドウが出てくるので、MP4に変換したいので「ファイルグループ」を選択する。

create-job-template-4

「ファイルグループの設定」

カスタムグループ名: output
送信先: S3://my-new-convert-output
create-job-template-5

4. 出力設定

FileGroup-outputの下にある 「H.264AAC」をクリックする。 設定は以下の通りだが、修正したところだけ記載する。

最大ビットレートを 5000000 とした。
create-job-template-6

5.確認

create-job-template-7

これでOK!

IAMロールの作成

AWSサービスの「IAM」にアクセスする。

1. ロールからロールを作成を選択

create-iam-role-1

2. ロールのエンティティを選択

「他のAWSのサービスのユースケース」から「MediaConvert」を選択して、「次へ」を押す。 create-iam-role-2

3. ポリシーの確認

下記のように選択されているので、そのまま次へ create-iam-role-3

4. ロールの確認

ロール名: media-convert

ほかは特にいじらず、上記で作成をする。 create-iam-role-4

5. 完了

create-iam-role-5

これでMediaConvertを実行できるロールが作成できた。

ジョブの作成

1. ジョブテンプレートから「ジョブの作成」を選択

create-job-1

2. 入力を選択する。

入力ファイル: s3://my-new-convert-input/puyopuyo_cpu.mkv

これでOK create-job-2

3. AWSの統合を選択

サービスロールの制御: 既存のサービスロールを使用
サービスロール: media-convert

先ほど作成したロールを選択する。(もし表示されなかったらブラウザのリロードをすると反映されている) create-job-3 その後、「作成」を押し、ジョブを実行させる。

4. 確認

ジョブの概要 create-job-4

「ジョブ」を押して、実行状態を確認する。 (PROGRESSING なので処理中のようだ) create-job-5

「ジョブ」を押して、実行状態を確認する。(COMPLETE!) create-job-6

5. S3のOutputフォルダを確認

job-complete

おぉ!できてますね。だいたい半分くらいの容量になってる!

これを wasabiにあげて公開しておきます。
どのくらい画質とか違うんだろう…。

wasabiにアップした動画

エンコード前

エンコード後

参考

この記事を作るにあたり下記のサイト様を参考にさせていただきました。
大変参考になりました、ありがとうございます。

【AWS Elemental MediaConvert】コンソールから基本的なステップで動画をエンコードする - ServerWorks ENGINEER BLOG 様 https://blog.serverworks.co.jp/tech/2020/01/16/mediaconvert/

Elastic Transcoder から MediaConvert への移行のススメ - クラスメソッド 様 https://dev.classmethod.jp/articles/migrate-elastic-transcoder-to-mediaconvert/

S3に動画がアップロードされたら自動でHLS出力する仕組みを作る - クラスメソッド 様 https://dev.classmethod.jp/articles/convert-video-into-hls-by-s3-event/

おわりに

実は変換したいファイルは 100GB超のファイルもあるので料金大丈夫かな~と思ってます。
思い出の動画なのですが重すぎる(容量的に)
最悪、自分のPCで24時間エンコード地獄するしかないのか…?

wasabiと連携できるようにならないかな~。
IAMにSTSか何かで権限付与して別のクラウドストレージのファイルも参照できるようになって欲しいですね!
ちなみに 途中でChatGPTに聞いてみたらできると言っていたのでかなりしつこく聞いてみた。
chatgpt

Hugo で構築されています。
テーマ StackJimmy によって設計されています。