動画エンコードに最適なEC2インスタンスタイプを探す
動画を大量にエンコードしたい時、クラウド上のVirtual Machine(VM)で処理を行えば性能を上げたり同時処理数を増やしたりが簡単にできます。ただし、VMには複数のタイプが用意されており、どれを使用するのが最適(高速で安価)なのかは実際に比較してみないとわかりません。
というわけでAmazon Web Services EC2を対象に、エンコードに向いているであろうインスタンスタイプで実際にエンコードを行って最適なインスタンスタイプを調査してみました。
前提
出力する動画の形式はH.264/AVC 1920x1080 29.97fps 6Mbps (2-pass)で、エンコーダはみんな大好きFFmpeg (x264)です。
対象インスタンスタイプ
調査対象のインスタンスタイプには、最も動画エンコード向きと考えられるコンピューティング最適化からC6g, C6i, C6a, C5, C5a, C4を、一般用途向けからM6g, M6i, M6a, M5, M5aを選びました。
サイズは 8xlarge
相当を上限にしています。これは巨大インスタンスタイプのあらゆる数の大きさに畏れをいだいたためでもありますが、C6iで調べると 12xlarge
からvCPUの増加に対して処理速度が伸びなくなっていて、他タイプも同様の傾向があると予想されるためです。
※c6i.16xlarge
は調査時キャパシティ不足でスポットインスタンスが起動できず
エンコード時間(割合)と単価の一覧
エンコードにかかった時間と単価の一覧表です。調査の詳しい情報は下部に書いています。
インスタンスタイプ | vCPU | オンデマンド単価 | スポット参考単価 | 対入力時間割合 | 1時間分処理単価(オンデマンド) | 1時間分処理単価(スポット) |
---|---|---|---|---|---|---|
c6g.medium | 1 | $0.0428 | $0.0175 | 1087.44% | $0.4654 | $0.1903 |
c6g.large | 2 | $0.0856 | $0.0349 | 568.28% | $0.4864 | $0.1983 |
c6g.xlarge | 4 | $0.1712 | $0.0699 | 292.39% | $0.5006 | $0.2044 |
c6g.2xlarge | 8 | $0.3424 | $0.1397 | 154.44% | $0.5288 | $0.2158 |
c6g.4xlarge | 16 | $0.6848 | $0.2794 | 92.11% | $0.6308 | $0.2574 |
c6g.8xlarge | 32 | $1.3696 | $0.5589 | 58.06% | $0.7951 | $0.3245 |
c6i.large | 2 | $0.1070 | $0.0349 | 421.22% | $0.4507 | $0.1470 |
c6i.xlarge | 4 | $0.2140 | $0.0773 | 210.33% | $0.4501 | $0.1626 |
c6i.2xlarge | 8 | $0.4280 | $0.1459 | 108.61% | $0.4649 | $0.1585 |
c6i.4xlarge | 16 | $0.8560 | $0.3093 | 61.33% | $0.5250 | $0.1897 |
c6i.8xlarge | 32 | $1.7120 | $0.5622 | 38.44% | $0.6582 | $0.2161 |
c6a.large | 2 | $0.0963 | $0.0349 | 399.50% | $0.3847 | $0.1394 |
c6a.xlarge | 4 | $0.1926 | $0.0699 | 196.06% | $0.3776 | $0.1370 |
c6a.2xlarge | 8 | $0.3852 | $0.1397 | 106.17% | $0.4090 | $0.1483 |
c6a.4xlarge | 16 | $0.7704 | $0.2794 | 56.44% | $0.4348 | $0.1577 |
32 | $1.5408 | $0.5589 | - | - | - | |
c5.large | 2 | $0.1070 | $0.0333 | 538.17% | $0.5758 | $0.1792 |
c5.xlarge | 4 | $0.2140 | $0.0719 | 280.11% | $0.5994 | $0.2014 |
c5.2xlarge | 8 | $0.4280 | $0.1453 | 133.83% | $0.5728 | $0.1945 |
c5.4xlarge | 16 | $0.8560 | $0.2661 | 75.28% | $0.6444 | $0.2003 |
c5.9xlarge | 36 | $1.9260 | $0.6794 | 46.00% | $0.8860 | $0.3125 |
c5a.large | 2 | $0.0960 | $0.0391 | 425.72% | $0.4087 | $0.1665 |
c5a.xlarge | 4 | $0.1920 | $0.0878 | 218.11% | $0.4188 | $0.1915 |
c5a.2xlarge | 8 | $0.3840 | $0.1496 | 116.11% | $0.4459 | $0.1737 |
c5a.4xlarge | 16 | $0.7680 | $0.3690 | 69.06% | $0.5303 | $0.2548 |
32 | $1.5360 | $0.5502 | - | - | - | |
c4.large | 2 | $0.1260 | $0.0413 | 587.39% | $0.7401 | $0.2426 |
c4.xlarge | 4 | $0.2520 | $0.0712 | 299.11% | $0.7538 | $0.2130 |
c4.2xlarge | 8 | $0.5040 | $0.1433 | 157.33% | $0.7930 | $0.2255 |
c4.4xlarge | 16 | $1.0080 | $0.2535 | 87.44% | $0.8814 | $0.2217 |
c4.8xlarge | 36 | $2.0160 | $0.5069 | 57.83% | $1.1659 | $0.2932 |
m6g.medium | 1 | $0.0495 | $0.0183 | 1095.06% | $0.5421 | $0.2004 |
m6g.large | 2 | $0.0990 | $0.0367 | 557.78% | $0.5522 | $0.2047 |
m6g.xlarge | 4 | $0.1980 | $0.0734 | 287.22% | $0.5687 | $0.2108 |
m6g.2xlarge | 8 | $0.3960 | $0.1467 | 154.11% | $0.6103 | $0.2261 |
m6g.4xlarge | 16 | $0.7920 | $0.2934 | 91.06% | $0.7212 | $0.2672 |
m6g.8xlarge | 32 | $1.5840 | $0.5868 | 57.89% | $0.9170 | $0.3397 |
m6i.large | 2 | $0.1240 | $0.0367 | 414.61% | $0.5141 | $0.1522 |
m6i.xlarge | 4 | $0.2480 | $0.0734 | 211.11% | $0.5236 | $0.1550 |
m6i.2xlarge | 8 | $0.4960 | $0.1497 | 109.89% | $0.5450 | $0.1645 |
m6i.4xlarge | 16 | $0.9920 | $0.2934 | 60.17% | $0.5969 | $0.1765 |
32 | $1.9840 | $0.5868 | - | - | - | |
m6a.large | 2 | $0.1116 | $0.0367 | 397.56% | $0.4437 | $0.1459 |
m6a.xlarge | 4 | $0.2232 | $0.0734 | 186.22% | $0.4156 | $0.1367 |
m6a.2xlarge | 8 | $0.4464 | $0.1467 | 106.61% | $0.4759 | $0.1564 |
m6a.4xlarge | 16 | $0.8928 | $0.2934 | 54.50% | $0.4866 | $0.1599 |
m6a.8xlarge | 32 | $1.7856 | $0.5868 | 42.22% | $0.7539 | $0.2478 |
m5.large | 2 | $0.1240 | $0.0349 | 604.94% | $0.7501 | $0.2111 |
m5.xlarge | 4 | $0.2480 | $0.0699 | 311.67% | $0.7729 | $0.2179 |
m5.2xlarge | 8 | $0.4960 | $0.1409 | 159.50% | $0.7911 | $0.2247 |
16 | $0.9920 | $0.3264 | - | - | - | |
m5.8xlarge | 32 | $1.9840 | $0.5816 | 55.56% | $1.1022 | $0.3231 |
m5a.large | 2 | $0.1120 | $0.0349 | 630.72% | $0.7064 | $0.2201 |
m5a.xlarge | 4 | $0.2240 | $0.0711 | 324.50% | $0.7269 | $0.2307 |
m5a.2xlarge | 8 | $0.4480 | $0.1637 | 173.06% | $0.7753 | $0.2833 |
m5a.4xlarge | 16 | $0.8960 | $0.3133 | 100.28% | $0.8985 | $0.3142 |
m5a.8xlarge | 32 | $1.7920 | $0.5589 | 73.78% | $1.3221 | $0.4123 |
- 対象のリージョンは
ap-northeast-1
(東京)です -
スポット参考単価 は2022年12月12日〜28日ごろの価格です
- 価格はAmazon EC2 スポットインスタンスの料金で調べられます
-
対入力時間割合 は入力ファイルの長さに対する処理時間の長さの割合です
- 例えば200%の場合は1時間の入力ファイルに対してエンコードに2時間かかるという意味です
-
1時間分処理単価 は1時間の入力ファイルをエンコードするのに必要な金額です
- $0.5の場合は2時間の入力ファイルをエンコードするのに$1かかるという意味です
- 調査はスポットインスタンスを使用して行っています。打ち消し線が引かれているインスタンスタイプはキャパシティ不足で起動できないか処理中に中断が発生したため計測できていません
- 測定は手間とコストの都合で基本的に各タイプ1回のみです
- エンコード時間はパラメータによって大幅に変動しますので、数字は参考程度に捉えてください
オンデマンド価格性能比
表の内容をもとにオンデマンドの単価と処理速度をグラフにしています。
- X軸(横)が 対入力時間割合 です(目盛は対数です)
- Y軸(縦)が 1時間分処理単価 です
- 左にいくほど高速で、下にいくほど低価格になります
スポット価格性能比
こちらはスポットの単価でのグラフです。
- Y軸の最大値は オンデマンド価格性能比 のグラフと異なりますので注意してください
まとめ
- 処理速度の傾向は
C6a ≒ M6a > C6i ≒ M6i > C5a > C5 > C4 > C6g ≒ M6g > M5 > M5a
です- (C6aとM6aはCPUが同じAMD EPYC 7R13 Processor)
- (C6iとM6iはCPUが同じIntel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz)
- インスタンスのサイズは
xlarge
,large
,medium
が処理が遅い割にそれほど安くありませんので、エンコードが短時間で終わるのでなければ避けた方が良いです - 基本的にEBSの料金も必要になるため、1時間分処理単価が同一のインスタンスタイプでも処理時間が長いほどEBS分の料金が増えます
- オンデマンド
* C6a, M6a, C6iの2xlarge
以上を選ぶのが現時点では最適な選択となりそうです
* M6iはやや割高ですが処理速度を見るとC6iの代替として使えます
* C5a (AMD)はC5 (Intel)と比較して安く設定されている割に処理速度はむしろ速いのでお得感があります - スポット
- オンデマンドと同じくC6a, M6a, C6iの
2xlarge
以上を選ぶのが現時点では最適な選択となりそうです - M6iはキャパシティ不足が多く発生したためスポットインスタンスでの使用は避けた方が良いかもしれません(時期によって傾向は変わります)
- C5aはキャパシティが少ない(東京では起動できるAZも少ない)ように見え、そのためかスポット価格がC5と比較して高い傾向にあるのでお得感は薄れます
- オンデマンドと同じくC6a, M6a, C6iの
- H.264のエンコードを行う場合はパテントプールへの支払いが必要になる場合があります
補足
調査内容詳細
調査に使用したファイル、コマンドの詳細情報はこちらになります。
入力ファイル
ProRes 422 1920x1080 29.97fps 30分の動き多め実写のQuickTime動画ファイル約30GiBを使用しています。
エンコーダー
FFmpeg公式からダウンロードできるLinux Static Build版FFmpeg 5.1.1を使用しています。(arm64
, amd64
)
arm64
ffmpeg version 5.1.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzimg
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
amd64
ffmpeg version 5.1.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
エンコードのパラメータ
ストリーミング配信用を想定して、H.264/AVC 1920x1080 29.97fps 6Mbps キーフレーム間隔3秒(90フレーム)固定で出力されるようにパラメータを設定しています。
ffmpeg -y -i input.mov -c:v h264 -b:v 6000k -maxrate 6000k -bufsize 12000k -tune film -preset medium -force_key_frames "expr:gte(n,n_forced*90)" -x264-params "min-keyint=90" -vf "format=yuv420p" -profile:v high -an -pass 1 -f null /dev/null
ffmpeg -i input.mov -c:v h264 -b:v 6000k -maxrate 6000k -bufsize 12000k -tune film -preset medium -force_key_frames "expr:gte(n,n_forced*90)" -x264-params "min-keyint=90" -vf "format=yuv420p" -profile:v high -c:a aac -b:a 128k -pass 2 output.mp4
OS
Amazon Linux 2を使用しています。
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
参考
AWSのマネージドサービスで同等程度の動画エンコードを行った場合の単価です。
サービス名 | 区分 | 1時間分処理単価 |
---|---|---|
AWS Elemental MediaConvert | プロフェッショナル階層 2パス HD 30fps以下 | $2.8560 |
Amazon Elastic Transcoder | 720p以上 | $2.0400 |
Discussion