エンジニアレポート

AWS Fargate + ffmpegイメージで格安動画トランスコーダー構築 Part 1

2020年06月25日 AWSFargateECSDockerffmpeg

データスタジアムのエンジニア片岡です。

AWSの動画変換サービスであるMediaConvert、当社でもいくつかの案件で使用しています。

フルマネージドで最新・多彩な機能が利用でき、利用した分だけ課金される。
クラウドの利点を大いに活かした素晴らしいサービスだと思います。

2020年6月現在の東京リージョンの料金は以下の通りで、ネット動画で最も一般的な「AVCコーデック、HD(+FHD)、30fps」の場合、 動画の尺1分あたり0.017USDになります。
1時間の動画の場合、約109円です(1ドル=107円で計算)。

https://aws.amazon.com/jp/mediaconvert/pricing/

この金額で問題ない場合もありますが、もっと下げないといけないケースもあると思います。
その場合の手段として、「自前で動画変換ジョブを構築する」事を検討してみました。

そこで考えたのが、「Dockerのffmpegイメージを使い、Amazon ECS (AWS Fargate)で動画変換する」です。
Fargateの料金はこちら。

https://aws.amazon.com/jp/fargate/pricing/

MediaConvertは動画の尺時間単位の課金なのに対して、Fargateは実行時間単位の課金なので単純な比較はできませんが、仮に60分実行したとすると、2vCPU(0.05056USD*2)と4GB RAM(0.00553USD*4)で約13円になります。
実行時間120分としても26円。前述したMediaConvertの109円と比較すると格安ですね。

これが実現できれば、大幅なコストカットで動画変換(トランスコーダー)環境が手に入ります。

システム構成

今回、こんな構成で構築しました。S3 Bucketは2つ出てきますが、同じバケットでも構いません。

Docker構築

Dockerイメージは、こちらのイメージ(jrottenberg/ffmpeg)を使用します。10M以上Pullされているポピュラーなイメージです。2020年6月現在のffmpegバージョンは4.1。
そして今回作成したDockerfileはこちら。

以下はメイン処理となる、「S3からファイルGET→ffmpegで変換(トランスコード)→S3にファイルPUT」を行うシェルです(docker-entrypoint.sh)。
ffmpegの詳細な設定は割愛しますが、mp4をHLSに変換しています。

ローカル環境で検証

ローカル環境で検証するために、AWS CLI v2用のconfigとcredentialsを用意しておきます(まだAWS CLI v2をインストール・設定していない場合はしておきます)。

結果、以下のようなファイル構成になります。

ではビルドします。

ビルドできたら実行してみます。

結果は以下のようになります。正常に終了しました。

S3にHLSファイル群がPUTされているのが確認できました。

ローカル環境での正常動作が確認できたので、これをECS(Fargate)に載せていきたいと思いますが、長くなったので前後編として2つに分けようと思います。

Part 2へ続く

こちらもおすすめ

AWS メディアサービスで動画変換のフローを構築する
CloudFront+S3+Video.js+ 署名付きCookieでクローズドな動画配信
HTML5 動画プレイヤー 8選 / CMAF再生にトライ

エンジニア募集中

データスタジアムでは一緒に働いていただけるエンジニアを絶賛募集中です!

野球、サッカー、バスケをはじめとして色々なスポーツの仕事があります。

AWSやAzure、動画やAIなど技術的にもチャレンジできる職場です。

テクノロジーの力で、日本のスポーツを一緒に発展させていきましょう!

<募集中のポジション(2020年8月1日現在)>

開発エンジニア(速報サービス)

開発エンジニア(スポーツチーム向けサービス)

インフラエンジニア

最新記事

エンジニアトップ エンジニアインタビュー エンジニアレポート

  • 採用情報
  • おしらせ
  • 掲載事例

ページトップヘ