Transcoder des fichiers multimédiasTranscode media files

Vous pouvez utiliser les API Windows.Media.Transcoding pour transcoder des fichiers vidéo d’un format vers un autre.You can use the Windows.Media.Transcoding APIs to transcode video files from one format to another.

Le transcodage consiste à convertir un fichier multimédia numérique, tel qu’un fichier vidéo ou audio, d’un format vers un autre.Transcoding is the conversion of a digital media file, such as a video or audio file, from one format to another. Lors de ce processus, le fichier est généralement décodé puis réencodé.This is usually done by decoding and then re-encoding the file. Par exemple, vous pouvez souhaiter convertir un fichier Windows Media au format MP4 pour qu’il puisse être lu sur un appareil mobile qui prend en charge le format MP4.For example, you might convert a Windows Media file to MP4 so that it can be played on a portable device that supports MP4 format. Ou encore, vous pouvez souhaiter convertir un fichier vidéo à haute définition en fichier de résolution inférieure.Or, you might convert a high-definition video file to a lower resolution. Dans ce cas, le fichier réencodé peut utiliser le même codec que le fichier d’origine, mais il aura un profil d’encodage différent.In that case, the re-encoded file might use the same codec as the original file, but it would have a different encoding profile.

Configurer votre projet pour le transcodageSet up your project for transcoding

Outre les espaces de noms référencés par le modèle de projet par défaut, vous devrez référencer ces espaces de noms pour transcoder les fichiers multimédias en utilisant le code dans cet article.In addition to the namespaces referenced by the default project template, you will need to reference these namespaces in order to transcode media files using the code in this article.

using Windows.Storage;
using Windows.Media.MediaProperties;
using Windows.Media.Transcoding;

Sélectionner les fichiers source et de destinationSelect source and destination files

La façon dont votre application détermine les fichiers source et de destination pour le transcodage dépend de votre implémentation.The way that your app determines the source and destination files for transcoding depends on your implementation. Cet exemple utilise un FileOpenPicker et un FileSavePicker pour permettre à l’utilisateur de choisir un fichier source et un fichier de destination.This example uses a FileOpenPicker and a FileSavePicker to allow the user to pick a source and a destination file.

var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
openPicker.FileTypeFilter.Add(".wmv");
openPicker.FileTypeFilter.Add(".mp4");

StorageFile source = await openPicker.PickSingleFileAsync();

var savePicker = new Windows.Storage.Pickers.FileSavePicker();

savePicker.SuggestedStartLocation =
    Windows.Storage.Pickers.PickerLocationId.VideosLibrary;

savePicker.DefaultFileExtension = ".mp4";
savePicker.SuggestedFileName = "New Video";

savePicker.FileTypeChoices.Add("MPEG4", new string[] { ".mp4" });

StorageFile destination = await savePicker.PickSaveFileAsync();

Créer un profil d’encodage multimédiaCreate a media encoding profile

Le profil d’encodage contient les paramètres qui déterminent le mode d’encodage du fichier de destination.The encoding profile contains the settings that determine how the destination file will be encoded. C’est à ce stade du processus de transcodage d’un fichier que les options proposées sont les plus nombreuses.This is where you have the greatest number of options when you transcode a file.

La classe MediaEncodingProfile fournit des méthodes statiques pour la création de profils d’encodage prédéfinis :The MediaEncodingProfile class provides static methods for creating predefined encoding profiles:

Méthodes de création de profils d’encodage audio uniquementMethods for creating Audio-only encoding profiles

MéthodeMethod ProfilProfile
CreateAlacCreateAlac Audio Codec audio Apple sans perte (ALAC)Apple Lossless Audio Codec (ALAC) audio
CreateFlacCreateFlac Audio Codec audio gratuit sans perte (FLAC).Free Lossless Audio Codec (FLAC) audio.
CreateM4aCreateM4a Audio AAC (M4A)AAC audio (M4A)
CreateMp3CreateMp3 Audio MP3MP3 audio
CreateWavCreateWav Audio WAVWAV audio
CreateWmvCreateWmv Audio Windows Media (WMA)Windows Media Audio (WMA)

Méthodes de création de profils d’encodage audio/vidéoMethods for creating audio / video encoding profiles

MéthodeMethod ProfilProfile
CreateAviCreateAvi AVIAVI
CreateHevcCreateHevc Vidéo HEVC (High EFFICACITE Video Coding), également appelée vidéo H. 265High Efficiency Video Coding (HEVC) video, also known as H.265 video
CreateMp4CreateMp4 Vidéo MP4 (vidéo H.264 plus audio AAC)MP4 video (H.264 video plus AAC audio)
CreateWmvCreateWmv Vidéo Windows Media (WMV)Windows Media Video (WMV)

Le code suivant crée un profil pour la vidéo MP4.The following code creates a profile for MP4 video.

MediaEncodingProfile profile =
    MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);

La méthode statique CreateMp4 permet de créer un profil d’encodage MP4.The static CreateMp4 method creates an MP4 encoding profile. Le paramètre de cette méthode détermine la résolution cible de la vidéo.The parameter for this method gives the target resolution for the video. Dans ce cas, VideoEncodingQuality.hd720p signifie 1 280 x 720 pixels à 30 images par seconde.In this case, VideoEncodingQuality.hd720p means 1280 x 720 pixels at 30 frames per second. (« 720p » correspond à un balayage progressif de 720 lignes par image.) Les autres méthodes de création de profils prédéfinis suivent toutes ce modèle.("720p" stands for 720 progressive scan lines per frame.) The other methods for creating predefined profiles all follow this pattern.

Une autre possibilité consiste à créer un profil qui correspond à un fichier multimédia existant à l’aide de la méthode MediaEncodingProfile.CreateFromFileAsync.Alternatively, you can create a profile that matches an existing media file by using the MediaEncodingProfile.CreateFromFileAsync method. Ou, si vous connaissez les paramètres de codage exacts que vous souhaitez, vous pouvez créer un nouvel objet MediaEncodingProfile et renseigner les détails du profil.Or, if you know the exact encoding settings that you want, you can create a new MediaEncodingProfile object and fill in the profile details.

Transcoder le fichierTranscode the file

Pour Transcoder le fichier, créez un nouvel objet MediaTranscoder et appelez la méthode MediaTranscoder. PrepareFileTranscodeAsync .To transcode the file, create a new MediaTranscoder object and call the MediaTranscoder.PrepareFileTranscodeAsync method. Transmettez le fichier source, le fichier de destination et le profil d’encodage.Pass in the source file, the destination file, and the encoding profile. Appelez ensuite la méthode TranscodeAsync sur l’objet PrepareTranscodeResult qui a été retourné à partir de l’opération de transcodage asynchrone.Then call the TranscodeAsync method on the PrepareTranscodeResult object that was returned from the async transcode operation.

MediaTranscoder transcoder = new MediaTranscoder();

PrepareTranscodeResult prepareOp = await
    transcoder.PrepareFileTranscodeAsync(source, destination, profile);

if (prepareOp.CanTranscode)
{
    var transcodeOp = prepareOp.TranscodeAsync();

    transcodeOp.Progress +=
        new AsyncActionProgressHandler<double>(TranscodeProgress);
    transcodeOp.Completed +=
        new AsyncActionWithProgressCompletedHandler<double>(TranscodeComplete);
}
else
{
    switch (prepareOp.FailureReason)
    {
        case TranscodeFailureReason.CodecNotFound:
            System.Diagnostics.Debug.WriteLine("Codec not found.");
            break;
        case TranscodeFailureReason.InvalidProfile:
            System.Diagnostics.Debug.WriteLine("Invalid profile.");
            break;
        default:
            System.Diagnostics.Debug.WriteLine("Unknown failure.");
            break;
    }
}

Répondre à la progression du transcodageRespond to transcoding progress

Vous pouvez enregistrer des événements pour répondre en cas de modification de la progression de l’élément TranscodeAsync asynchrone.You can register events to respond when the progress of the asynchronous TranscodeAsync changes. Ces événements font partie de l’infrastructure de programmation asynchrone pour les applications de plateforme Windows universelle (UWP) et ne sont pas propres à l’API de transcodage.These events are part of the async programming framework for Universal Windows Platform (UWP) apps and are not specific to the transcoding API.

void TranscodeProgress(IAsyncActionWithProgress<double> asyncInfo, double percent)
{
    // Display or handle progress info.
}

void TranscodeComplete(IAsyncActionWithProgress<double> asyncInfo, AsyncStatus status)
{
    asyncInfo.GetResults();
    if (asyncInfo.Status == AsyncStatus.Completed)
    {
        // Display or handle complete info.
    }
    else if (asyncInfo.Status == AsyncStatus.Canceled)
    {
        // Display or handle cancel info.
    }
    else
    {
        // Display or handle error info.
    }
}