Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez utiliser le Windows. Media.Transcoding API pour transcoder des fichiers vidéo d’un format à un autre.
Le transcodage est la conversion d’un fichier multimédia numérique, tel qu’un fichier vidéo ou audio, d’un format à un autre. Cette opération est généralement effectuée en décodant, puis en recodant le fichier. Par exemple, vous pouvez convertir un fichier multimédia Windows en MP4 afin qu’il puisse être lu sur un appareil portable qui prend en charge le format MP4. Vous pouvez également convertir un fichier vidéo haute définition en résolution inférieure. Dans ce cas, le fichier réencodé peut utiliser le même codec que le fichier d’origine, mais il aurait un profil d’encodage différent.
Sélectionner les fichiers source et de destination
La façon dont votre application détermine les fichiers source et de destination pour le transcodage dépend de votre implémentation. Cet exemple utilise un FileOpenPicker et un FileSavePicker pour permettre à l’utilisateur de choisir une source et un fichier de destination.
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
// Initialize the picker with the window handle (required for WinUI desktop apps).
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow);
WinRT.Interop.InitializeWithWindow.Initialize(openPicker, hwnd);
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();
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, hwnd);
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édia
Le profil d’encodage contient les paramètres qui déterminent la façon dont le fichier de destination sera encodé. C’est là que vous avez le plus grand nombre d’options lorsque vous transcodez un fichier.
La classe MediaEncodingProfile fournit des méthodes statiques pour créer des profils d’encodage prédéfinis :
Méthodes de création de profils d’encodage audio uniquement
| Méthode | Profil |
|---|---|
| CreateAlac | Audio ALAC (Apple Lossless Audio Codec) |
| CreateFlac | Audio sans perte gratuite (AUDIO CODEC) |
| CreateM4a | Audio AAC (M4A) |
| CreateMp3 | Audio MP3 |
| CreateWav | Audio WAV |
| CreateWma | Windows Media Audio (WMA) |
Méthodes de création de profils d’encodage audio/vidéo
| Méthode | Profil |
|---|---|
| CreateAv1 | Vidéo AOMedia 1 (AV1) |
| CreateAvi | AVI |
| CreateHevc | Vidéo de codage vidéo haute efficacité (HEVC), également appelée vidéo H.265 |
| CreateMp4 | Vidéo MP4 (vidéo H.264 et audio AAC) |
| CreateVp9 | Vidéo VP9 |
| CreateWmv | Windows Media Video (WMV) |
Le code suivant crée un profil pour la vidéo MP4.
MediaEncodingProfile profile =
MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
La méthode CreateMp4 statique crée un profil d’encodage MP4. Le paramètre de cette méthode donne la résolution cible de la vidéo. Dans ce cas, VideoEncodingQuality.hd720p signifie 1280 x 720 pixels à 30 images par seconde. (« 720p » correspond à 720 lignes de balayage progressives par trame.) Les autres méthodes de création de profils prédéfinis suivent tous ce modèle.
Vous pouvez également créer un profil qui correspond à un fichier multimédia existant à l’aide de la méthode MediaEncodingProfile.CreateFromFileAsync . Ou, si vous connaissez les paramètres d’encodage exacts souhaités, vous pouvez créer un objet MediaEncodingProfile et renseigner les détails du profil.
Transcodez le fichier
Pour transcoder le fichier, créez un objet MediaTranscoder et appelez la méthode MediaTranscoder.PrepareFileTranscodeAsync. Transmettez le fichier source, le fichier de destination et le profil d’encodage. Appelez ensuite la méthode TranscodeAsync sur l’objet PrepareTranscodeResult qui a été retourné à partir de l’opération de transcode asynchrone.
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 transcodage
Vous pouvez inscrire des événements pour répondre lorsque la progression de la transcodeAsync asynchrone change. Ces événements font partie de l’infrastructure de programmation asynchrone pour les applications Windows et ne sont pas spécifiques à l’API de transcodage.
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.
}
}
Windows developer