Azure Media Video Thumbnails を使用してビデオ要約を作成するUse Azure Media Video Thumbnails to Create a Video Summarization

概要Overview

Azure Media Video Thumbnails メディア プロセッサ (MP) では、長いビデオの要約をプレビューするだけのお客様に役に立つビデオの要約を作成することができます。The Azure Media Video Thumbnails media processor (MP) enables you to create a summary of a video that is useful to customers who just want to preview a summary of a long video. たとえば、サムネイルにマウス ポインターを合わせたときに、お客者は短い "要約ビデオ" を参照できます。For example, customers might want to see a short "summary video" when they hover over a thumbnail. 構成プリセットを通じて Azure Media Video Thumbnails のパラメーターを調整することにより、MP の強力なショット検出と連結テクノロジを使用して、わかりやすいサブクリップをアルゴリズムに生成できます。By tweaking the parameters of Azure Media Video Thumbnails through a configuration preset, you can use the MP's powerful shot detection and concatenation technology to algorithmically generate a descriptive subclip.

Azure Media Video Thumbnail MP は現在プレビュー段階です。The Azure Media Video Thumbnail MP is currently in Preview.

このトピックでは、Azure Media Video Thumbnail の詳細と、Media Services SDK for .NET での使用方法について説明します。This topic gives details about Azure Media Video Thumbnail and shows how to use it with Media Services SDK for .NET.

制限事項Limitations

場合によっては、ビデオが異なるシーンで構成されていない場合、出力はシングル ショットのみになります。In some cases, if your video is not comprised of different scenes, the output will only be a single shot.

ビデオ要約の例Video summary example

次に Azure Media Video Thumbnails メディア プロセッサで実行できる例をいくつか示します。Here are some examples of what the Azure Media Video Thumbnails media processor can do:

元のビデオOriginal video

元のビデオOriginal video

ビデオのサムネイル結果Video thumbnail result

ビデオのサムネイル結果Video thumbnail result

タスクの構成 (プリセット)Task configuration (preset)

Azure Media Video Thumbnailsでビデオのサムネイル タスクを作成するときは、構成プリセットを指定する必要があります。When creating a video thumbnail task with Azure Media Video Thumbnails, you must specify a configuration preset. 上記のサムネイル サンプルは、次の基本的な JSON 構成で作成されました。The above thumbnail sample was created with the following basic JSON configuration:

{"version":"1.0"}

現在、次のパラメーターを変更できます。Currently, you can change the following parameters:

ParamParam DescriptionDescription
outputAudiooutputAudio 結果ビデオにオーディオが含まれているかどうかを指定します。Specifies whether or not the resultant video contains any audio.
使用可能な値: True または False。Allowed values are: True or False. 既定値は True です。Default is True.
fadeInFadeOutfadeInFadeOut フェードの遷移が独立したモーションのサムネイル間で使用されているかどうかを指定します。Specifies whether or not fade transitions are used between the separate motion thumbnails.
使用可能な値: True または False。Allowed values are: True or False. 既定値は True です。Default is True.
maxMotionThumbnailDurationInSecsmaxMotionThumbnailDurationInSecs 結果ビデオ全体の長さを指定する整数。Integer that specifies how long the entire resultant video shall be. 既定値は、元のビデオの再生時間によって異なります。Default depends on original video duration.

次の表に、 maxMotionThumbnailInSecs が使用されていない場合の既定の再生時間を示します。The following table describes the default duration, when maxMotionThumbnailInSecs is not used.

ビデオの再生時間Video duration d < 3 分d < 3 min 3 分 < d < 15 分3 min < d < 15 min
サムネイルの再生時間Thumbnail duration 15 秒 (2 ~ 3 シーン)15 sec (2-3 scenes) 30 秒 (3 ~ 5 シーン)30 sec (3-5 scenes)

次の JSON では、使用可能なパラメーターを設定します。The following JSON sets available parameters.

{
    "version": "1.0",
    "options": {
        "outputAudio": "true",
        "maxMotionThumbnailDurationInSecs": "10",
        "fadeInFadeOut": "true"
    }
}

.NET サンプル コード.NET sample code

このプログラムでは次の方法を示します。The following program shows how to:

  1. 資産を作成し、その資産にメディア ファイルをアップロードします。Create an asset and upload a media file into the asset.
  2. 次の JSON プリセットを含む構成ファイルに基づくビデオ サムネイル タスクのジョブを作成します。Creates a job with a video thumbnail task based on a configuration file that contains the following json preset.

     {                
         "version": "1.0",
         "options": {
             "outputAudio": "true",
             "maxMotionThumbnailDurationInSecs": "30",
             "fadeInFadeOut": "false"
         }
     }
    
  3. 出力ファイルをダウンロードします。Downloads the output files.

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;
using System.Threading.Tasks;

namespace VideoSummarization
{
    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;

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

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


            // Run the thumbnail job.
            var asset = RunVideoThumbnailJob(@"C:\supportFiles\VideoThumbnail\BigBuckBunny.mp4",
                                        @"C:\supportFiles\VideoThumbnail\config.json");

            // Download the job output asset.
            DownloadAsset(asset, @"C:\supportFiles\VideoThumbnail\Output");
        }

        static IAsset RunVideoThumbnailJob(string inputMediaFilePath, string configurationFile)
        {
            // Create an asset and upload the input media file to storage.
            IAsset asset = CreateAssetAndUploadSingleFile(inputMediaFilePath,
                "My Video Thumbnail Input Asset",
                AssetCreationOptions.None);

            // Declare a new job.
            IJob job = _context.Jobs.Create("My Video Thumbnail Job");

            // Get a reference to Azure Media Video Thumbnails.
            string MediaProcessorName = "Azure Media Video Thumbnails";

            var processor = GetLatestMediaProcessorByName(MediaProcessorName);

            // Read configuration from the specified file.
            string configuration = File.ReadAllText(configurationFile);

            // Create a task with the encoding details, using a string preset.
            ITask task = job.Tasks.AddNew("My Video Thumbnail Task",
                processor,
                configuration,
                TaskOptions.None);

            // Specify the input asset.
            task.InputAssets.Add(asset);

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

            // Use the following event handler to check job progress.  
            job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);

            // Launch the job.
            job.Submit();

            // Check job execution and wait for job to finish.
            Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);

            progressJobTask.Wait();

            // If job state is Error, the event handling
            // method for job progress should log errors.  Here we check
            // for error state and exit if needed.
            if (job.State == JobState.Error)
            {
                ErrorDetail error = job.Tasks.First().ErrorDetails.First();
                Console.WriteLine(string.Format("Error: {0}. {1}",
                                                error.Code,
                                                error.Message));
                return null;
            }

            return job.OutputMediaAssets[0];
        }

        static IAsset CreateAssetAndUploadSingleFile(string filePath, string assetName, AssetCreationOptions options)
        {
            IAsset asset = _context.Assets.Create(assetName, options);

            var assetFile = asset.AssetFiles.Create(Path.GetFileName(filePath));
            assetFile.Upload(filePath);

            return asset;
        }

        static void DownloadAsset(IAsset asset, string outputDirectory)
        {
            foreach (IAssetFile file in asset.AssetFiles)
            {
                file.Download(Path.Combine(outputDirectory, file.Name));
            }
        }

        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;
        }

        static private void StateChanged(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.");
                    Console.WriteLine();
                    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.
                    // LogJobStop(job.Id);
                    break;
                default:
                    break;
            }
        }

    }
}

ビデオのサムネイル出力Video thumbnail output

ビデオのサムネイル出力Video thumbnail output

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:

Azure Media Services Analytics の概要Azure Media Services Analytics Overview

Azure Media Analytics デモAzure Media Analytics demos