AWS Elemental MediaConvertで横長動画から縦長動画のクロッピングをしてみた

ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertでクロッピング機能を使い、横長動画から縦長動画を切り抜いて変換してみました。
2020.02.27

はじめに

清水です。AWS Elemental MediaConvertで横長動画から縦長動画を切り出して(クロッピングして)変換を行ってみました。以下のようなイメージとなります。

具体的には、MediaConvertの「クロッピング(Cropping)」という機能になります。こちらのクロッピング機能、入力となる動画から横(x)、縦(y)方向のオフセットならびに実際に切り出す幅(Width)、高さ(Height)を指定することで切り出した動画を対象に変換を行うことができます。紛らわしい機能にクリッピング(Clipping)がありますが、こちらは入力ファイルから時間軸のIn/Outを指定して切り出す操作となります。クリッピングについては以下エントリを参照ください。

どこをクロッピングするか決める

まずはどんな具合で動画を切り出すか(クロッピングするか)決めておきましょう。今回入力とするファイルは4Kの横長動画、解像度は3840x2160としました。(以降、単位のピクセルは省略します。)

以下が実際の動画ファイルのスクリーンショットです。

MediaInfoで確認した情報は下記になります。

この解像度3840x2160の横長動画から縦長で9:16の動画を切り出すことを考えます。縦は2160として、9:16の比率から横幅を求めると1215となります。後述しますが、クロッピングする際に指定する値は偶数である必要があります。そのため縦2160をフルに使うことはせず、9:16の解像度を1206x2144としました。縦方向については16ピクセルぶん、下部分をカットしてしまうこととします。 (こちらのページの16:9一覧表から、2160に近い数字を選びました。)

続いて横方向です。今回は真ん中部分を残す想定です。3840-1206=2634となりますので、左右1317をカット、としたいのですが、こちらも偶数である必要があるため、左を1318、右を1316カットとしました。以下のようになります。

縦長動画用のMediaConvertプリセットをつくる

実際にMediaConvertで変換する前に、縦長動画用のOutput Presetを作成しておきます。System PresetsからOTT-HLSを選択、今回は「System-Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8.5Mbps」を使いました。

このままですと解像度が1920x1080で横長動画になりますので、解像度を縦長の1080x1920に変更したカスタムプリセットを作成します。[Duplicate]からプリセットを複製し、Name、Descriptionを入力します。Nameは「Custom-Portrait-Ott_Hls_Ts_Avc_Aac_9x16_1080x1920p_30Hz_8.5Mbps」としました。そしてResolution部分を1920x1080から1080x1920に変更して、ページ下部の[Create]でCustom Presetを作成します。

実際にMediaConvertで動画をクロッピングしてみる

それでは実際にMediaConvertで動画を切り出してみます。MediaConvertで[Create Job]からJobを作成していきましょう。Inputの設定箇所、入力ファイルを指定したら、Inputの設定箇所をページ下部までスクロールし、Cropping selectionの項目で[Add cropping]をクリックします。

X offset from left(pixels)Y offset from top (pixels)WidthHeightをそれぞれ入力します。Cropping selectionのInfoを確認するとわかるのですが、偶数入力しか受け付けない点に注意しましょう。

数値を指定後、今度はOutput groupsで出力を追加します。Output settingsのPreset指定箇所で、先ほど作成した出力解像度1080x1920のプリセットを指定しましょう。Name modifierについても入力しておきます。

最後にJob settingsでIAMロールを忘れずにアタッチし、[Create]でJobを作成します。

作成したHLS形式のファイル一式のうち、最初のtsファイルをダウンロードしMac上で確認してみました。以下はスクリーンショットとなりますが、縦長動画になっていますね!

MediaInfoの情報は下記になります。

またHLS形式として、VideoJS HTTP Streamingで再生させてみた結果が下記となります。縦長ですね!

Output設定でクロッピングする

MediaConvertで動画をクロッピングする方法について、Inputの設定ではなくOutputの設定箇所でも行えることが確認できました。Encoding settingsのVideoの項目、Processの欄にInput cropping rectangleという箇所がありますのでこちらを有効にし、それぞれ値を入力することでもクロッピングが実現可能です。Job作成時のOutputの設定のほか、Presetに設定しておくこともできます。

MediaConvertの1つのJobでクロッピングあり/なしや複数種類のクロッピングを行うときはOutputでの指定、Presetを指定するケースでクロッピングなしの動画にも対応する必要がある場合はInputでの指定、といった使い分けができるかと考えます。

まとめ

ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertでクロッピング機能を使い、横長動画から縦長動画を切り抜いて変換してみました。今回は真ん中を中心に切り出してみましたが、クロッピングの際のパラメータを変更することで切り出す位置が変更できます。また今回のような変換以外にも、例えば右下1/4だけをクロッピングする、などのバリエーションにも対応できるかと考えます。引き続きAWS Elemental MediaConvertをはじめとしたAWS Media Servicesについて、機能アップデートのほか様々な機能の使い方にも注目していきたいと思います。