AWS Elemental MediaConvertで入力ファイルのクリッピングとステッチングを扱う 〜AWS Elemental MediaLiveのアーカイブファイルを入力素材として〜

ファイルベースの動画変換サービスであるAWS Elemental MediaConvertで選択部分のみ変換するクリッピング機能、また複数の入力ファイルを結合するステッチング機能を、AWS Elemental MediaLiveのアーカイブ出力ファイルを入力素材として使ってみました。
2019.01.01

はじめに

清水です。本エントリではAWS Elemental MediaConvertで入力ファイルのクリッピングとステッチングを扱ってみます。まずクリッピング(Clipping)ですが、入力ファイルから不要な部分を削除して、選択した部分のみをトランスコードする処理です。いわゆるIn/Out点を指定して映像から任意の場所を抜き出す処理ですね。そしてステッチング(Stitching)は複数の入力ファイルを結合して1つのファイルとしてトランスコードする処理です。以下は少し古めのエントリですが、Amazon Elastic Transcoderでステッチングを行った例になります。(なおAWS Elemental MediaConnectでは入力ファイルのクリッピング、ステッチング機能ともリリース時から実装されていました。)

ユースケースとしては様々な場面が考えられますが、今回はAWS Elemental MediaLiveのアーカイブファイルを変換するというケースでこのクリッピング/ステッチングの機能を使用しました。

MediaLiveでのアーカイブ出力はRollover Intervalの値で指定した秒数で分割され、出力されます。Rollover Intervalは指定できる最大値が600秒=10分となるので、アーカイブ出力は最長でも10分区切りのファイルとなります。この10分区切りのファイルを結合するのにMediaConvertのステッチング機能を利用します。またライブ配信のアーカイブファイルの場合、だいたい始めと終わりの数分間は不要な映像となるので、こちらの削除にクリッピング機能を利用しました。

トランスコード対象となるMediaLiveのアーカイブファイルの確認

まずはトランスコード対象となるMediaLiveのアーカイブファイルを確認します。とあるS3バケットのとあるフォルダのarchive/delivery/配下に格納されたvod_20181217T030928.000000.tsからvod_20181217T030928.000003.tsが今回の対象です。先に述べたとおりMediaLiveのArchive出力機能を用いて作成されたファイルであり、Rollover Intervalは600、またName Modifierにvod_$dt$を指定しています。ファイル名末尾の番号、000000から000003はMediaLiveにより割り振られるシーケンシャルな値ですね。

よってステッチング対象となるのは、以下の4ファイルとなります。

  • vod_20181217T030928.000000.ts
  • vod_20181217T030928.000001.ts
  • vod_20181217T030928.000002.ts
  • vod_20181217T030928.000003.ts

そしてこのファイルはライブ配信したものアーカイブファイルになるので、始めと終わりの数分間は不要な映像(配信本編ではない映像)です。そのため先頭となるvod_20181217T030928.000000.tsから頭の数分間、また後尾となるvod_20181217T030928.000003.tsの末尾数分間をそれぞれクリッピングします。どのぐらい(何分何秒)映像をカットするかは実際にS3からファイルをダウンロードし、ローカルPC上で確認しました。

クリッピング情報についてもまとめると、以下のようになります。

  • vod_20181217T030928.000000.ts
  • ファイルの始めから07:59までをカットして08:00から使用。(In点が08:00、Out点はファイル末尾)
  • vod_20181217T030928.000001.ts
  • vod_20181217T030928.000002.ts
  • vod_20181217T030928.000003.ts
  • ファイルの始めから07:46までを使用してそれ以降はカット。(In点がファイル先頭、Out点が07:46)

MediaConvertで入力ファイルのクリッピングとステッチングを指定して変換する

変換対象となるファイル群が確認できたら、続いてMediaConvertでクリッピングとステッチングを指定して、実際に変換を行います。以降、順番が逆転しますがステッチングの設定、クリッピングの設定の順で記載します。

MediaConvertでのステッチング(Stitching)の指定

MediaConnectでステッチングの指定ですが、Job作成時デフォルトではInput 1が指定できるようになっています。まずはこのInput 1に先頭となるファイルvod_20181217T030928.000000.tsを指定します。

続いてこちらの画面左側、Inputsの項目に[Add]ボタンがあるのでこちらを押すとInput 2が追加されます。こちらに2番目のファイルを追加しましょう。

ファイルは合計4つありますので、同様の手順でInput 3、Input 4を追加、それぞれファイルを指定します。

MediaConvertでのクリッピング(Clipping)の指定

MediaConnectでのクリッピングの指定はInputごとに行います。まずはInput 1で指定したvod_20181217T030928.000000.tsから設定を行います。まずVideo selectorのTimecode sourceの項目を確認します。ファイルにタイムコード指定がなされているかに合わせて、適切な値を選択しましょう。今回はMediaLiveからのアーカイブ出力が変換元ファイルとなりますが、配信時にタイムコードをエンベデッドしていないのでStart at 0を指定します。(実は今回ハマった箇所がここになります。デフォルトのEmbedded指定のままJobを作成してしまい、The clipping start timecode was not found in input number [1]といったエラーでJobが失敗してしまいました。)

続いてクリップ自体の設定を行います。Input 1のInput clipsの欄で[Add input clip]ボタンから設定を追加します。In点を08:00、Out点はファイル末尾とするので、Start timecodeだけ00:08:00;00と指定します。

続いて後尾となるvod_20181217T030928.000003.tsの末尾のクリッピング指定です。こちらもまず、Video selectorのTimecode sourceをStart at 0に指定、次いで`In点がファイル先頭、Out点が07:46となるので、こちらもInput 4にInput clipを追加し、End timecodeに00:07:46;00を指定します。

その他のMediaConvertの指定

以上でクリッピングとステッチングの設定自体は完了です。他の項目は通常のMediaConvetのJob設定と同様に行います。今回はMediaLiveのアーカイブを変換するということでHLSとmp4の2種類の出力を指定しました。

HLSについてはOutput groups追加画面でApple HLSを選択し、System-Avc_16x9_720p_29_97fps_3500kbpsのPresetを使用しました。Output 1のName modifierを_filename_baseと指定することで、出力されるファイル名はvod_20181217T030928.000000_filename_base.m3u8vod_20181217T030928.000000_filename_base1_00001.tsというようにInput 1のファイル名をベースにしながらName modifierの値が付与されます。

またmp4形式の単一ファイル出力については、Output groupsでFile groupを選択、System-Generic_Hd_Mp4_Avc_Aac_16x9_Sdr_1280x720p_30Hz_5Mbps_Qvbr_Vq9のPresetを指定しました。Name modifierは_filename_base、Extensionはmp4を指定することで、出力されるファイル名はInput 1のファイル名をベースにしてvod_20181217T030928.000000_filename_base.mp4となります。

最後にJob settingsのSettings項目、IAM roleを忘れずに設定してJobを作成します。

まとめ

ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertで入力ファイルのクリッピング機能とステッチング機能を使ってみました。素材として例に挙げたとおり、今回この機能を使うにいたったきっかけはAWS Elemental MediaLiveのアーカイブ機能で出力された10分区切りのファイルの変換処理を行うためでした。クリッピング/ステッチングの機能自体はドキュメントで確認することで利用可能なことはわかっていましたが、ちょっとハマった点は本文中でも触れたInputごとのTimecoder sourceの扱い方の点でした。デフォルトでEmbeddedなTimecodeを使用する設定になっているあたりさすがブロードキャストグレードだなと思う半面、設定項目気をつけないとな、と思った次第です。引き続きAWS Elemental MediaConvertをはじめとしたAWS Media Servicesについて、機能アップデートのほか様々な機能の使い方にも注目していきたいと思います。