[UPDATE] AWS Elemental MediaConvertのVideo scaling behaviorで設定可能なスケーリングモードが増えました!

MediaConvertのScaling behaviorでFit、Fit without upscaling、そしてFillが設定できるようになりました。縦横比が変わる変換を行う場合などで、これまでよりも違和感のない映像が得られます。
2023.11.30

はじめに

清水です。re:Invent 2023の真っ最中ですが、期間前に発表されたAWS Media Servicesのアップデートも抑えておこうのコーナーです。本エントリではAWS Elemental MediaConvertのVideo scaling behaviorで設定可能なスケーリングモードが追加されたアップデートについてお伝えします。AWS What's Newへのポストはありませんが、MediaConvert User Guideに2023/11/10付で追記されたアップデートとなります。

Document history for User Guide - MediaConvert

今回のアップデートにあわせて、User Guideには「Video scaling behavior and aspect ratios - MediaConvert」のページが新設されています。

入力映像と出力映像のアスペクト比や解像度が異なる場合の動作を設定するScaling behavior、これまではDefault (Fit with padding)Stretch to outputの2種のみが選択可能でした。例えば入力がPortrait(縦長)に対して、出力設定がLandscape(横長)の場合など、ユースケースによってはこの2種のみだと変換時に追加の設定が必要になる、ということがありました。

今回のアップデートでは、FitFit without upscaling、そしてFillの3つのスケーリングモードが追加されました。これまで課題だったPortraitの入力に対して出力設定がLandscapeというような場合でも、変換後に違和感のない映像が得られます。

それぞれのスケーリングモードでの動作のようすは、User Guideの「Video scaling behavior and aspect ratios」に図とともに詳しく説明されているので詳細は割愛します。本エントリではPortrait(縦長)の入力に対してLandscape(横長)の出力設定をしてある状況下にて、Scaling behaviorの設定の違いでどのような出力が得られるかを確認してみたのでまとめたいと思います。

Video scaling behaviorの新しいスケーリングモードを試してみた

では実際に、MediaConvertに追加された新しいスケーリングモード、FitFit without upscalingFillをそれぞれ確認していきいます。あわせて、これまでのDefault (Fit with padding)ならびにStretch to outputの挙動についても確認してみます。

入力映像と出力映像の設定について

入力映像は解像度がwidth: 1080, height: 1920のPortrait (9:16)な動画ファイルを準備しました。井の頭線の電車をスマホで撮影したものですね。

出力の際の解像度設定としてはwidth: 1280, height: 720を指定してみます。Landscape (16:9)な解像度ですね。MediaConvert User Guideの「Video scaling behavior and aspect ratios」の表中、Conditionの「 Input width less than output width. Input height greater than output height. 」の条件に合致する変換となります。

Scaling behaviorごとのJobを作成

MediaConvertでScaling behaviorごとのJobを作成してきます。

Default (Fit with padding)

まずはDefault (Fit with padding)用のJobです。[Create Job]から進み、入力ファイルのS3 URLを入力したら、Output groupsを[Add]します。今回はFile groupを選択しました。

出力先のパスとなるDestinationを入力、またOutputsのName modifierも設定します。(ここをScaling behaviorの設定ごとに変更し、出力ファイルを区別してきます。)P

Detailsに進み、Extensionで「mp4」を指定します。 Encoding settingsでWidthとHeightを1280x720としました。 Max bitrateは「5000000 (bits/s)」を指定します。

Scalingの項目のScaling behaviorDefault (Fit with padding)を選びます。

以上でJobを作成します。

Stretch to output

続いてStretch to output用のJobです。Default (Fit with padding)用のJobを[Duplicate]して、OutputsのName modifier`を変更します。

Scalingの項目のScaling behaviorStretch to outputを選び、Jobを作成します。

Fit

Fit用のJobも、Stretch to outputと同様に[Duplicate]して進めます。OutputsのName modifierを変更たら、Scalingの項目のScaling behaviorFitを選択します。

Fit without upscaling

Fit without upscaling用のJob作成も同様です。Scalingの項目のScaling behaviorFit without upscalingを選択します。

Fill

Fill用のJobも同様の手順です。Scaling behaviorFillを選択します。これですべてのScaling behavior用のJobが作成できました。

Scaling behaviorごとの変換後の出力映像の解像度を確認

Scaling behaviorごと5つのJobが完了したら、S3に出力されている変換後の映像を確認していきます。

Default (Fit with padding)

まずはDefault (Fit with padding)の設定です。左右に黒い帯ができてしまっていることが確認できますね。出力された映像の解像度は1280x720です。

Stretch to output

続いてStretch to outputの設定です。Default (Fit with padding)とは異なり、左右への黒い帯は発生していませんが、出力後の解像度に合わせて映像が引き伸ばされてしまっていることがわかります。出力された映像の解像度は1280x720です。

Fit

続いて今回のアップデートの1つ、Fitの設定です。変換後の映像がPortrait (9:16)な比率を維持した解像度になっています!実際の解像度は406x720となり、Jobで設定したheightを基準に9:16なPortraitになっていることがわかります。

Fit without upscaling

続いてもアップデートで追加された設定の1つ、Fit without upscalingの設定です。こちらもFitと同様に、変換後の映像はJobで指定したheightを基準にした、9:16な406x720解像度のPortraitとして出力されていることがわかります。今回は入力のheightが出力のheightよりも大きい(入力が1920、出力が720)という条件でしたが、逆(入力のheightが出力のheightよりも小さい)場合には、FitFit without upscalingで出力に違いが出てくる、という認識です。

Fill

最後に、アップデートで追加された設定の1つのFillです。16:9なLandscapeな映像に変換されています。しかし、左右に黒帯ができたDefault (Fit with padding)や映像が引き伸ばされてしまったStretch to outputと異なり、入力映像の中心部分のみが残り上下が切り取られる、クロッピングされた映像になっていることがわかります。入力映像が解像度が1080x1920で出力された映像の解像度は1280x720ですので、width1280を基準に少し拡大していることになりますね。

Amazon Elastic Transcoderにのみ搭載されていた機能がMediaConvertにも追加された!?

MediaConvertのVideo scaling behaviorに新たに追加された3つのスケーリングモード、FitFit without upscaling、そしてFillの違いを、これまでのDefault (Fit with padding)ならびにStretch to outputの結果とあわせて確認してきました。

実際の変換のパターンについては、繰り返しになりますがMediaConvert User Guideの「Video scaling behavior and aspect ratios」の項目の図を確認しましょう。パターンごとにどのような変換になるのかが網羅されています。

Video scaling behavior and aspect ratios - MediaConvert

さて、上記の図(人形のアイコン)と各モードごとの変換パターンの内容などを確認していくと、「あれ?あのサービスのドキュメントにもこんなページあったよな?」と気がつくかと思います。そう、2017年11月のre:Invent 2017でAWS Elemental MediaConvert含むAWS Media Servicesが発表されるまで、AWSの動画変換サービスならこれ!だったAmazon Elastic Transcoderですね。

改めてElastic TranscoderのDeveloper Guideを確認してみましょう。やっぱり!同じ図(人形のアイコン)が使われていました。またこのページから、Elastic TranscoderにはFitFillなどの設定が可能であったことがわかります。(設定パターンとしてはElastic Transcoderのほうが多そうですね。)

Sizing Policy and Aspect Ratios - Amazon Elastic Transcoder

今回のMediaConvertでのアップデート、今となっては数少ないElastic Transcoderにだけ設定できる機能の1つがMediaConvertにも設定できるようになった、と言えるかもしれません。ただ例えば以下のように、これまでMediaConvert単体では設定できなかっただけでLambdaなどとの連携で目的は果たせていた、という認識です。とはいえ、MediaConvertのみの設定だけで実現可能になったのは嬉しいアップデートかと思います。

まとめ

MediaConvertのVideo scaling behaviorで新たに追加された3つのスケーリングモードについて確認してみました。本文中でも触れましたが、例えば縦長動画から横長動画への変換などでは、違和感のない映像(黒帯がない、引き伸ばされていない)を得るために一工夫必要でした。

今回追加されたスケーリングモードを上手に活用することで、縦横比が変わる変換でも違和感のない映像が容易に得られます。また下記エントリのような、縦横比の変換のためにクロッピングを行っていた、という場合にもFillの設定を使うことで自動的に処理ができるようになるかと思います。

比率が変わる変換では重宝するアップデートですね。上手に活用していきたいと思いました。