Uso delle anteprime video multimediali di Azure per creare un riepilogo videoUse Azure Media Video Thumbnails to Create a Video Summarization

OverviewOverview

Il processore multimediale delle anteprime video multimediali di Azure processore di contenuti multimediali (MP) consente di creare il riepilogo di un video, utile per i clienti che desiderano solo visualizzare in anteprima il riepilogo di un video di lunga durata.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. Ad esempio, i clienti potrebbero voler vedere un breve "riepilogo video" quando passano il mouse sull'anteprima.For example, customers might want to see a short "summary video" when they hover over a thumbnail. Modificando i parametri delle anteprime video multimediali di Azure con un set di impostazioni di configurazione, è possibile usare l'efficiente tecnologia di concatenazione e rilevamento delle schermate offerta dal processore multimediale per generare in modo algoritmico una sottoclip descrittiva.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.

Al momento, il processore multimediale di anteprime video multimediali di Azure è disponibile in Anteprima.The Azure Media Video Thumbnail MP is currently in Preview.

Questo argomento contiene informazioni dettagliate su Azure Media Video Thumbnails e illustra come usare questa funzionalità con Media Services .NET SDK.This topic gives details about Azure Media Video Thumbnail and shows how to use it with Media Services SDK for .NET.

LimitazioniLimitations

In alcuni casi, se il video non è costituito da scene differenti, l'output sarà rappresentato da un'unica immagine.In some cases, if your video is not comprised of different scenes, the output will only be a single shot.

Esempio di riepilogo videoVideo summary example

Di seguito sono riportati alcuni esempi delle attività che il processore multimediale delle anteprime video multimediali di Azure può eseguire:Here are some examples of what the Azure Media Video Thumbnails media processor can do:

Video originaleOriginal video

Video originaleOriginal video

Risultato dell'anteprima videoVideo thumbnail result

Risultato dell'anteprima videoVideo thumbnail result

Configurazione delle attività (set di impostazioni)Task configuration (preset)

Quando si crea un'attività di anteprima video con anteprime video multimediali di Azure, è necessario specificare un set di impostazioni di configurazione.When creating a video thumbnail task with Azure Media Video Thumbnails, you must specify a configuration preset. L'esempio precedente dell'anteprima è stato creato con la configurazione JSON di base seguente:The above thumbnail sample was created with the following basic JSON configuration:

{"version":"1.0"}

Al momento, è possibile modificare i parametri seguenti:Currently, you can change the following parameters:

ParamParam DescrizioneDescription
outputAudiooutputAudio Specifica se il video finale contiene audio.Specifies whether or not the resultant video contains any audio.
I valori consentiti sono: true o false.Allowed values are: True or False. Il valore predefinito è true.Default is True.
fadeInFadeOutfadeInFadeOut Specifica se vengono usate transizioni a dissolvenza tra le anteprime di movimento separate.Specifies whether or not fade transitions are used between the separate motion thumbnails.
I valori consentiti sono: true o false.Allowed values are: True or False. Il valore predefinito è true.Default is True.
maxMotionThumbnailDurationInSecsmaxMotionThumbnailDurationInSecs Numero intero che specifica quanto tempo deve durare l'intero video finale.Integer that specifies how long the entire resultant video shall be. Il valore predefinito dipende dalla durata del video originale.Default depends on original video duration.

La tabella seguente descrive la durata predefinita, quando maxMotionThumbnailInSecs non viene usato.The following table describes the default duration, when maxMotionThumbnailInSecs is not used.

Durata del videoVideo duration d < 3 mind < 3 min 3 minuti. < d < 15 minuti3 min < d < 15 min
Durata dell'anteprimaThumbnail duration 15 sec (2-3 scene)15 sec (2-3 scenes) 30 sec (3-5 scene)30 sec (3-5 scenes)

Il codice JSON seguente imposta i parametri disponibili.The following JSON sets available parameters.

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

Codice di esempio .NET.NET sample code

Il programma seguente illustra come:The following program shows how to:

  1. Creare un asset e caricare un file multimediale nell'asset.Create an asset and upload a media file into the asset.
  2. Creare un processo con un'attività di anteprima video in base al file di configurazione che contiene il set di impostazioni JSON seguente.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. Scaricare i file di output.Downloads the output files.

Creare e configurare un progetto di Visual StudioCreate and configure a Visual Studio project

Configurare l'ambiente di sviluppo e popolare il file app.config con le informazioni di connessione, come descritto in Sviluppo di applicazioni di Servizi multimediali con .NET.Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

EsempioExample

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

    }
}

Output di anteprima videoVideo thumbnail output

Output di anteprima videoVideo thumbnail output

Percorsi di apprendimento di Servizi multimedialiMedia Services learning paths

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:Read about the Azure Media Services learning paths:

Fornire commenti e suggerimentiProvide feedback

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. È anche possibile passare direttamente a una delle categorie seguenti:You also can go directly to one of the following categories:

Panoramica di Analisi servizi multimediali di AzureAzure Media Services Analytics Overview

Demo di Analisi servizi multimediali di AzureAzure Media Analytics demos