Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan använda Windows. Media.Transcoding API:er för att omkoda videofiler från ett format till ett annat.
Omkodning är konverteringen av en digital mediefil, till exempel en video- eller ljudfil, från ett format till ett annat. Detta görs vanligtvis genom att avkoda och sedan koda om filen. Du kan till exempel konvertera en Windows Media-fil till MP4 så att den kan spelas upp på en bärbar enhet som stöder MP4-format. Eller så kan du konvertera en hd-videofil till en lägre upplösning. I så fall kan den omkodade filen använda samma codec som den ursprungliga filen, men den skulle ha en annan kodningsprofil.
Välj käll- och målfiler
Hur appen avgör käll- och målfilerna för transkodning beror på implementeringen. I det här exemplet används en FileOpenPicker och en FileSavePicker så att användaren kan välja en källa och en målfil.
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();
Skapa en mediekodningsprofil
Kodningsprofilen innehåller de inställningar som avgör hur målfilen ska kodas. Det är här du har det största antalet alternativ när du omkodar en fil.
Klassen MediaEncodingProfile innehåller statiska metoder för att skapa fördefinierade kodningsprofiler:
Metoder för att skapa kodningsprofiler för endast ljud
| Metod | Profile |
|---|---|
| CreateAlac | Ljud från Apple Lossless Audio Codec (ALAC) |
| SkapaFlac | Free Lossless Audio Codec (FLAC)-ljud |
| CreateM4a | AAC-ljud (M4A) |
| CreateMp3 | MP3-ljud |
| CreateWav | WAV-ljud |
| CreateWma | Windows Media Audio (WMA) |
Metoder för att skapa ljud-/videokodningsprofiler
| Metod | Profile |
|---|---|
| CreateAv1 | AOMedia Video 1-video (AV1) |
| CreateAvi | AVI |
| CreateHevc | Videokodning med hög effektivitet (HEVC), även känd som H.265-video |
| CreateMp4 | MP4-video (H.264-video plus AAC-ljud) |
| CreateVp9 | VP9-video |
| CreateWmv | Windows Media Video (WMV) |
Följande kod skapar en profil för MP4-video.
MediaEncodingProfile profile =
MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
Den statiska Metoden CreateMp4 skapar en MP4-kodningsprofil. Parametern för den här metoden anger videons målupplösning. I det här fallet innebär VideoEncodingQuality.hd720p 1280 x 720 bildpunkter med 30 bildrutor per sekund. ("720p" står för 720 progressiva genomsökningslinjer per bildruta.) De andra metoderna för att skapa fördefinierade profiler följer alla det här mönstret.
Du kan också skapa en profil som matchar en befintlig mediefil med hjälp av metoden MediaEncodingProfile.CreateFromFileAsync . Om du känner till de exakta kodningsinställningarna kan du skapa ett nytt MediaEncodingProfile objekt och fylla i profilinformationen.
Omkoda filen
Om du vill omkoda filen skapar du ett nytt objekt MediaTranscoder och anropar metoden MediaTranscoder.PrepareFileTranscodeAsync. Skicka in källfilen, målfilen och kodningsprofilen. Anropa sedan metoden TranscodeAsync på metoden PrepareTranscodeResult som returnerades från transcode-åtgärden async.
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;
}
}
Svara på omkodningsförloppet
Du kan registrera händelser för att svara när förloppet för den asynkrona TranscodeAsync ändras. Dessa händelser är en del av asynkront programmeringsramverk för Windows appar och är inte specifika för omkodnings-API:et.
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