MES プリセットをカスタマイズして高度なエンコードを実行するPerform advanced encoding by customizing MES presets

概要Overview

このトピックでは、Media Encoder Standard プリセットをカスタマイズする方法を説明します。This topic shows how to customize Media Encoder Standard presets. .NET を使ってエンコード タスクと、このタスクを実行するジョブを作成する方法については、「Media Encoder Standard を使用した高度なエンコード」を参照してください。The Encoding with Media Encoder Standard using custom presets topic shows how to use .NET to create an encoding task and a job that executes this task. プリセットをカスタマイズしたら、カスタム プリセットをエンコード タスクに指定します。Once you customize a preset, supply the custom presets to the encoding task.

注意

XML プリセットを使用する場合、下で示す XML サンプルのように要素の順序を保持するようにしてください (たとえば、KeyFrameInterval は SceneChangeDetection の前に来ます)。If using an XML preset, make sure to preserve the order of elements, as shown in XML samples below (for example, KeyFrameInterval should precede SceneChangeDetection).

このトピックでは、次のエンコード タスクを実行するカスタム プリセットを実演します。In this topic, the custom presets that perform the following encoding tasks are demonstrated.

相対サイズのサポートSupport for relative sizes

サムネイルを生成するときに、出力の幅と高さを常にピクセル単位で指定しなければならないというわけではありません。When generating thumbnails, you do not need to always specify output width and height in pixels. パーセント単位で指定することができます ([1%、…、100%] の範囲)。You can specify them in percentages, in the range [1%, …, 100%].

JSON プリセットJSON preset

"Width": "100%",
"Height": "100%"

XML プリセットXML preset

<Width>100%</Width>
<Height>100%</Height>

サムネイルを生成するGenerate thumbnails

このセクションでは、サムネイルを生成するプリセットをカスタマイズする方法を紹介します。This section shows how to customize a preset that generates thumbnails. 下に定義されているプリセットには、ファイルとサムネイルの生成に必要な情報をエンコードする方法に関する情報が含まれています。The preset defined below contains information on how you want to encode your file as well as information needed to generate thumbnails. こちらのセクションに記載されている MES プリセットを使用し、サムネイルを生成するコードを追加できます。You can take any of the MES presets documented this section and add code that generates thumbnails.

注意

単一ビットレートのビデオにエンコードする場合、次のプリセットの SceneChangeDetection 設定は true にのみ設定できます。The SceneChangeDetection setting in the following preset can only be set to true if you are encoding to a single bitrate video. マルチビットレートのビデオにエンコードする場合、 SceneChangeDetection を true に設定すると、エンコーダーからエラーが返されます。If you are encoding to a multi-bitrate video and set SceneChangeDetection to true, the encoder returns an error.

スキーマの詳細については、 こちら のトピックをご覧ください。For information about schema, see this topic.

必ず「 考慮事項 」セクションを確認してください。Make sure to review the Considerations section.

JSON プリセットJSON preset

{
  "Version": 1.0,
  "Codecs": [
    {
      "KeyFrameInterval": "00:00:02",
      "SceneChangeDetection": "true",
      "H264Layers": [
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 4500,
          "MaxBitrate": 4500,
          "BufferWindow": "00:00:05",
          "Width": 1280,
          "Height": 720,
          "ReferenceFrames": 3,
          "EntropyMode": "Cabac",
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "FrameRate": "0/1"

        }
      ],
      "Type": "H264Video"
    },
    {
      "JpgLayers": [
        {
          "Quality": 90,
          "Type": "JpgLayer",
          "Width": 640,
          "Height": 360
        }
      ],
      "Start": "{Best}",
      "Type": "JpgImage"
    },
    {
      "PngLayers": [
        {
          "Type": "PngLayer",
          "Width": 640,
          "Height": 360,
        }
      ],
      "Start": "00:00:01",
      "Step": "00:00:10",
      "Range": "00:00:58",
      "Type": "PngImage"
    },
    {
      "BmpLayers": [
        {
          "Type": "BmpLayer",
          "Width": 640,
          "Height": 360
        }
      ],
      "Start": "10%",
      "Step": "10%",
      "Range": "90%",
      "Type": "BmpImage"
    },
    {
      "Channels": 2,
      "SamplingRate": 48000,
      "Bitrate": 128,
      "Type": "AACAudio"
    }
  ],
  "Outputs": [
    {
      "FileName": "{Basename}_{Index}{Extension}",
      "Format": {
        "Type": "JpgFormat"
      }
    },
    {
      "FileName": "{Basename}_{Index}{Extension}",
      "Format": {
        "Type": "PngFormat"
      }
    },
    {
      "FileName": "{Basename}_{Index}{Extension}",
      "Format": {
        "Type": "BmpFormat"
      }
    },
    {
      "FileName": "{Basename}_{Width}x{Height}_{VideoBitrate}.mp4",
      "Format": {
        "Type": "MP4Format"
      }
    }
  ]
}

XML プリセットXML preset

<?xml version="1.0" encoding="utf-16"?>
<Preset xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.0" xmlns="http://www.windowsazure.com/media/encoding/Preset/2014/03">
  <Encoding>
    <H264Video>
      <KeyFrameInterval>00:00:02</KeyFrameInterval>
      <SceneChangeDetection>true</SceneChangeDetection>
      <H264Layers>
        <H264Layer>
          <Bitrate>4500</Bitrate>
          <Width>1280</Width>
          <Height>720</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>3</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cabac</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>4500</MaxBitrate>
        </H264Layer>
      </H264Layers>
    </H264Video>
    <AACAudio>
      <Profile>AACLC</Profile>
      <Channels>2</Channels>
      <SamplingRate>48000</SamplingRate>
      <Bitrate>128</Bitrate>
    </AACAudio>
    <JpgImage Start="{Best}">
      <JpgLayers>
        <JpgLayer>
          <Width>640</Width>
          <Height>360</Height>
          <Quality>90</Quality>
        </JpgLayer>
      </JpgLayers>
    </JpgImage>
    <BmpImage Start="10%" Step="10%" Range="90%">
      <BmpLayers>
        <BmpLayer>
          <Width>640</Width>
          <Height>360</Height>
        </BmpLayer>
      </BmpLayers>
    </BmpImage>
    <PngImage Start="00:00:01" Step="00:00:10" Range="00:00:58">
      <PngLayers>
        <PngLayer>
          <Width>640</Width>
          <Height>360</Height>
        </PngLayer>
      </PngLayers>
    </PngImage>
  </Encoding>
  <Outputs>
    <Output FileName="{Basename}_{Width}x{Height}_{VideoBitrate}.mp4">
      <MP4Format />
    </Output>
    <Output FileName="{Basename}_{Index}{Extension}">
      <JpgFormat />
    </Output>
    <Output FileName="{Basename}_{Index}{Extension}">
      <BmpFormat />
    </Output>
    <Output FileName="{Basename}_{Index}{Extension}">
      <PngFormat />
    </Output>
  </Outputs>
</Preset>

考慮事項Considerations

次の考慮事項が適用されます。The following considerations apply:

  • 明示的に Start、Step、Range でタイムスタンプを使用する場合、入力ソースは少なくとも 1 分であると仮定しています。The use of explicit timestamps for Start/Step/Range assumes that the input source is at least 1 minute long.
  • Jpg/Png/BmpImage 要素には、Start、Step、Range の各文字列属性があります。これらは次のように解釈できます。Jpg/Png/BmpImage elements have Start, Step, and Range string attributes – these can be interpreted as:

    • 負ではない整数の場合はフレーム番号 (例: "Start": "120")Frame Number if they are non-negative integers, for example "Start": "120",
    • % サフィックス付きで表現されている場合は、ソース期間に対する相対値 (例: "Start": "15%")Relative to source duration if expressed as %-suffixed, for example "Start": "15%", OR
    • HH:MM:SS… 形式で表現されている場合は、タイムスタンプ Timestamp if expressed as HH:MM:SS… (例: "Start": "00:01:00")format, for example "Start" : "00:01:00"

      必要に応じて、表記法を混在させたり、一致させたりすることができます。You can mix and match notations as you please.

      また、Start は特殊なマクロの {Best} もサポートしています。このマクロは、コンテンツの最初の "関連する" フレームを決定しようと試みます。注: (Start が {Best} に設定されている場合、Step と Range は無視されます)Additionally, Start also supports a special Macro:{Best}, which attempts to determine the first “interesting” frame of the content NOTE: (Step and Range are ignored when Start is set to {Best})

    • 既定: Start:{Best}Defaults: Start:{Best}
  • 各画像形式の出力形式は明示的に指定する必要があります (Jpg/Png/BmpFormat)。Output format needs to be explicitly provided for each Image format: Jpg/Png/BmpFormat. 指定されている場合、MES は JpgVideo を JpgFormat などに対応付けます。When present, MES matches JpgVideo to JpgFormat and so on. OutputFormat には新しい画像コーデック固有のマクロである {Index} が導入されました。このマクロは、画像出力形式を指定する場合に (1 度だけ) 指定する必要があります。OutputFormat introduces a new image-codec specific Macro: {Index}, which needs to be present (once and only once) for image output formats.

動画をトリミングする (クリッピング)Trim a video (clipping)

このセクションでは、エンコーダー プリセットを変更し、入力がいわゆる中間ファイルまたはオンデマンド ファイルの入力動画をクリッピングまたはトリミングする方法について説明します。This section talks about modifying the encoder presets to clip or trim the input video where the input is a so-called mezzanine file or on-demand file. エンコーダーを使用して、ライブ ストリームからキャプチャまたはアーカイブされた資産をクリッピングまたはトリミングすることもできます。詳細については、こちらのブログをご覧ください。The encoder can also be used to clip or trim an asset, which is captured or archived from a live stream – the details for this are available in this blog.

動画をトリミングするには、こちらのセクションに記載されている MES プリセットを利用し、Sources 要素を変更します (下記を参照)。To trim your videos, you can take any of the MES presets documented this section and modify the Sources element (as shown below). StartTime の値は、入力ビデオの絶対タイムスタンプと一致している必要があります。The value of StartTime needs to match the absolute timestamps of the input video. たとえば、入力ビデオの最初のフレームのタイムスタンプが 12:00:10.000 の場合、StartTime は 12:00:10.000 以降でなければなりません。For example, if the first frame of the input video has a timestamp of 12:00:10.000, then StartTime should be at least 12:00:10.000 and greater. 次の例では、入力ビデオの開始タイムスタンプは 0 であると想定しています。In the example below, we assume that the input video has a starting timestamp of zero. Sources はプリセットの先頭に配置する必要があります。Sources should be placed at the beginning of the preset.

JSON プリセットJSON preset

{
  "Version": 1.0,
  "Sources": [
    {
      "StartTime": "00:00:04",
      "Duration": "00:00:16"
    }
  ],
  "Codecs": [
    {
      "KeyFrameInterval": "00:00:02",
      "StretchMode": "AutoSize",
      "H264Layers": [
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 3400,
          "MaxBitrate": 3400,
          "BufferWindow": "00:00:05",
          "Width": 1280,
          "Height": 720,
          "BFrames": 3,
          "ReferenceFrames": 3,
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "FrameRate": "0/1"
        },
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 2250,
          "MaxBitrate": 2250,
          "BufferWindow": "00:00:05",
          "Width": 960,
          "Height": 540,
          "BFrames": 3,
          "ReferenceFrames": 3,
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "FrameRate": "0/1"
        },
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 1500,
          "MaxBitrate": 1500,
          "BufferWindow": "00:00:05",
          "Width": 960,
          "Height": 540,
          "BFrames": 3,
          "ReferenceFrames": 3,
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "FrameRate": "0/1"
        },
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 1000,
          "MaxBitrate": 1000,
          "BufferWindow": "00:00:05",
          "Width": 640,
          "Height": 360,
          "BFrames": 3,
          "ReferenceFrames": 3,
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "FrameRate": "0/1"
        },
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 650,
          "MaxBitrate": 650,
          "BufferWindow": "00:00:05",
          "Width": 640,
          "Height": 360,
          "BFrames": 3,
          "ReferenceFrames": 3,
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "FrameRate": "0/1"
        },
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 400,
          "MaxBitrate": 400,
          "BufferWindow": "00:00:05",
          "Width": 320,
          "Height": 180,
          "BFrames": 3,
          "ReferenceFrames": 3,
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "FrameRate": "0/1"
        }
      ],
      "Type": "H264Video"
    },
    {
      "Profile": "AACLC",
      "Channels": 2,
      "SamplingRate": 48000,
      "Bitrate": 128,
      "Type": "AACAudio"
    }
  ],
  "Outputs": [
    {
      "FileName": "{Basename}_{Width}x{Height}_{VideoBitrate}.mp4",
      "Format": {
        "Type": "MP4Format"
      }
    }
  ]
}

XML プリセットXML preset

動画をトリミングするには、 ここ に記載されている MES プリセットを利用し、 Sources 要素を変更します (下記を参照)。To trim your videos, you can take any of the MES presets documented here and modify the Sources element (as shown below).

<?xml version="1.0" encoding="utf-16"?>
<Preset xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.0" xmlns="http://www.windowsazure.com/media/encoding/Preset/2014/03">
  <Sources>
    <Source StartTime="PT4S" Duration="PT14S"/>
  </Sources>
  <Encoding>
    <H264Video>
      <KeyFrameInterval>00:00:02</KeyFrameInterval>
      <H264Layers>
        <H264Layer>
          <Bitrate>3400</Bitrate>
          <Width>1280</Width>
          <Height>720</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>3</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cabac</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>3400</MaxBitrate>
        </H264Layer>
        <H264Layer>
          <Bitrate>2250</Bitrate>
          <Width>960</Width>
          <Height>540</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>3</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cabac</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>2250</MaxBitrate>
        </H264Layer>
        <H264Layer>
          <Bitrate>1500</Bitrate>
          <Width>960</Width>
          <Height>540</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>3</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cabac</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>1500</MaxBitrate>
        </H264Layer>
        <H264Layer>
          <Bitrate>1000</Bitrate>
          <Width>640</Width>
          <Height>360</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>3</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cabac</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>1000</MaxBitrate>
        </H264Layer>
        <H264Layer>
          <Bitrate>650</Bitrate>
          <Width>640</Width>
          <Height>360</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>3</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cabac</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>650</MaxBitrate>
        </H264Layer>
        <H264Layer>
          <Bitrate>400</Bitrate>
          <Width>320</Width>
          <Height>180</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>3</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cabac</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>400</MaxBitrate>
        </H264Layer>
      </H264Layers>
    </H264Video>
    <AACAudio>
      <Profile>AACLC</Profile>
      <Channels>2</Channels>
      <SamplingRate>48000</SamplingRate>
      <Bitrate>128</Bitrate>
    </AACAudio>
  </Encoding>
  <Outputs>
    <Output FileName="{Basename}_{Width}x{Height}_{VideoBitrate}.mp4">
      <MP4Format />
    </Output>
  </Outputs>
</Preset>

オーバーレイを作成するCreate an overlay

Media Encoder Standard では、画像を既存の動画に重ね合わせることができます。The Media Encoder Standard allows you to overlay an image onto an existing video. 現在サポートされている形式は png、jpg、gif、bmp です。Currently, the following formats are supported: png, jpg, gif, and bmp. 下に定義されているプリセットはビデオ オーバーレイの基本例です。The preset defined below is a basic example of a video overlay.

プリセット ファイルの定義に加え、資産内のどのファイルがオーバーレイ画像であるか、また画像を重ね合わせるソース動画であるかを Media Services に認識させる必要もあります。In addition to defining a preset file, you also have to let Media Services know which file in the asset is the overlay image and which file is the source video onto which you want to overlay the image. ビデオ ファイルは プライマリ ファイルである必要があります。The video file has to be the primary file.

.NET を使用する場合は、次の 2 つの関数をこちらのトピックで定義されている .NET の例に追加します。If you are using .NET, add the following two functions to the .NET example defined in this topic. UploadMediaFilesFromFolder 関数は、フォルダーからファイルをアップロードし (BigBuckBunny.mp4、Image001.png など)、mp4 ファイルを資産内のプライマリ ファイルとして設定します。The UploadMediaFilesFromFolder function uploads files from a folder (for example, BigBuckBunny.mp4 and Image001.png) and sets the mp4 file to be the primary file in the asset. EncodeWithOverlay 関数は、渡されたカスタム プリセット ファイル (下記のプリセットなど) を使用して、エンコード タスクを作成します。The EncodeWithOverlay function uses the custom preset file that was passed to it (for example, the preset that follows) to create the encoding task.

static public IAsset UploadMediaFilesFromFolder(string folderPath)
{
    IAsset asset = _context.Assets.CreateFromFolder(folderPath, AssetCreationOptions.None);

    foreach (var af in asset.AssetFiles)
    {
        // The following code assumes 
        // you have an input folder with one MP4 and one overlay image file.
        if (af.Name.Contains(".mp4"))
            af.IsPrimary = true;
        else
            af.IsPrimary = false;

        af.Update();
    }

    return asset;
}

static public IAsset EncodeWithOverlay(IAsset assetSource, string customPresetFileName)
{
    // Declare a new job.
    IJob job = _context.Jobs.Create("Media Encoder Standard Job");
    // Get a media processor reference, and pass to it the name of the 
    // processor to use for the specific task.
    IMediaProcessor processor = GetLatestMediaProcessorByName("Media Encoder Standard");

    // Load the XML (or JSON) from the local file.
    string configuration = File.ReadAllText(customPresetFileName);

    // Create a task
    ITask task = job.Tasks.AddNew("Media Encoder Standard encoding task",
        processor,
        configuration,
        TaskOptions.None);

    // Specify the input assets to be encoded.
    // This asset contains a source file and an overlay file.
    task.InputAssets.Add(assetSource);

    // Add an output asset to contain the results of the job. 
    task.OutputAssets.AddNew("Output asset",
        AssetCreationOptions.None);

    job.StateChanged += new EventHandler<JobStateChangedEventArgs>(JobStateChanged);
    job.Submit();
    job.GetExecutionProgressTask(CancellationToken.None).Wait();

    return job.OutputMediaAssets[0];
}

注意

現時点での制限事項:Current limitations:

オーバーレイの不透明設定には対応していません。The overlay opacity setting is not supported.

ソース ビデオ ファイルとオーバーレイ画像ファイルを同じ資産に格納する必要があります。また、ビデオ ファイルをその資産でプライマリ ファイルとして設定する必要があります。Your source video file and the overlay image file have to be in the same asset, and the video file needs to be set as the primary file in this asset.

JSON プリセットJSON preset

{
  "Version": 1.0,
  "Sources": [
    {
      "Streams": [],
      "Filters": {
        "VideoOverlay": {
          "Position": {
            "X": 100,
            "Y": 100,
            "Width": 100,
            "Height": 50
          },
          "AudioGainLevel": 0.0,
          "MediaParams": [
            {
              "OverlayLoopCount": 1
            },
            {
              "IsOverlay": true,
              "OverlayLoopCount": 1,
              "InputLoop": true
            }
          ],
          "Source": "Image001.png",
          "Clip": {
            "Duration": "00:00:05"
          },
          "FadeInDuration": {
            "Duration": "00:00:01"
          },
          "FadeOutDuration": {
            "StartTime": "00:00:03",
            "Duration": "00:00:04"
          }
        }
      },
      "Pad": true
    }
  ],
  "Codecs": [
    {
      "KeyFrameInterval": "00:00:02",
      "H264Layers": [
        {
          "Profile": "Auto",
          "Level": "auto",
          "Bitrate": 1045,
          "MaxBitrate": 1045,
          "BufferWindow": "00:00:05",
          "ReferenceFrames": 3,
          "EntropyMode": "Cavlc",
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "Width": "640",
          "Height": "360",
          "FrameRate": "0/1"
        }
      ],
      "Type": "H264Video"
    },
    {
      "Type": "CopyAudio"
    }
  ],
  "Outputs": [
    {
      "FileName": "{Basename}{Extension}",
      "Format": {
        "Type": "MP4Format"
      }
    }
  ]
}

XML プリセットXML preset

<?xml version="1.0" encoding="utf-16"?>
<Preset xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.0" xmlns="http://www.windowsazure.com/media/encoding/Preset/2014/03">
  <Sources>
    <Source>
      <Streams />
      <Filters>
        <VideoOverlay>
          <Source>Image001.png</Source>
          <Clip Duration="PT5S" />
          <FadeInDuration Duration="PT1S" />
          <FadeOutDuration StartTime="PT3S" Duration="PT4S" />
          <Position X="100" Y="100" Width="100" Height="50" />
          <Opacity>0</Opacity>
          <AudioGainLevel>0</AudioGainLevel>
          <MediaParams>
            <MediaParam>
              <IsOverlay>false</IsOverlay>
              <OverlayLoopCount>1</OverlayLoopCount>
              <InputLoop>false</InputLoop>
            </MediaParam>
            <MediaParam>
              <IsOverlay>true</IsOverlay>
              <OverlayLoopCount>1</OverlayLoopCount>
              <InputLoop>true</InputLoop>
            </MediaParam>
          </MediaParams>
        </VideoOverlay>
      </Filters>
      <Pad>true</Pad>
    </Source>
  </Sources>
  <Encoding>
    <H264Video>
      <KeyFrameInterval>00:00:02</KeyFrameInterval>
      <H264Layers>
        <H264Layer>
          <Bitrate>1045</Bitrate>
          <Width>640</Width>
          <Height>360</Height>
          <FrameRate>0/1</FrameRate>
          <Profile>Auto</Profile>
          <Level>auto</Level>
          <BFrames>0</BFrames>
          <ReferenceFrames>3</ReferenceFrames>
          <Slices>0</Slices>
          <AdaptiveBFrame>true</AdaptiveBFrame>
          <EntropyMode>Cavlc</EntropyMode>
          <BufferWindow>00:00:05</BufferWindow>
          <MaxBitrate>1045</MaxBitrate>
        </H264Layer>
      </H264Layers>
    </H264Video>
    <CopyAudio />
  </Encoding>
  <Outputs>
    <Output FileName="{Basename}{Extension}">
      <MP4Format />
    </Output>
  </Outputs>
</Preset>

音声が入力されない場合、無音オーディオ トラックを挿入するInsert a silent audio track when input has no audio

既定では、映像のみで音声の入っていない入力をエンコーダーに送信すると、映像データのみが含まれたファイルが出力資産に含まれます。By default, if you send an input to the encoder that contains only video, and no audio, then the output asset contains files that contain only video data. プレーヤーによっては、このような出力ストリームを処理できないことがあります。Some players may not be able to handle such output streams. そのような場合、この設定を利用すれば、無音のオーディオ トラックを出力に追加するようにエンコーダーに強制できます。You can use this setting to force the encoder to add a silent audio track to the output in that scenario.

入力に音声が入っていないとき、無音オーディオ トラックが含まれる資産を生成するようにエンコーダーに強制するには、"InsertSilenceIfNoAudio" 値を指定します。To force the encoder to produce an asset that contains a silent audio track when input has no audio, specify the "InsertSilenceIfNoAudio" value.

こちらのセクションに記載されている MES プリセットを使用し、次のように変更します。You can take any of the MES presets documented in this section, and make the following modification:

JSON プリセットJSON preset

{
  "Channels": 2,
  "SamplingRate": 44100,
  "Bitrate": 96,
  "Type": "AACAudio",
  "Condition": "InsertSilenceIfNoAudio"
}

XML プリセットXML preset

<AACAudio Condition="InsertSilenceIfNoAudio">
  <Channels>2</Channels>
  <SamplingRate>44100</SamplingRate>
  <Bitrate>96</Bitrate>
</AACAudio>

自動インターレース解除を無効にするDisable auto de-interlacing

コンテンツのインターレース解除を自動的に行う場合は、何もする必要はありません。Customers don’t need to do anything if they like the interlace contents to be automatically de-interlaced. 自動インターレース解除がオンになっていれば (既定値)、MES がインターレース フレームを自動で検出し、解除処理を行います (インターレースとしてマークされているフレームのみが処理されます)。When the auto de-interlacing is on (default) the MES does the auto detection of interlaced frames and only de-interlaces frames marked as interlaced.

自動インターレース解除はオフにすることもできますが、You can turn the auto de-interlacing off. この設定は変更しないことをお勧めします。This option is not recommended.

JSON プリセットJSON preset

"Sources": [
{
 "Filters": {
    "Deinterlace": {
      "Mode": "Off"
    }
  },
}
]

XML プリセットXML preset

<Sources>
<Source>
  <Filters>
    <Deinterlace>
      <Mode>Off</Mode>
    </Deinterlace>
  </Filters>
</Source>
</Sources>

オーディオのみのプリセットAudio-only presets

このセクションでは、2 つのオーディオのみの MES プリセット (AAC Audio と AAC Good Quality Audio) を示します。This section demonstrates two audio-only MES presets: AAC Audio and AAC Good Quality Audio.

AAC AudioAAC Audio

{
  "Version": 1.0,
  "Codecs": [
    {
      "Profile": "AACLC",
      "Channels": 2,
      "SamplingRate": 48000,
      "Bitrate": 128,
      "Type": "AACAudio"
    }
  ],
  "Outputs": [
    {
      "FileName": "{Basename}_AAC_{AudioBitrate}.mp4",
      "Format": {
        "Type": "MP4Format"
      }
    }
  ]
}

AAC Good Quality AudioAAC Good Quality Audio

{
  "Version": 1.0,
  "Codecs": [
    {
      "Profile": "AACLC",
      "Channels": 2,
      "SamplingRate": 48000,
      "Bitrate": 192,
      "Type": "AACAudio"
    }
  ],
  "Outputs": [
    {
      "FileName": "{Basename}_AAC_{AudioBitrate}.mp4",
      "Format": {
        "Type": "MP4Format"
      }
    }
  ]
}

複数のビデオ ファイルを連結するConcatenate two or more video files

複数のビデオ ファイルを連結するプリセットを生成する方法の例を次に示します。The following example illustrates how you can generate a preset to concatenate two or more video files. 最も一般的なシナリオは、ヘッダーまたはトレーラーをメイン ビデオに追加する場合です。The most common scenario is when you want to add a header or a trailer to the main video. 主な用途は、編集対象の複数のビデオ ファイルがプロパティ (ビデオの解像度、フレーム レート、オーディオ トラック数など) を共有している場合です。The intended use is when the video files being edited together share properties (video resolution, frame rate, audio track count, etc.). フレーム レートやオーディオ トラック数が異なるビデオを混在させないように注意してください。You should take care not to mix videos of different frame rates, or with different number of audio tracks.

注意

連結機能は現在、入力のビデオ クリップが解像度やフレーム レートの点で整合性があることを前提とした設計になっています。The current design of the concatenation feature expects that the input video clips are consistent in terms of resolution, frame rate etc.

要件と考慮事項Requirements and considerations

  • 入力ビデオのオーディオ トラック数の上限は 1 つです。Input videos should only have one audio track.
  • 入力ビデオはすべて同じフレーム レートである必要があります。Input videos should all have the same frame rate.
  • ビデオを別の資産にアップロードし、各資産でプライマリ ファイルとしてビデオを設定する必要があります。You must upload your videos into separate assets and set the videos as the primary file in each asset.
  • ビデオの再生時間を把握している必要があります。You need to know the duration of your videos.
  • 次のプリセット例では、すべての入力ビデオがゼロのタイムスタンプで始まると想定されています。The preset examples below assumes that all the input videos start with a timestamp of zero. ビデオの開始タイムスタンプが異なる場合、通常のライブ アーカイブの場合と同様に、StartTime 値を変更する必要があります。You need to modify the StartTime values if the videos have different starting timestamp, as is typically the case with live archives.
  • JSON プリセットは、入力資産の AssetID 値の明示的な参照を作成します。The JSON preset makes explicit references to the AssetID values of the input assets.
  • サンプル コードでは、JSON プリセットがローカル ファイル ("C:\supportFiles\preset.json" など) に保存されていると想定されています。The sample code assumes that the JSON preset has been saved to a local file, such as "C:\supportFiles\preset.json". また、2 つの資産が 2 つのビデオ ファイルをアップロードして作成されたこと、結果の AssetID 値を知っていることも想定されています。It also assumes that two assets have been created by uploading two video files, and that you know the resultant AssetID values.
  • このコード スニペットと JSON プリセットは、2 つのビデオ ファイルを連結する例です。The code snippet and JSON preset shows an example of concatenating two video files. 次の方法で、複数のビデオに拡張することができます。You can extend it to more than two videos by:

    1. task.InputAssets.Add() を繰り返し呼び出して複数のビデオを順に追加する。Calling task.InputAssets.Add() repeatedly to add more videos, in order.
    2. 同じ順序でエントリを追加して、JSON の対応する "Sources" 要素を編集する。Making corresponding edits to the "Sources" element in the JSON, by adding more entries, in the same order.

.NET コード.NET code

IAsset asset1 = _context.Assets.Where(asset => asset.Id == "nb:cid:UUID:606db602-efd7-4436-97b4-c0b867ba195b").FirstOrDefault();
IAsset asset2 = _context.Assets.Where(asset => asset.Id == "nb:cid:UUID:a7e2b90f-0565-4a94-87fe-0a9fa07b9c7e").FirstOrDefault();

// Declare a new job.
IJob job = _context.Jobs.Create("Media Encoder Standard Job for Concatenating Videos");
// Get a media processor reference, and pass to it the name of the
// processor to use for the specific task.
IMediaProcessor processor = GetLatestMediaProcessorByName("Media Encoder Standard");

// Load the XML (or JSON) from the local file.
string configuration = File.ReadAllText(@"c:\supportFiles\preset.json");

// Create a task
ITask task = job.Tasks.AddNew("Media Encoder Standard encoding task",
    processor,
    configuration,
    TaskOptions.None);

// Specify the input videos to be concatenated (in order).
task.InputAssets.Add(asset1);
task.InputAssets.Add(asset2);
// Add an output asset to contain the results of the job.
// This output is specified as AssetCreationOptions.None, which
// means the output asset is not encrypted.
task.OutputAssets.AddNew("Output asset",
    AssetCreationOptions.None);

job.StateChanged += new EventHandler<JobStateChangedEventArgs>(JobStateChanged);
job.Submit();
job.GetExecutionProgressTask(CancellationToken.None).Wait();

JSON プリセットJSON preset

連結する資産の ID と、各ビデオの適切な時間セグメントを使用して、カスタム プリセットを更新します。Update your custom preset with ids of the assets that you want to concatenate, and with the appropriate time segment for each video.

{
  "Version": 1.0,
  "Sources": [
    {
      "AssetID": "606db602-efd7-4436-97b4-c0b867ba195b",
      "StartTime": "00:00:01",
      "Duration": "00:00:15"
    },
    {
      "AssetID": "a7e2b90f-0565-4a94-87fe-0a9fa07b9c7e",
      "StartTime": "00:00:02",
      "Duration": "00:00:05"
    }
  ],
  "Codecs": [
    {
      "KeyFrameInterval": "00:00:02",
      "SceneChangeDetection": true,
      "H264Layers": [
        {
          "Level": "auto",
          "Bitrate": 1800,
          "MaxBitrate": 1800,
          "BufferWindow": "00:00:05",
          "BFrames": 3,
          "ReferenceFrames": 3,
          "AdaptiveBFrame": true,
          "Type": "H264Layer",
          "Width": "640",
          "Height": "360",
          "FrameRate": "0/1"
        }
      ],
      "Type": "H264Video"
    },
    {
      "Channels": 2,
      "SamplingRate": 48000,
      "Bitrate": 128,
      "Type": "AACAudio"
    }
  ],
  "Outputs": [
    {
      "FileName": "{Basename}_{Width}x{Height}_{VideoBitrate}.mp4",
      "Format": {
        "Type": "MP4Format"
      }
    }
  ]
}

Media Encoder Standard を使用してビデオをトリミングするCrop videos with Media Encoder Standard

Media Encoder Standard を使用してビデオをトリミングする 」をご覧ください。See the Crop videos with Media Encoder Standard topic.

入力に映像が含まれていないときにビデオ トラックを挿入するInsert a video track when input has no video

既定では、音声のみで映像の入っていない入力をエンコーダーに送信すると、音声データのみが含まれたファイルが出力資産に含まれます。By default, if you send an input to the encoder that contains only audio, and no video, then the output asset contains files that contain only audio data. Azure Media Player ( こちらを参照) など、プレイヤーによっては、このようなストリームを処理できないことがあります。Some players, including Azure Media Player (see this) may not be able to handle such streams. その場合、この設定を使用することで、モノクロのビデオ トラックを出力に追加するようエンコーダーに強制できます。You can use this setting to force the encoder to add a monochrome video track to the output in that scenario.

注意

出力ビデオ トラックを挿入するようエンコーダーに強制すると、出力資産のサイズが増えるため、エンコード タスクのコストが発生します。Forcing the encoder to insert an output video track increases the size of the output Asset, and thereby the cost incurred for the encoding Task. テストを実行して、この増加が月額料金に及ぼす影響がごくわずかであることを確認してください。You should run tests to verify that this resultant increase has only a modest impact on your monthly charges.

最も低いビットレートでのみビデオを挿入するInserting video at only the lowest bitrate

"H264 複数ビットレート 720p" などの複数ビットレート エンコード プリセットを使用して、ビデオ ファイルと音声のみのファイルが混在する、ストリーミングの入力カタログ全体をエンコードするとします。Suppose you are using a multiple bitrate encoding preset such as "H264 Multiple Bitrate 720p" to encode your entire input catalog for streaming, which contains a mix of video files and audio-only files. このシナリオでは、入力に映像が含まれていないときに、すべての出力ビットレートでビデオを挿入するのではなく、最も低いビットレートでのみモノクロのビデオ トラックを挿入するようエンコーダーに強制できます。In this scenario, when the input has no video, you may want to force the encoder to insert a monochrome video track at just the lowest bitrate, as opposed to inserting video at every output bitrate. これを実現するには、InsertBlackIfNoVideoBottomLayerOnly フラグを使用する必要があります。To achieve this, you need to use the InsertBlackIfNoVideoBottomLayerOnly flag.

こちらのセクションに記載されている MES プリセットを使用し、次のように変更します。You can take any of the MES presets documented in this section, and make the following modification:

JSON プリセットJSON preset

{
      "KeyFrameInterval": "00:00:02",
      "StretchMode": "AutoSize",
      "Condition": "InsertBlackIfNoVideoBottomLayerOnly",
      "H264Layers": [
      …
      ]
}

XML プリセットXML preset

XML を使用する場合、Condition="InsertBlackIfNoVideoBottomLayerOnly" を H264Video 要素の属性として使用し、Condition="InsertSilenceIfNoAudio" を AACAudio の属性として使用します。When using XML, use Condition="InsertBlackIfNoVideoBottomLayerOnly" as an attribute to the H264Video element and Condition="InsertSilenceIfNoAudio" as an attribute to AACAudio.

. . .
<Encoding>
  <H264Video Condition="InsertBlackIfNoVideoBottomLayerOnly">
    <KeyFrameInterval>00:00:02</KeyFrameInterval>
    <SceneChangeDetection>true</SceneChangeDetection>
    <StretchMode>AutoSize</StretchMode>
    <H264Layers>
      <H264Layer>
        . . .
      </H264Layer>
    </H264Layers>
    <Chapters />
  </H264Video>
  <AACAudio Condition="InsertSilenceIfNoAudio">
    <Profile>AACLC</Profile>
    <Channels>2</Channels>
    <SamplingRate>48000</SamplingRate>
    <Bitrate>128</Bitrate>
  </AACAudio>
</Encoding>
. . .

すべての出力ビットレートでビデオを挿入するInserting video at all output bitrates

"H264 複数ビットレート 720p" などの複数ビットレート エンコード プリセットを使用して、ビデオ ファイルと音声のみのファイルが混在する、ストリーミングの入力カタログ全体をエンコードするとします。Suppose you are using a multiple bitrate encoding preset such as "H264 Multiple Bitrate 720p to encode your entire input catalog for streaming, which contains a mix of video files and audio-only files. このシナリオでは、入力に映像が含まれていないときに、すべての出力ビットレートでモノクロのビデオ トラックを挿入するようエンコーダーに強制できます。In this scenario, when the input has no video, you may want to force the encoder to insert a monochrome video track at all the output bitrates. これにより、ビデオ トラックとオーディオ トラックの数に関して、出力資産がすべて均一になります。This ensures that your output Assets are all homogenous with respect to number of video tracks and audio tracks. これを実現には、"InsertBlackIfNoVideo" フラグを指定する必要があります。To achieve this, you need to specify the "InsertBlackIfNoVideo" flag.

こちらのセクションに記載されている MES プリセットを使用し、次のように変更します。You can take any of the MES presets documented in this section, and make the following modification:

JSON プリセットJSON preset

{
      "KeyFrameInterval": "00:00:02",
      "StretchMode": "AutoSize",
      "Condition": "InsertBlackIfNoVideo",
      "H264Layers": [
      …
      ]
}

XML プリセットXML preset

XML を使用する場合、Condition="InsertBlackIfNoVideo" を H264Video 要素の属性として使用し、Condition="InsertSilenceIfNoAudio" を AACAudio の属性として使用します。When using XML, use Condition="InsertBlackIfNoVideo" as an attribute to the H264Video element and Condition="InsertSilenceIfNoAudio" as an attribute to AACAudio.

. . .
<Encoding>
  <H264Video Condition="InsertBlackIfNoVideo">
    <KeyFrameInterval>00:00:02</KeyFrameInterval>
    <SceneChangeDetection>true</SceneChangeDetection>
    <StretchMode>AutoSize</StretchMode>
    <H264Layers>
      <H264Layer>
        . . .
      </H264Layer>
    </H264Layers>
    <Chapters />
  </H264Video>
  <AACAudio Condition="InsertSilenceIfNoAudio">
    <Profile>AACLC</Profile>
    <Channels>2</Channels>
    <SamplingRate>48000</SamplingRate>
    <Bitrate>128</Bitrate>
  </AACAudio>
</Encoding>
. . .  

ビデオを回転させるRotate a video

Media Encoder Standard は、0/90/180/270 の角度による回転をサポートしています。The Media Encoder Standard supports rotation by angles of 0/90/180/270. 既定の動作は "自動" であり、この場合は受信するビデオ ファイルの回転メタデータの検出と、それに対する補正を試みます。The default behavior is "Auto", where it tries to detect the rotation metadata in the incoming video file and compensate for it. こちらのセクションに定義されているいずれかのプリセットに次の Sources 要素を含めます。Include the following Sources element to one of the presets defined in this section:

JSON プリセットJSON preset

"Sources": [
{
  "Streams": [],
  "Filters": {
    "Rotation": "90"
  }
}
],
"Codecs": [

...

XML プリセットXML preset

<Sources>
       <Source>
      <Streams />
      <Filters>
        <Rotation>90</Rotation>
      </Filters>
    </Source>
</Sources>

また、回転の補正がトリガーされた場合にエンコーダーでプリセット内の Width および Height 設定がどのように解釈されるかについて、詳しくはこちらのトピックを参照してください。Also, see this topic for more information on how the encoder interprets the Width and Height settings in the preset, when rotation compensation is triggered.

入力ビデオ内に回転メタデータが存在する場合、それを無視するには、値 "0" を使用してエンコーダーに示します。You can use the value "0" to indicate to the encoder to ignore rotation metadata, if present, in the input video.

Media Services のラーニング パスMedia Services learning paths

Azure Media Services のラーニング パスについて読む。Read about the Azure Media Services learning paths:

フィードバックの提供Provide feedback

フィードバック フォーラムでは、Azure Media Services の改善方法について、フィードバックの提供や提案を行うことができます。Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. また、次のカテゴリのいずれかをクリックすると、そのカテゴリのフォーラムに直接アクセスすることもできます。You also can go directly to one of the following categories:

関連項目See Also

Media Services Encoding の概要Media Services Encoding Overview