Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt de Windows.Media.Transcoding API's gebruiken om videobestanden van de ene indeling naar de andere te transcoderen.
Transcodering is de conversie van een digitaal mediabestand, zoals een video- of audiobestand, van de ene indeling naar de andere. Dit wordt meestal gedaan door het bestand te decoderen en vervolgens opnieuw te coderen. U kunt bijvoorbeeld een Windows Media-bestand converteren naar MP4, zodat het kan worden afgespeeld op een draagbaar apparaat dat mp4-indeling ondersteunt. Of u kunt een videobestand met een hoge definitie converteren naar een lagere resolutie. In dat geval kan het opnieuw gecodeerde bestand dezelfde codec gebruiken als het oorspronkelijke bestand, maar het zou een ander coderingsprofiel hebben.
Bron- en doelbestanden selecteren
De manier waarop uw app de bron- en doelbestanden voor transcodering bepaalt, is afhankelijk van uw implementatie. In dit voorbeeld wordt een FileOpenPicker en een FileSavePicker gebruikt om de gebruiker toe te staan een bron- en doelbestand te kiezen.
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();
Een mediacoderingsprofiel maken
Het coderingsprofiel bevat de instellingen die bepalen hoe het doelbestand wordt gecodeerd. Hier hebt u het grootste aantal opties wanneer u een bestand transcoderen.
De klasse MediaEncodingProfile biedt statische methoden voor het maken van vooraf gedefinieerde coderingsprofielen:
Methoden voor het maken van alleen-audiocoderingsprofielen
| Methode | Profile |
|---|---|
| CreateAlac | Apple Lossless Audio Codec (ALAC)-audio |
| CreateFlac | FLAC-audio |
| CreateM4a | AAC-audio (M4A) |
| CreateMp3 | MP3-audio |
| CreateWav | WAV-audio |
| CreateWma | Windows Media Audio (WMA) |
Methoden voor het maken van audio-/videocoderingsprofielen
| Methode | Profile |
|---|---|
| CreateAv1 | AOMedia Video 1 (AV1) video |
| CreateAvi | AVI |
| CreateHevc | HEVC-video (High Efficiency Video Coding), ook wel H.265-video genoemd |
| CreateMp4 | MP4-video (H.264-video plus AAC-audio) |
| CreateVp9 | VP9-video |
| CreateWmv | Windows Media Video (WMV) |
Met de volgende code maakt u een profiel voor MP4-video.
MediaEncodingProfile profile =
MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
Met de statische methode CreateMp4 maakt u een MP4-coderingsprofiel. De parameter voor deze methode geeft de doelresolutie voor de video. In dit geval betekent VideoEncodingQuality.hd720p 1280 x 720 pixels bij 30 frames per seconde. ("720p" staat voor 720 progressieve scanlijnen per frame.) De andere methoden voor het maken van vooraf gedefinieerde profielen volgen dit patroon.
U kunt ook een profiel maken dat overeenkomt met een bestaand mediabestand met behulp van de methode MediaEncodingProfile.CreateFromFileAsync . Als u de gewenste coderingsinstellingen weet, kunt u een nieuw MediaEncodingProfile maken en de profielgegevens invullen.
Het bestand transcoderen
Als u het bestand wilt transcoderen, maakt u een nieuw MediaTranscoder-object en roept u de methode MediaTranscoder.PrepareFileTranscodeAsync aan. Geef het bronbestand, het doelbestand en het coderingsprofiel door. Roep vervolgens de methode TranscodeAsync aan op het PrepareTranscodeResult-object dat is geretourneerd door de asynchrone transcodebewerking.
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;
}
}
Reageren op de voortgang van transcodering
U kunt gebeurtenissen registreren om te reageren wanneer de voortgang van de asynchrone TranscodeAsync verandert. Deze gebeurtenissen maken deel uit van het asynchrone programmeerframework voor Windows-apps en zijn niet specifiek voor de transcoderings-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.
}
}
Windows developer