[新機能] Amazon Elastic TranscoderがVP9コーデックに対応しました

2016.05.18

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

はじめに

清水です。Amazon Elastic Transcoder が新たにVP9コーデックに対応しました!(してました!2016/04/20に対応していたようです)

リリース紹介ページはわずか4文ほどで終わってしまっていますが、 次世代コーデックに対応した大きな機能追加ではないでしょうか!

今回は、このVP9対応を確認しつつ、VP8と簡単な画質の比較をしてみました。

VP9とは?

VP9の詳細についてはWikipediaのVP9のページより引用します。

VP9 は Google が開発しているオープンでロイヤリティフリーな動画圧縮コーデック。VP9 は VP8 の後継。コンテナとしては WebM などを使う。 2011年第3四半期に、VP9の開発が始まった。VP9 の開発の目標の一つは、同一画質で VP8 の半分のビットレートにすることであった。もう一つの目標は、H.265 よりも効率の良いコーデックにすることであった。

ということで、現在のコーデックの主流はH.264やVP8ですが、 その次の世代の圧縮率を誇るコーデックとなります。 圧縮率としてはH.264やVP8の倍と言われていて、 例えばこれまでと同じ帯域でより高画質な動画視聴が可能になったり、 モバイルのような帯域が限定された環境でこれまでより快適に動画が視聴できるようになります。 また4K/8Kでの動画コーデックとしての利用も期待されています。

YouTubeでは既に使われているようです。 VP9:より速く、高画質で、バッファ不要の YouTube 動画

VP9なトランスコードをやってみた

それでは実際にAmazon Elastic TranscoderでVP9へのトランスコードをしてみたいと思います。

まずプリセット(Elastic Transcoderの変換後のフォーマット等を指定している設定)を確認してみると、System preset(事前に設定されているプリセット)に Webm VP9が追加されていました。解像度の違う720pと360pの2種類があります。

ETVP9-1

今回は720pを選択してみます。詳細を確認して見ると、確かにCodec vp9とあります。 ビットレートは1200kbps、フレームレート30fps、解像度は1280x720となっています。

ETVP9-2

このプリセットを使ってジョブを作成します。今回パイプラインについては、 以前のブログエントリを書くときに使ったものを再利用しました。(サーバレスアーキテクチャな動画変換 〜 “Easy Video Transcoding in AWS”を読んでみた&やってみた

[Create New Job]からジョブ作成画面で、Pipelineは既存の「EasyVideoTranscodingInAWS」 を選択、Input Keyなど必要な項目を入力して、Presetで先ほど確認した 「System preset: Webm VP9 720p」を選択します。 またOutput Keyについては、拡張子を.webmとします。VP9のコンテナはWebMとなっているためです。

ETVP9-3

ジョブを作成してしばらく待てば、VP9で変換された動画ファイルが作成されます。 WebM形式なので、例えばChrome等のブラウザで再生するのが手っ取り早い再生方法でしょうか。

またMediaInfoで動画ファイルの情報を参照してみたところ、VP9であることがこちらでも確認できました。

ETVP9-5

VP9コーデックの威力を確認してみた

次世代の圧縮率をほこるVP9コーデックということですが、その威力は確認できるのでしょうか? 今回は、同じ解像度、ビットレートで変換したVP8コーデック動画とVP9コーデック動画のそれぞれを比較してみました。

あくまで個人の主観による比較で、またあまり画質比較に最適な動画を準備できなかったなーという反省点もあります。 変換対象ファイルによって結果が大きく異なる可能性もありますので、 しっかりと比較を行ないたい方はぜひ一度ご自分で変換、確認をしていただければと思います。

比較用プリセット

比較は「System preset: Webm VP9 360p」を基準に、640x360の解像度、600kbpsのビットレートで行ないます。 VP9についてはこのSystem presetを使用し、VP8についてはSystem presetが720pしかないので360pのプリセットを作成します。

比較用VP8プリセットの作成

Presetsの画面から、[Create New Preset]で「System preset: Webm 720p」を元にして新しいプリセットを作成します。 Name、Descriptionは「Custom preset: Webm VP8 360p」として、System preset: Webm 720pの設定を元に以下4点を変更しました。

  • Bit Rate: 600
  • Frame Rate: 30
  • Max Width: 640
  • Max Height: 360

設定画面は非常に項目が多いので、作成の際にはAWS CLI等も活用して確認すると良いかと思います。 私はVP9の360pのSystem preset、VP8の720pのSystem presetを比較しながら作成し、最終的に作成したプリセットの出力を確認しました。

比較用プリセットのAWS CLIによる取得

比較用プリセットをAWS CLIにより取得すると以下のようになります。(長くなるので一部項目は省略しています)

(System preset) Webm VP9 360p

 $ aws elastictranscoder read-preset --id 1351620000001-100260
{
    "Preset": {
        "Name": "System preset: Webm VP9 360p",
        "Id": "1351620000001-100260",
        "Thumbnails": {
            〜省略〜
        },
        "Type": "System",
        "Container": "webm",
        "Video": {
            "CodecOptions": {},
            "Watermarks": [
                〜省略〜
            ],
            "FixedGOP": "false",
            "SizingPolicy": "ShrinkToFit",
            "KeyframesMaxDist": "90",
            "FrameRate": "30",
            "BitRate": "600",
            "DisplayAspectRatio": "auto",
            "PaddingPolicy": "NoPad",
            "MaxHeight": "360",
            "MaxWidth": "640",
            "Codec": "vp9"
        },
        "Audio": {
            〜省略〜
        },
        "Description": "System preset: Webm VP9 360p",
        "Arn": "arn:aws:elastictranscoder:ap-northeast-1:720357733002:preset/1351620000001-100260"
    }
}

(Custom preset) Webm VP8 360p

 $ aws elastictranscoder read-preset --id 1463ABCD53531-XXXXXX
{
    "Preset": {
        "Name": "Custom preset: Webm VP8 360p",
        "Arn": "arn:aws:elastictranscoder:ap-northeast-1:123456789ABC:preset/1463ABCD53531-XXXXXX",
        "Thumbnails": {
            〜省略〜
        },
        "Description": "Custom preset: Webm VP8 360p",
        "Type": "Custom",
        "Video": {
            "MaxHeight": "360",
            "CodecOptions": {
                "Profile": "0"
            },
            "Codec": "vp8",
            "Watermarks": [
                〜省略〜
            ],
            "MaxWidth": "640",
            "FrameRate": "30",
            "PaddingPolicy": "NoPad",
            "KeyframesMaxDist": "90",
            "FixedGOP": "false",
            "DisplayAspectRatio": "auto",
            "SizingPolicy": "ShrinkToFit",
            "BitRate": "600"
        },
        "Audio": {
            〜省略〜
        },
        "Id": "1463ABCD53531-XXXXXX",
        "Container": "webm"
    }
}

比較結果

変換結果のVP9とVP8を比較した結果、私の主観ですが「(なんとなく)VP9の方がくっきりしている!」という感じです。 例えば、以下は変換したの動画の開始点をキャプチャしたものですが、 VP9の方が例えば木々の輪郭がわかる(葉っぱのディテールがわかる)と思います。

VP9

ETVP9-6-VP9-2

VP8

ETVP9-6-VP8-2

まとめ

Amazon Elastic Transcoderが次世代動画圧縮コーデックであるVP9に対応していたので試してみました。

VP9では圧縮効率が高くなり、より高画質な動画視聴ができる等利点がありますが、 その分、動画変換時の計算コストもかかるかと思います。 この点をAmazon Elastic Transocderで対応できるのは大変便利かと思います。

引き続き、Amazon Elastic Transocdoerの機能追加に注目していきたいと思います!