Media Encoder Standard のプリセットのカスタマイズCustomizing Media Encoder Standard presets

概要Overview

このトピックでは、Media Encoder Standard (MES) をカスタム プリセットと共に使用して高度なエンコード タスクを実行する方法を紹介します。This topic shows how to perform advanced encoding with Media Encoder Standard (MES) using a custom preset. また、.NET を使用して、エンコード タスクとそのタスクを実行するジョブを作成します。The topic uses .NET to create an encoding task and a job that executes this task.

このトピックでは、H264 Multiple Bitrate 720p プリセットを取得してレイヤーの数を減らすことによってプリセットをカスタマイズする方法を説明します。In this topic you will see how to customize a preset by taking the H264 Multiple Bitrate 720p preset and reducing the number of layers. Media Encoder Standard のプリセットのカスタマイズのトピックでは、高度なエンコード タスクを実行するために使用できるカスタム プリセットを示しています。The Customizing Media Encoder Standard presets topic demonstrates custom presets that can be used to perform advanced encoding tasks.

MES プリセットのカスタマイズ Customizing a MES preset

元のプリセットOriginal preset

H264 Multiple Bitrate 720p」のトピックで定義されている JSON を、拡張子 .json を持つファイルに保存します。Save the JSON defined in the H264 Multiple Bitrate 720p topic in some file with .json extension. たとえば、CustomPreset_JSON.json のようにします。For example, CustomPreset_JSON.json.

カスタマイズしたプリセットCustomized preset

CustomPreset_JSON.json ファイルを開いて最初の 3 つのレイヤーを H264Layers から削除すると、ファイルは次のようになります。Open the CustomPreset_JSON.json file and remove first three layers from H264Layers so your file looks like this.

{  
  "Version": 1.0,  
  "Codecs": [  
    {  
      "KeyFrameInterval": "00:00:02",  
      "H264Layers": [  
        {  
          "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"  
      }  
    }  
  ]  
}  

Media Services .NET SDK を使用したエンコードEncoding with Media Services .NET SDK

次のコード サンプルでは、Media Services SDK を使用して次のタスクを実行します。The following code example uses Media Services .NET SDK to perform the following tasks:

  • エンコード ジョブを作成します。Create an encoding job.
  • Media Encoder Standard エンコーダーの参照を取得します。Get a reference to the Media Encoder Standard encoder.
  • 前のセクションで作成したカスタム JSON プリセットを読み込みます。Load the custom JSON preset that you created in the previous section.

      // Load the JSON from the local file.
      string configuration = File.ReadAllText(fileName);  
    
  • エンコード タスクをジョブに追加します。Add an encoding task to the job.

  • エンコードする入力資産を指定します。Specify the input asset to be encoded.
  • エンコードされた資産が含まれる出力資産を作成します。Create an output asset that will contain the encoded asset.
  • ジョブの進行状況を確認するイベント ハンドラーを追加します。Add an event handler to check the job progress.
  • ジョブを送信します。Submit the job.

Visual Studio プロジェクトの作成と構成Create and configure a Visual Studio project

.NET を使用した Media Services 開発」の説明に従って、開発環境をセットアップし、app.config ファイルに接続情報を指定します。Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

Example

using System;
using System.Configuration;
using System.IO;
using System.Linq;
using Microsoft.WindowsAzure.MediaServices.Client;
using System.Threading;

namespace CustomizeMESPresests
{
    class Program
    {
    // Read values from the App.config file.
    private static readonly string _AADTenantDomain =
    ConfigurationManager.AppSettings["AADTenantDomain"];
    private static readonly string _RESTAPIEndpoint =
    ConfigurationManager.AppSettings["MediaServiceRESTAPIEndpoint"];

    // Field for service context.
    private static CloudMediaContext _context = null;

    private static readonly string _mediaFiles =
        Path.GetFullPath(@"../..\Media");

    private static readonly string _singleMP4File =
        Path.Combine(_mediaFiles, @"BigBuckBunny.mp4");

    static void Main(string[] args)
    {
        var tokenCredentials = new AzureAdTokenCredentials(_AADTenantDomain, AzureEnvironments.AzureCloudEnvironment);
        var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

        _context = new CloudMediaContext(new Uri(_RESTAPIEndpoint), tokenProvider);

        // Get an uploaded asset.
        var asset = _context.Assets.FirstOrDefault();

        // Encode and generate the output using custom presets.
        EncodeToAdaptiveBitrateMP4Set(asset);

        Console.ReadLine();
    }

    static public IAsset EncodeToAdaptiveBitrateMP4Set(IAsset asset)
    {
        // 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("CustomPreset_JSON.json");

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

        // Specify the input asset to be encoded.
        task.InputAssets.Add(asset);
        // 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();

        return job.OutputMediaAssets[0];
    }

    private static void JobStateChanged(object sender, JobStateChangedEventArgs e)
    {
        Console.WriteLine("Job state changed event:");
        Console.WriteLine("  Previous state: " + e.PreviousState);
        Console.WriteLine("  Current state: " + e.CurrentState);
        switch (e.CurrentState)
        {
        case JobState.Finished:
            Console.WriteLine();
            Console.WriteLine("Job is finished. Please wait while local tasks or downloads complete...");
            break;
        case JobState.Canceling:
        case JobState.Queued:
        case JobState.Scheduled:
        case JobState.Processing:
            Console.WriteLine("Please wait...\n");
            break;
        case JobState.Canceled:
        case JobState.Error:

            // Cast sender as a job.
            IJob job = (IJob)sender;

            // Display or log error details as needed.
            break;
        default:
            break;
        }
    }

    private static IMediaProcessor GetLatestMediaProcessorByName(string mediaProcessorName)
    {
        var processor = _context.MediaProcessors.Where(p => p.Name == mediaProcessorName).
        ToList().OrderBy(p => new Version(p.Version)).LastOrDefault();

        if (processor == null)
        throw new ArgumentException(string.Format("Unknown media processor", mediaProcessorName));

        return processor;
    }

    }
}

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