はじめに
クラウドストレージに保管しているファイルの多くが個人的に撮ったゲームの動画であり、かなりの容量を使っている。
全部生データなので、エンコードしてどうにか軽くしようという算段である。
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 で使用できます。
というわけなのでできなそう。
実際に、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
入力/出力用のフォルダ作成
Media Convert
にて入力のフォルダと出力のフォルダを分けたいので作成しておく。
入力用フォルダ: input
出力用フォルダ: output
動画ファイルの配置
今回は pupuyo_cpu.mkv
を配置する。
1分弱の動画なので時間はかからないと思われる。
ElementalMediaConvertの設定
AWSサービス 「ElementalMediaConvert」を選択
ジョブテンプレートを作成
1. 「一般設定」に名前を入力する。
2. 入力を追加する。
入力の追加後、今回は特に何もいじらずデフォルトのままにしておく。
3. 出力を追加する。
出力の追加後、「出力グループの追加」というウィンドウが出てくるので、MP4に変換したいので「ファイルグループ」を選択する。
「ファイルグループの設定」
カスタムグループ名: output
送信先: S3://my-new-convert-output
4. 出力設定
FileGroup-outputの下にある 「H.264AAC」をクリックする。 設定は以下の通りだが、修正したところだけ記載する。
最大ビットレートを 5000000 とした。
5.確認
これでOK!
IAMロールの作成
AWSサービスの「IAM」にアクセスする。
1. ロールからロールを作成を選択
2. ロールのエンティティを選択
「他のAWSのサービスのユースケース」から「MediaConvert」を選択して、「次へ」を押す。
3. ポリシーの確認
4. ロールの確認
ロール名: media-convert
5. 完了
これでMediaConvertを実行できるロールが作成できた。
ジョブの作成
1. ジョブテンプレートから「ジョブの作成」を選択
2. 入力を選択する。
入力ファイル: s3://my-new-convert-input/puyopuyo_cpu.mkv
3. AWSの統合を選択
サービスロールの制御: 既存のサービスロールを使用
サービスロール: media-convert
先ほど作成したロールを選択する。(もし表示されなかったらブラウザのリロードをすると反映されている) その後、「作成」を押し、ジョブを実行させる。
4. 確認
「ジョブ」を押して、実行状態を確認する。 (PROGRESSING
なので処理中のようだ)
「ジョブ」を押して、実行状態を確認する。(COMPLETE
!)
5. S3のOutputフォルダを確認
おぉ!できてますね。だいたい半分くらいの容量になってる!
これを 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に聞いてみたらできると言っていたのでかなりしつこく聞いてみた。