Transkodieren von MediendateienTranscode media files

Mit den Windows.Media.Transcoding-APIs können Sie Videodateien in ein anderes Format transcodieren.You can use the Windows.Media.Transcoding APIs to transcode video files from one format to another.

Bei der Transcodierung handelt es sich um die Konvertierung einer digitalen Mediendatei, z. b. eine Video-oder Audiodatei, von einem Format in ein anderes.Transcoding is the conversion of a digital media file, such as a video or audio file, from one format to another. Dies geschieht in der Regel durch Decodieren und erneutes Codieren der Datei.This is usually done by decoding and then re-encoding the file. Beispiel: Sie konvertieren eine Windows Media-Datei in MP4, um sie auf einem Gerät wiederzugeben, das das MP4-Format unterstützt.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. Oder Sie können eine Videodatei mit hoher Auflösung in eine niedrigere Auflösung konvertieren.Or, you might convert a high-definition video file to a lower resolution. In diesem Fall kann die neu codierte Datei den gleichen Codec wie die Originaldatei verwenden, sie besitzt jedoch ein anderes Codierungsprofil.In that case, the re-encoded file might use the same codec as the original file, but it would have a different encoding profile.

Einrichten des Projekts für die TranscodierungSet up your project for transcoding

Zusätzlich zu den Namespaces, auf die von der Standardprojektvorlage verwiesen wird, müssen Sie auf die folgenden Namespaces verweisen, um Mediendateien mit dem Code in diesem Artikel transcodieren zu können: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;

Auswählen der Quell- und ZieldateienSelect source and destination files

Die Art, wie Ihre App die Quell- und Zieldateien für die Transcodierung ermittelt, hängt von der Implementierung ab.The way that your app determines the source and destination files for transcoding depends on your implementation. In diesem Beispiel werden eine FileOpenPicker-Klasse und eine FileSavePicker-Klasse verwendet, um Benutzern die Auswahl einer Quell- und Zieldatei zu ermöglichen.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();

Erstellen eines MediencodierungsprofilsCreate a media encoding profile

Das Codierungsprofil enthält die Einstellungen, die die Codierungsart der Zieldatei festlegen.The encoding profile contains the settings that determine how the destination file will be encoded. Hier stehen die meisten Optionen zum Transcodieren einer Datei zur Verfügung.This is where you have the greatest number of options when you transcode a file.

Die MediaEncodingProfile-Klasse stellt statische Methoden zum Erstellen vordefinierter Codierungsprofile bereit:The MediaEncodingProfile class provides static methods for creating predefined encoding profiles:

Methoden zum Erstellen von reinen audiocodierungs ProfilenMethods for creating Audio-only encoding profiles

MethodeMethod ProfilProfile
In der SystemsteuerungCreateAlac Apple Verlust lose Audiocodec-Audiodaten (alac)Apple Lossless Audio Codec (ALAC) audio
"Kreateflac"CreateFlac Kostenlose flac-Audiodatei (Lossless Audiocodec).Free Lossless Audio Codec (FLAC) audio.
CreateM4aCreateM4a AAC-Audio (M4A)AAC audio (M4A)
CreateMp3CreateMp3 MP3-AudioMP3 audio
"Kreatewav"CreateWav WAV-AudiodateiWAV audio
"Kreatewmv"CreateWmv Windows Media Audio (WMA)Windows Media Audio (WMA)

Methoden zum Erstellen von Audio-/videocodierungsprofilenMethods for creating audio / video encoding profiles

MethodeMethod ProfilProfile
"Kreateavi"CreateAvi AVIAVI
"Erker"CreateHevc Hevc-Video (High Efficiency Video Coding), auch bekannt als H. 265-VideoHigh Efficiency Video Coding (HEVC) video, also known as H.265 video
CreateMp4CreateMp4 MP4-Video (H.264-Video und AAC-Audio)MP4 video (H.264 video plus AAC audio)
"Kreatewmv"CreateWmv Windows Media Video (WMV)Windows Media Video (WMV)

Der folgende Code erstellt ein Profil für MP4-Video:The following code creates a profile for MP4 video.

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

Die statische CreateMp4-Methode erstellt ein MP4-Codierungsprofil.The static CreateMp4 method creates an MP4 encoding profile. Der Parameter für diese Methode gibt die Zielauflösung für das Video an.The parameter for this method gives the target resolution for the video. In diesem Fall bedeutet VideoEncodingQuality.hd720p: 1280 x 720 Pixel mit 30 Bildern pro Sekunde.In this case, VideoEncodingQuality.hd720p means 1280 x 720 pixels at 30 frames per second. („720p“ steht für 720 progressive Scanlinien pro Frame.) Dieses Muster gilt auch für die anderen Methoden zum Erstellen vordefinierter Profile.("720p" stands for 720 progressive scan lines per frame.) The other methods for creating predefined profiles all follow this pattern.

Alternativ können Sie mit der MediaEncodingProfile.CreateFromFileAsync-Methode ein Profil erstellen, das einer vorhandenen Mediendatei entspricht.Alternatively, you can create a profile that matches an existing media file by using the MediaEncodingProfile.CreateFromFileAsync method. Wenn Sie die genauen gewünschten Codierungseinstellungen kennen, können Sie auch ein neues MediaEncodingProfile-Objekt erstellen und die Profildetails ausfüllen.Or, if you know the exact encoding settings that you want, you can create a new MediaEncodingProfile object and fill in the profile details.

Transcodieren der DateiTranscode the file

Erstellen Sie zum Transcodieren der Datei ein neues MediaTranscoder-Objekt, und rufen Sie die MediaTranscoder.PrepareFileTranscodeAsync-Methode auf.To transcode the file, create a new MediaTranscoder object and call the MediaTranscoder.PrepareFileTranscodeAsync method. Übergeben Sie die Quelldatei, die Zieldatei und das Codierungsprofil.Pass in the source file, the destination file, and the encoding profile. Rufen Sie dann die TranscodeAsync-Methode für das PrepareTranscodeResult-Objekt auf, das mit dem asynchronen Transcodierungsvorgang zurückgegeben wurde.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;
    }
}

Reaktion auf TranscodierungsfortschrittRespond to transcoding progress

Sie können Reaktionsereignisse registrieren, wenn sich der Fortschritt der asynchronen TranscodeAsync-Klasse ändert.You can register events to respond when the progress of the asynchronous TranscodeAsync changes. Diese Ereignisse sind Teil des asynchronen Programmierungsframeworks für Apps für die universelle Windows-Plattform (UWP) und nicht für die Transcodierungs-API spezifisch.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.
    }
}