Azure Media Encoder の高度なエンコード機能
このポストは、8 月 21 日に投稿した Advanced Encoding Features in Azure Media Encoder の翻訳です。
Azure Media Encoder では、既定のプリセットによって利用可能な機能以外にも、高度なビデオおよびオーディオ処理を実行できる多数の機能が提供されています。今回の記事では、高度なサンプルの数々やポータル エクスペリエンスの後ろに隠れている Azure Media Encoder の優れた機能の一部をご紹介します。今回取り上げたシナリオでは、メールやフォーラムからお問い合わせをいただいた中で特に多かったものを選びました。
カスタム プリセット
初めて利用するユーザーがわかりにくいと感じる機能の 1 つに、カスタム プリセットの定義と送信があります。私たちが提供しているエンコーダーには既に幅広い種類の定義済みのシステム プリセットがあり、詳細情報は MSDN にまとめられています。また、特定のデバイスへの配信にどのプリセットを使用すればよいかを記載したガイダンス ページもあります。
エンコーダーのすべての機能と設定は、XML プリセット ファイル形式を利用して完全に構成することもできます。これにより、特定の用途のシナリオで必要となる設定やパフォーマンスを構成できます。XML プリセット ファイル形式の完全なスキーマについては、Media Services Encoder の構成スキーマのページを参照してください。さらに、カスタム変更を加えるための「ベスト プラクティス」のたたき台を利用できるように、すべてのシステム定義のプリセットの完全な XML も提供されています。たとえば、こちらのリンクでは H264 Adaptive Bitrate MP4 Set 720P の完全な XML をご覧になれます。
プリセット スキーマの構造は非常にシンプルです。すべての XML は <Presets> 要素から始まり、その中に 1 つ以上の <Preset> 定義を含めることができます。これは、単一のエンコード タスクに対して複数の出力やエンコード設定を定義する場合に非常に便利です。たとえば、1 つのエンコード ジョブで複数のオーディオ プロファイルに出力する必要がある場合があります。その良い例として、ステレオ AAC とサラウンド サウンド用の Dolby DD+ 形式 (英語) の両方をエンコードする場合などが挙げられます。
プリセット XML の最も基本的な構造は次のようになります。エンコーダーのプロセッサに主要な変更が加えられた際にはバージョンの改訂が行われるため、プリセットにもバージョン文字列を含めています。
<?xml version="1.0" encoding="utf-16"?>
<Presets version=”5.0”>
<Preset>
<MediaFile>
<OutputFormat>
</OutputFormat>
</MediaFile>
</Preset>
</Presets>
プリセットに新しい出力を追加し、設定を変更するには、<OutputFormat> 以下にさまざまな XML 要素を追加します。たとえば、現時点では次の出力形式がサポートされています。
上記の各出力形式では、次の 2 つの主要な要素を使用して、オーディオとビデオの両方の詳細な基本ストリーム設定をセットアップできます。
完全に定義されたオーディオ用カスタム プリセットの簡単な例は次のようになります。この例では、既存のオーディオのみのプリセットからビットレートだけを 96 kbps に変更しています。オーディオの場合、AudioProfile 以下にさまざまなコーデックを追加できます。現時点では、AAC、Dolby、WMV の各プロファイルがサポートされています。詳細については、AudioProfile 要素のページをご覧ください。
<?xml version="1.0" encoding="utf-16"?>
<!—My Custom AAC Audio Preset -->
<Presets>
<Preset
Version="5.0">
<MediaFile>
<OutputFormat>
<MP4OutputFormat
StreamCompatibility="Standard">
<AudioProfile Condition="SourceContainsAudio">
<AacAudioProfile
Codec="AAC"
Channels="2"
BitsPerSample="16"
SamplesPerSecond="44100">
<Bitrate>
<ConstantBitrate
Bitrate="96"
IsTwoPass="False"
BufferWindow="00:00:00" />
</Bitrate>
</AacAudioProfile>
</AudioProfile>
</MP4OutputFormat>
</OutputFormat>
</MediaFile>
</Preset>
</Presets>
ビデオ エンコードを行っていて、ジョブの H264 エンコードの詳細設定にアクセスする場合には、<VideoProfile> 要素以下の次の要素を設定することができます。これらの要素ではあらゆるエンコード設定を調整することができ、それによってエンコードに要する時間が非常に短くなることも、非常に長くなることもあります。そのため、編集している内容を十分に理解するようにしてください。
VideoProfile 要素以下の H264 設定で最も一般的に使用されるのは、Basic、Main、High の各プロファイル設定です。
上記の各プロファイル設定では、エンコード先の各 <Streams> を指定します。高度なマルチビットレート MP4 エンコード プリセットでは、解像度と出力ビットレートの異なる複数の出力ストリームを定義することができます。
プリセットは、オーディオのみのシンプルなものから、複数の出力 Preset と MediaFile を組み合わせた非常に複雑な「スーパー プリセット」まで、多岐にわたります。ドキュメント化されている複雑なカスタム プリセットの良い例として、こちらの複数のオーディオ トラックへのエンコードを実行する膨大なプリセット ファイルをご覧ください。この非常に複雑なプリセットでは、1 つのジョブ プリセットで 8 つのビデオ ファイルと 5 つの個別のオーディオ エンコード (Dolby DD+ を含む) を出力しています。
定義したカスタム プリセットは、Configuration プロパティに XML を設定して簡単にエンコード タスクに送信することができます。次のサンプル コードでは、configuration 文字列にカスタム プリセット XML を読み込んでから、タスクに使用しています。
string configuration = File.ReadAllText(pathToCustomXMLConfigFile));
ITask task = job.Tasks.AddNew("My Custom Encoding Task",
encoderProcessor,
configuration,
TaskOptions.None);
高度なサムネイル生成
カスタム プリセットの設定を指定するか、サムネイル タスクを使用した完全なスタンドアロンのタスクとして、エンコード中にサムネイルを簡単に作成することができます。Azure Media Encoder には、パーセントや特定の時点または間隔を指定するなど、ビデオからサムネイルを生成するさまざまなオプションが用意されています。
サムネイル タスクでは、ビデオから一連の画像を生成し、Media Services アカウントのアセットに書き込みます。その後、それらのサムネイルを Azure Storage から直接利用することも、発行されたストリーミング コンテンツと共に Media Services のストリーミング サーバーから利用することもできます。
サムネイルを生成するには、スタンドアロンのサムネイル タスクをジョブに送信し、アカウント内のビデオ アセットを指定するか、タスクを連結してまずエンコードしてから、ジョブの後にサムネイルを生成します。
サムネイル タスクを送信する場合、Azure Media Encoder と共に、サムネイルを生成するために必要なすべての情報を指定したカスタム XML ファイルを使用する必要があります。
この XML の最もシンプルな形式は次のようになります。この例では、固定幅、可変の高さ、JPEG 形式とカスタマイズした命名テンプレート、さらに、入力タイムラインの位置に特定のパーセントを指定して、サムネイルを生成する方法を示しています。
<?xml version="1.0" encoding="utf-8"?>
<Thumbnail Size="100%,*" Type="Jpeg" Filename="{OriginalFilename}_{Size}_{ThumbnailTime}_{ThumbnailIndex}_{Date}_{Time}.{DefaultExtension}">
<Time Value="10%" Step="10%" Stop="90%"/>
</Thumbnail>
Thumbnail 要素である次の属性により、サムネイルの出力サイズと種類の詳細を設定することができます。
- Size – 作成するサムネイルの幅と高さを設定します。パーセントや正確なピクセルの値を指定することも、アスタリスク (*) を使用して元のビデオの縦横比を維持することもできます。
- Type – 出力ファイル形式を設定します。サポートされている値は、JPEG、BMP、GIF、PNG です。
@FileName 属性は、サムネイルの出力命名テンプレートを指定する際に利用可能な一連のマクロを使用します。次のマクロ名がサポートされています。
- OriginalFilename – サムネイル ジョブの生成元の入力ファイル名
- Size – @Size 属性で設定されたサムネイル タスクのサイズ (幅 x 高さ)
- ThumbnailTime – ビデオからサムネイルが抽出された時点
- ThumbnailIndex – サムネイルの絶対インデックス番号
- Date – サムネイルが抽出された短い形式の日付 (DD-MM-YYYY)
- Time – サムネイルが抽出された時間 (HH.MM AM/PM)
- DefaultExtension – 選択された出力形式の @Type に使用されている拡張子。Type=”Jpeg” の場合は、”jpg” に設定されます。
XML の <Time> 要素では、3 つのプロパティによってサムネイルが生成元のビデオから抽出される方法を制御します。@Value 属性はサムネイルの抽出の開始位置を指定します。この例では、ビデオの再生時間の 10% に設定されています。@Step 属性は開始位置の値から先に進む間隔を制御します。終了位置として指定された Stop の限度 (この例では 90%) に達するまで、指定された間隔で取得する動作を繰り返します。パーセント指定の単位を使用することのメリットは、正確なタイム コードを設定したり、ジョブに使用する XML ファイルを作成する前にビデオ全体の再生時間を把握したりする必要がないということです。@Filename 属性で命名テンプレートを作成する場合、Filename プロパティの値にパーセント エンコードの予約文字 (英語) である「!*’();:@&=+$,/?%#[]“」を使用することはできません。また、ファイル名の拡張子には「.」を 1 つしか使用できません。
上記の XML の出力では、次のようにテンプレート設定に基づくファイル名が生成されます。このサンプルはわずか 5 秒のとても短いものだったため、それほど多くのサムネイルが取得されませんでした。
サムネイルを生成する場合のもう 1 つのオプションとして、ビデオから抽出する正確な時点がわかっていれば、「時間:分:秒」の形式で指定したタイム コードを使用して修正した XML を送信することができます。
<?xml version="1.0" encoding="utf-8"?>
<Thumbnail Size="300,*" Type="Jpeg" Filename="{OriginalFilename}_{ThumbnailIndex}.{DefaultExtension}">
<Time Value="0:0:0" Step="0:0:5" />
</Thumbnail>
上記のサンプルはビデオの最初 (0:0:0) から開始し、ビデオの最後に到達するまで Step の値に指定した 5 秒 (0:0:5) 間隔で新しいサムネイルの取得を続けます。
このテンプレートでは上記と同じ短いビデオを使用したため、インデックス値 ”1” を含む 1 つのサムネイルのみが生成されました。
Media Services API のジョブとしてカスタマイズした XML 設定を送信する方法の詳細とサンプル コードについては、「ビデオのサムネイルの作成」をご覧ください。
ビデオとオーディオのオーバーレイ
エンコーダーでビデオに目に見える透かしを追加することで、画像のオーバーレイを適用して、コンテンツの不正な配布の防止やコンテンツのブランディングを行うことができます。たとえば、テレビ局では番組画面の隅にロゴを配置することにより、コンテンツを特定できるようにしています。また、航空会社では、配信される映画の途中にたびたび航空会社の透かしが表示されます。もちろん、目に見える透かしを追加しても完全にビデオの流用を防ぐことができるわけではありませんが、他者による流用を抑え、所有者を明確に特定するためには役立ちます。配布を防止したり、ビデオへのアクセスを制御したりするために、今後公開されるマイクロソフトの PlayReady コンテンツ保護サービスなどのデジタル著作権管理機能を利用することをお勧めします。
注: 現時点では、Media Services でいわゆる「フォレンジック」透かしは提供されていません。フォレンジック透かしとは、内容に影響しない形でビデオ ストリームに適用される目に見えない透かしのことで、後から検出することでコンテンツを漏えいした人物または所有者を特定することができます。
Azure Media Encoder では、既存のビデオに画像 (*.jpg、*.bmp、*.gif、*.tif、*.png)、ビデオ、オーディオ トラックをオーバーレイすることができます。オーバーレイの設定を使用して、オーバーレイの表示時間、フェード、不透明度、出力ビデオ上の位置を制御できます。
オーバーレイ設定は、エンコード ジョブの XML で制御されます。ビデオ オーバーレイの制御には次の属性を使用できます。
- OverlayFileName – ビデオ オーバーレイを含むファイルの名前。下記の例では、トランスコードする入力ビデオと入力ビデオにオーバーレイするファイルの両方を含む、単一のタスクへの入力アセットを使用します。
- OverlayRect – オーバーレイする長方形の左上の頂点の X/Y 座標、幅と高さ (ピクセル単位)。これらの寸法は、出力エンコード設定ではなく、オーバーレイされるアセットの寸法と相対的なものです。
- OverlayOpacity – ビデオ オーバーレイの透明度。有効な値は 0 ~ 1 で、0 を指定すると完全に透明、1 を指定すると完全に不透明になります。
- OverlayFadeInDuration – ビデオ オーバーレイがフェードインするまでにかかる時間。有効な値は hh:mm:ss:fff 形式の時間です。入力ビデオのタイムラインに収まることを確認してください。
- OverlayFadeOutDuration – ビデオ オーバーレイがフェードアウトするまでにかかる時間。有効な値は hh:mm:ss:fff 形式の時間です。
- OverlayLayoutMode – オーバーレイをタイムラインの全体を通して表示するか、タイムラインの特定の部分にのみ表示するかを指定します。有効な値は次のとおりです。
- WholeSequence – ビデオ シーケンスの全体を通してオーバーレイを表示します。
- Custom – OverlayStartTime および OverlayEndTime 属性で指定された範囲でオーバーレイを表示します。
- OverlayStartTime – ビデオ オーバーレイが開始するビデオ タイムライン上の位置。OverlayLayoutMode が ”Custom” に設定されている場合にのみ使用されます。有効な値は hh:mm:ss:fff 形式の時間です。入力ビデオのタイムラインに収まることを確認してください。
- OverlayEndTime – ビデオ オーバーレイが終了するビデオ タイムライン上の位置。OverlayLayoutMode が ”Custom” に設定されている場合にのみ使用されます。有効な値は hh:mm:ss:fff 形式の時間です。入力ビデオのタイムラインに収まることを確認してください。
- 例として、Azure Media Services アカウントのビデオ ファイルにこのシンプルなアイコンをオーバーレイします。
Media.png – こちらのページからソースをダウンロード。 そのためには、まずこの画像をオーバーレイされるビデオと共に Media Services アカウントにアップロードする必要があります。あるいは、この画像をスタンドアロン アセットにアップロードすることもできます。これは、複数のジョブで再利用する場合に便利な方法です。
Azure Media Services.MP4 – こちらのページからソースをダウンロード。 両方のファイルを同じアセットにアップロードしたら、次にオーバーレイのカスタムのエンコード ジョブを作成します。ここでは、“H264 Broadband” MP4 エンコード システム プリセットを基にエンコード XML を作成します。
次の例では、このプリセットの XML 全体を表示する代わりに、このオーバーレイ ジョブを送信するために編集および変更する必要のある箇所のみを表示しています。
Ÿここでは、プリセットの <MediaFile> 要素に次の属性を追加して、送信するために XML ファイルを保存しました。@OverlayFileName 属性には、ビデオと共にアップロードした “Media.png” の画像を指定しています。
<MediaFile
...
OverlayFileName="Media.png"
OverlayRect="200, 100, 40, 40"
OverlayOpacity="0.9"
OverlayFadeInDuration="00:00:02"
OverlayFadeOutDuration="00:00:02"
OverlayLayoutMode="Custom"
OverlayStartTime="00:00:05"
OverlayEndTime="00:00:20">
プリセット XML に上記の修正を加えてジョブを送信すると、作成されたビデオでは、Media Services のロゴが開始 5 秒の時点でフェードインし、15 秒間画面に表示され、20 秒の時点でフェードアウトします。
不透明度は 90% に設定されているため、ビデオ画面が透けて見えます。@OverlayRect は画像の位置を制御しています。@OverlayRect には、オーバーレイする長方形の左上の頂点の X/Y 座標、その後に完成版の画像の幅と高さをピクセル単位で指定しています。
この値を調整する場合、オーバーレイされるビデオの寸法に収まることを確認してください。収まらない場合、エラー メッセージが返されます。同様に、StartTime および EndTime に使用する時間もオーバーレイされるビデオのタイムラインに収める必要があります (この属性ではパーセント指定はサポートされていません)。
このサンプルをビデオとして構成して再生すると、次のように表示されます。出力されたビデオ ファイルはこちらのページからダウンロードして再生できます。
ビデオ オーバーレイの他に、オーディオ オーバーレイもサポートされています。オーディオ オーバーレイでは、サポートされている任意のオーディオ ファイル形式を使用して、ビデオにフェードインおよびフェードアウトさせることができます。これは、ボイスオーバーや音楽を追加する場合に便利です。上記の例と同様の方法で、MediaElement に次の属性を使用することでオーディオ オーバーレイ機能を制御できます。オーディオ オーバーレイの制御に使用できる属性は次のとおりです。
- ŸAudioOverlayFileName – オーバーレイするオーディオを含むファイルの名前。ジョブの入力アセットを指定するためには、個別のファイル名を使用することも、%n% 形式のゼロベース インデックスを使用することもできます。
- ŸAudioOverlayLoop – オーディオ オーバーレイをループさせるかどうかを指定します。有効な値は True または False です。
- ŸAudioOVerlayLoopingGap – オーディオ オーバーレイが終了してから再度開始するまでの時間。有効な値は hh:mm:ss:fff 形式の時間です。
- ŸAudioOverlayLayoutMode – エンコードしたビデオ ストリームのどの部分でオーディオ オーバーレイを再生するかを表します。有効な値は “WholeSequence” または “Custom” です。“WholeSequence” を指定するとストリームの全体を通してオーディオ オーバーレイを再生します。“Custom” を指定すると AudioOverlayStartTime および AudioOverlayEndTime 属性で指定された範囲でオーディオ オーバーレイを再生します。
- ŸAudioOverlayStartTime – オーディオ オーバーレイが開始するビデオ タイムライン上の位置。有効な値は hh:mm:ss:fff 形式の時間です。入力ビデオのタイムラインに収まることを確認してください。
- ŸAudioOverlayEndTime – オーバーレイが終了するビデオ タイムライン上の位置。有効な値は hh:mm:ss:fff です。入力ビデオのタイムラインに収まることを確認してください。
- ŸAudoOverlayGainLevel – オーディオ オーバーレイのゲイン レベル。有効な値は 1 ~ 10 (0.1 単位) です。
- ŸAudioOverlayFadeInDuration – オーディオ オーバーレイがフェードインするまでにかかる時間。有効な値は hh:mm:ss:fff です。
- ŸAudioOverlayFadeOutDuration – オーディオ オーバーレイがフェードアウトするまでにかかる時間。有効な値は hh:mm:ss:fff です。
オーディオ オーバーレイのファイル名の設定方法は、ビデオ オーバーレイの場合と同様です。単一のアセットを使用して、そのアセットに含まれる特定のオーディオ ファイルを指定することも、エンコード ジョブのソースとして複数のアセットを送信して、%n% ベースの構文でファイル名を設定することもできます。
API の詳細とオーバーレイを含むエンコード用のジョブの送信方法については、「オーバーレイの作成」をご覧ください。
ビデオのトリミング
ビデオから数ピクセルを切り取ったり (スキャンした線の除去)、別の理由でビデオの一部を抽出したりする必要がある場合、カスタム プリセットの単一の設定によって簡単にこれを実行することができます。
MediaElement の @CropRect 属性を設定することで、ビデオをトリミングできます。
- ŸCropRect – 入力ビデオのトリミングに使用する長方形を指定します。有効な値は、トリミングする長方形の左上の頂点の X/Y 座標、幅と高さです (ピクセル単位)。これらの座標は入力ビデオに適用されるため、この長方形を設定する場合には元のビデオの寸法を考慮する必要があります。
たとえば、ビデオから 150 x 150 ピクセルの長方形をトリミングする場合は、次の属性の設定を使用します。
<MediaFile CropRect="0,0,150,150"/>
トリミングした長方形に合うように、完成後のエンコードのサイズを適切な高さと幅に設定する必要があります。値が不適切な場合、ビデオが奇妙に変形する可能性があります (もちろん、その効果を意図したのであればかまいません)。
ビデオのサブクリップ
多くの場面で、既存のビデオまたはオーディオ アセットの一部をクリップやハイライトとして切り取る必要があります。これを実行するために、Azure Media Encoder ではサブクリップ機能をサポートしています。
カスタム プリセットに <Clips> 要素とクリップの一覧を追加して、ビデオから抽出する各クリップの開始時間と終了時間を設定します。その結果、複数のクリップが合成された出力アセットが作成されます。
たとえば、既存のプリセットの <MediaFile> 要素内に次のスニペットを追加することで、ビデオの最初の 30 秒間をクリップとして抽出することができます。これは XML の抜粋であるため、システム プリセットまたは完全なカスタム プリセットのいずれかに組み込む必要があることに注意してください。
<Sources>
<Source>
<Clips>
<Clip
StartTime="00:04:00"
EndTime="00:04:30" />
</Clips>
</Source>
</Sources>
ビデオのサブクリップの方法を示すために、ビデオのどの時点からクリップを切り取ったかをはっきりと確認できる次のタイム コード付きのクリップを使用します。クリップは 00:58:00;00 の時点から開始し、1 時間の表示を超えて、約 11 分間カウントを続けます。
Timecode.wmv – このクリップはこちらのリンクからダウンロードできます。
上記のカスタム プリセットでは、<Source>、<Clips>、単一の <Clip> 要素を追加し、開始時間と終了時間をそれぞれ 00:04:00 と 00:04:30 に設定してビデオから 30 秒間のクリップを切り取っています。抽出されたクリップでは、ビデオに埋め込まれたタイム コードが 1:00:02:00 から開始されるはずです。
このカスタマイズしたプリセットと共にエンコード ジョブを Azure Media Encoder に送信すると、アセットが 30 秒間にクリップされます。出力アセットの MP4 はこちらのページからダウンロードできます。
ビデオの合成
場合によっては、2 つ以上のビデオを合成して長いビデオを作成する必要があります。これは、マーケティング用ビデオを作成したり、ビデオに広告 (「バンパー」) を追加したりする場合に該当します。また、この機能を使用して複数の短いビデオを結合して 1 つの長いクリップを作成することもできます。合成するビデオの開始時間と終了時間を変更したり、それぞれ異なる Media Services アカウントのアセットを使用したりできるため、既存のアセットから新しいビデオにバンパー広告や予告編などを簡単に追加できます。
Azure Media Services でビデオを合成するには、カスタム プリセットの <MediaFile> 要素内に <Sources> 要素と <Source> 要素を追加します。エンコード タスクの入力にはアセットのコレクションを指定できます。
2 つのクリップを合成する簡単な例は次のようになります。この例では、2 つの <Source> 要素を使用しています。1 つ目の <Source> は 1 つ目の入力アセットを表しています。2 つ目の <Source> は、@MediaFile 属性を “%1%” に設定することで、2 つ目の入力アセットとして識別されます。この構文により、入力アセットのゼロベース インデックスから 2 つ目のファイルが取得されます。
<MediaFile>
<Sources>
<Source
AudioStreamIndex="0">
</Source>
<Source
AudioStreamIndex="0"
MediaFile="%1%">
</Source>
</Sources>
次に、2 つの異なる入力アセットを 1 つのクリップに合成するプリセットを示した、より高度な例をご紹介します。このサンプルの XML では、<Sources> 要素を使用して複数の入力 <Source> ファイルを定義する方法と、エンコーダーのサブクリップ機能を使用して、<Clip> 要素によって合成元の各クリップの開始時間と終了時間を設定する方法を示しています。
まず、各ファイルを個別のアセットとしてアップロードします。その結果、ジョブの入力の一部として 2 つのアセットを送信してから、<Source> 要素の @MediaFile 属性の %n% 命名規則を使用した入力アセット配列のインデックスにより、各アセットを参照することができます。
ゼロベースのインデックス位置では、入力アセットに “%0%” を使用することはできません。1 つ目の入力アセットにアクセスするには、@MediaFile 属性を省略します。
繰り返しになりますが、下記の XML スニペットは部分的なものであるため、完全なカスタム XML プリセットに組み込む必要があることに注意してください。上記の「カスタム プリセット」のセクションでご紹介したシステム プリセットのいずれかを基にして、変更を加えることをお勧めします。
この合成元のアセットは、次のリンクからダウンロードできます。
XML スニペット (完全なプリセットの XML に追加してください)
<MediaFile> …
<Sources>
<Source
AudioStreamIndex="0">
<Clips>
<Clip
StartTime="00:00:30"
EndTime="00:00:41" />
</Clips>
</Source>
<Source
AudioStreamIndex="0"
MediaFile="%1%">
<Clips>
<Clip
StartTime="00:00:00"
EndTime="00:00:10" />
</Clips>
</Source>
<Source
AudioStreamIndex="0">
<Clips>
<Clip
StartTime="00:2:50"
EndTime="00:02:58" />
</Clips>
</Source>
</Sources>
</MediaFile>
ジョブを送信すると、完成したエンコード済みのアセットでは、ビデオの 3 つのセクションが結合されて 1 つのアセットとなります。このジョブの出力を確認するには、こちらのページから完成した MP4 をダウンロードしてください。
API の使用方法の詳細については、「ビデオのセグメントの結合」をご覧ください。
出力ファイル名のカスタマイズ
多くの場合、出力ファイル名を詳細に制御する必要があります。Azure Media Encoder では、出力ファイル名を制御できる一連のマクロと命名規則が提供されています。<Preset> 要素に @DefaultMediaOutputFileName 属性を設定することで、カスタマイズした命名テンプレートを指定できます。
たとえば、次のカスタム プリセットでは、マクロとカスタムの命名設定を組み合わせて命名テンプレートを制御する方法を示しています。
<Preset Version="5.0" DefaultMediaOutputFileName="{Original File Name}{Video Codec}{Video Bitrate}{Audio Codec}{Audio Bitrate}.{Default Extension}">
<MediaFile …>
複数のマクロを追加した場合、各マクロの間にアンダースコアが挿入されます。たとえば、上記の構成では、MyVideo_H264_4500kpbs_AAC_128kbps.mp4 のようなファイル名が生成されます。
サポートされているマクロは次のとおりです。
- {Original File Name}
- {Audio Bitrate}
- {Audio Codec}
- {Channel Count}
- {Default Extension}
- {Language}
- {StreamId}
- {Video Codec}
- {Video Bitrate}
API の詳細については、「Media Service Encoder の出力ファイル名の制御 (英語)」をご覧ください。
音声を含むオーディオ ファイル
主に音声を含む (音楽や効果音がほとんど使用されていない) コンテンツをエンコードする場合、既定のエンコーダー プリセットでは周囲の雑音が増幅されて、オーディオ トラックに不快な音として残る場合があります。
この望ましくない副作用を防ぐためには、プリセットのあまり知られていない設定を無効にする必要があります。その設定は、プリセットの <MediaFile> 要素の @NormalizeAudio 属性です。
既存のシステム プリセットのいずれかをコピーし、@NormalizeAudio 属性を削除するか、次のサンプル XML スニペットのように False を指定して、この設定を調整します (これらの変更例は完全な XML プリセットに追加する必要があります)。
<MediaFile
DeinterlaceMode="AutoPixelAdaptive"
ResizeQuality="Super"
NormalizeAudio="False"
AudioGainLevel="1"
VideoResizeMode="Stretch">
音声のみを含むオーディオ ファイルを処理し、API を使用してジョブを送信する方法の詳細については、「ほとんどが話し声であるプレゼンテーションのエンコード」をご覧ください。
MP4 ファイルのキャプションの保持
エンコード元の MP4 ファイルの基本ストリーム内で、H264 でエンコードされたストリームの SEI メッセージに EIA-608 および 708 データとしてキャプションが埋め込まれている場合、これらのキャプションを保持して新しくエンコードされた出力ファイルに渡すことができます。
これを実行するために、プリセットの <MediaFile> 要素の @ClosedCaptionSEIPassThrough 属性の設定が用意されています。この属性を “True” に設定することで、キャプションを保持して出力ファイルに渡すことができます。
これは、クライアントで CEA-608 キャプション データのネイティブ デコードをサポートする iOS などの HLS プロトコル デバイスにキャプションを配信する場合に非常に便利です。
<MediaFile
WindowsMediaProfileLanguage="en-US"
VideoResizeMode="Letterbox"
ClosedCaptionsSEIPassThrough="True">
現時点では、この機能は MP4 ファイル形式のソース ファイルのみをサポートしており、ソース基本ストリームは H264 でエンコードされています。また、このエンコード タスクでは、サブクリップや 2 つ以上のビデオの合成を実行しないでください。
まとめ
今回ご紹介したのは、Azure Media Encoder のお客様のために取り組んできた画期的な高機能のごく一部です。これまで影に隠れていた機能をいくつかご紹介でき、お客様自身のメディア アプリケーションやワークフローで優れたシナリオを実現するうえでお役立ていただけるようであれば幸いです。
エンコードを続ける中で有意義なご意見や機能に関するご要望が出てきましたら、MSDN の Azure Media Services フォーラムでぜひお知らせください。