AWS Elemental MediaLiveで映像へのタイムコードの焼き付けをサポートしました!?burn-in?

MediaLiveでタイムコードを映像に視覚的に挿入することができるようになりました。UTCのクロックタイムが焼き付けられ、またOutputごとにタイムコードの焼き付けの有無を設定できます。動作検証やコンプライアンス対応などで役立つ機能かと思います。
2023.01.27

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

はじめに

清水です。ブロードキャストグレードのライブ動画処理サービスであるAWS Elemental MediaLiveで映像へのタイムコードの焼き付けをサポートするアップデートがありました!(2023/01/23付でAWS What's Newにポストされたアップデートとなります。)

AWS Elemental MediaLiveではこれまでもメタデータ、つまり映像自体ではなく視覚的に見えない内部的なデータとしてタイムコードを含めることが可能でした。今回のアップデートでは、このメタデータによるタイムコードに加え、映像自体にタイムコードを表示させる(焼き付ける)ことが可能になったわけです。

一般的なライブ配信のような視聴者へ映像を配信するユースケースで映像自体にタイムコードをのせる必要がある、といったことはまれだと思います。ただこのタイムコードの映像への焼き付け機能、動作確認などの際には非常に役に立つ機能ではないでしょうか。その他、監視やコンプライアンス用のユースケースが上記AWS Whats' Newのポストで紹介されていました。

これまでこのような映像にタイムコードを焼き付ける場合は、MediaLiveへの入力となる映像ソースの段階で処理を行う必要がありました。(MediaLiveのHTML5モーショングラフィックすオーバーレイを使うことで実現できなくもないのかな、とも思いましたが、本来のユースケースではないかと思います。)映像機器側で簡単にタイムコードの焼き付けができればよいのですが、そういった機能がない場合にはタイムコード焼き付け用の専用の機器を準備して、などと手間がかかりました。今後はMediaLive側で設定を行うだけでタイムコードの焼き付けが可能になりますね。

またMediaLiveではOutputごとにタイムコードの焼き付けを設定します。クラウドに打ち上げる映像ソースは1本ののみで、一方のOutputにはタイムコードを焼き付け、もう一方はクリーンな映像として利用する、といったことも容易に可能となります。

本エントリではこのAWS Elemental MediaLiveのタイムコード焼き付け機能について、実際に使用してみたのでまとめてみたいと思います。

MediaLiveで映像にタイムコードを焼き付けてみた

まずはMediaLiveのWorkflow wizardで基本となるリソースを作成し、その各リソースに対してTimecode burn-inの設定を行っていきます。その後、実際にライブストリーミングを行い、映像にタイムコードが焼き付けられているかを確認します。

Workflow wizardで基本となるMediaLiveリソースの作成

MediaLiveのマネジメントコンソール、Workflow wizardのページから[Create workflow]ボタンで進みます。Workflow nameを適切に設定、Channel classは検証用とですのでSINGLE_PIPELINEとしました。

Input typeはRTMP (push)を選択、Inputリソースは新規に作成します。Destinationの設定やInput Security Groupを適切に選択して[Next]で進みます。

OutputについてはMediaPackageを選択しました。MediaPackage Channelも新規に作成します。Renditionsとして1080p30720p30480p30の3つを選択しました。(後述しますが、1080p30という表記ですがフレームレートは29.97である点に留意しておきましょう。)

内容をReviewして[Create workflow resources]します。

Workflowの各リソースが作成できました。続いてChannel設定で実際にTimecodeの焼き付けの設定を行います。

MediaLive ChannelでTimecode焼き付けの設定

MediaLiveのChannelsの一覧から先ほどWorkflowで作成したChannelを選択し、Channel ActionsからEdit channelでChannelの設定変更画面に進みます。

Output groupsの項目、「1. mediapackage」のグループ内の「Output 1: emp_1080p30」を選択します。Stream settingsのVideoの設定で、Timecodeの項目を展開して「Timecode Burn-in Settings」の項目でTimecode burninを選択します。追加の設定項目が現れますので、それぞれ設定します。ここではPrefixはデフォルトの空欄のまま、Font SizeはLARGE_48、PositionはBOTTOM_CENTERを選択しました。

「Output 2: emp_720p30」でも同様の設定を行います。Prefixで720p30を入力し、Font SizeはMEDIUM_32にしました。Positionは先と変わらずBOTTOM_CENTERです。

「Output 3: emp_480p30」は設定せずデフォルトのまま、[Update channel]ボタンで設定変更を反映させます。

タイムコードが焼き付けられていることの確認

OutputへのTimecode Burn-inの設定ができたら、WorkflowをStartさせて映像を打ち上げ、ライブストリーミングに実際にタイムコードが焼き付けられているか確認してみます。

ライブストリーミングの確認ですが、videojs-http-streaming Demoのページで行います。あらかじめ、Workflowで作成したMediaPackage HLS endpointのCloudFront URLを確認しておきます。

videojs-http-streaming Demoのページ、Source URLの欄にMediaPackage HLS endpointのCloudFront URLを入力して[Load]ボタンを押し、Playerの再生ボタンを押しててライブストリーミングが視聴できることを確認します。

さて、上記のスクリーンショットの状態ではタイムコードはのっていませんね。さきほど、1080p30720p30480p30のそれぞれのOutputに別々の設定を行ったことを思い出してみましょう。Output 1080p30にはPrefixなしのタイムコード、Output 720p30にはPrefix720p30を付与、そしてOutput 480p30にはTimecode burnin設定をしない(デフォルトのまま)という状況でしたね。それぞれの解像度ごとに確認をしてみます。

Playerのシークバーの右側、歯車のマークから1080pを選択します。以降、わかりやすいようにスクリーンショットはフルHD(1920x1080)解像度のディスプレイにフルスクリーン表示したものを掲示します。

以下が1080pを選択した際のライブストリーミングの視聴画面です。hh:mm:ss;ffという形式で映像に焼き付いたタイムコードが表示されましたね。なおAWS Elemental MediaLive User Guideに記載がありますが、このタイムコードはタイマーではなくクロックとなるということです。(Burning the timecode into output - AWS Elemental MediaLive)またクロックがUTCである点にも注意しましょう。

続いて720pを選択してみます。720p30というプレフィックスとともに720p30 hh:mm:ss;ffという形式でタイムコードが表示されました。

480pも選択してみましょう。こちらはTimecode burnin設定をしないデフォルトのままでしたので、タイムコードは表示されませんね。

ノンドロップフレームのタイムコード焼き付けも確認してみる

MediaLiveの設定でタイムコードの焼き付けができることが確認できました。さてタイムコードはhh:mm:ss;ffという形式でした。便宜上、Outputの表示などにあわせて1080p30などとフレームレートが30であるように記載してきましたが、厳密にはこのWorkflow wizardで作成したMediaLive Outputのフレームレートは29.97のドロップフレームです。実はWorkflow wizardの途中、MediaPackage destinationの項目で記載がありました。以下、スクリーンショットの再掲です。

MediaLiveのChannelリソースでも確認してみましょう。29.97のフレームレートの設定(Framerate Numeratorが30000、Framerate Denominatorが1001)になっていますね。

29.97のドロップフレームだったため、hh:mm:ss;ffというフレーム部分(ff)前のセパレータが;の表示形式だったわけですが、これをノンドロップフレームにした場合の挙動についても確認しておきましょう。

フレームレートがちょうど30になるよう、Framerate Numeratorを30、Framerate Denominatorを1に設定します。Channelの設定変更の際にはMediaLive Channel(ないしWorkflow)が停止状態である必要がある点に注意しましょう。

また1つのOutput groups内で1つのOutputのみノンドロップフレームにすることはできないようです。Validation Errors「Segment sizes must be the same across all renditions in an MediaPackage output group. Check the configured segment size, GOP length, and frame rate for each rendition.」というエラーで怒られてしまいました。3つのOutputすべてでノンドロップフレームとなるよう設定を行います。

設定後、再度MediaLive ChannelをStartさせてライブストリーミングを確認してみます。ノンドロップフレームのhh:mm:ss:ffの形式でタイムコードが焼き付けられていますね。

まとめ

AWS Elemental MediaLiveの新機能、タイムコードの映像への焼き付け(Timecode burn-in)について確認してみました。これまでもMediaLiveに打ち上げる前、映像ソース側で処理できていたことではあるかと思いますが、例えばタイムコードの有無で別の入力ソースとして打ち上げていた、なんて場合にはMediaLiveで処理することで映像アップロード帯域の削減につながりますね。また映像ソース側でタイムコードの焼き付け用に専用の機器を準備していた、というケースでは映像機器の簡略化が期待できるかと思います。

個人的には、映像にタイムコードを焼き付けるお手軽なツールが身近になかったので(映像編集ソフトでの焼き付けも考えましたが、そのために編集ソフト準備するのもなぁ、と)、利用頻度は低いけれどあったら助かる機能でした!サポートされて大変嬉しいです!