Transkode file media
Anda dapat menggunakan API Windows.Media.Transcoding untuk mentranskode file video dari satu format ke format lainnya.
Transcoding adalah konversi file media digital, seperti file video atau audio, dari satu format ke format lainnya. Ini biasanya dilakukan dengan mendekode dan kemudian mengodekan ulang file. Misalnya, Anda dapat mengonversi file Windows Media ke MP4 sehingga dapat diputar pada perangkat portabel yang mendukung format MP4. Atau, Anda dapat mengonversi file video definisi tinggi ke resolusi yang lebih rendah. Dalam hal ini, file yang dikodekan ulang mungkin menggunakan codec yang sama dengan file asli, tetapi akan memiliki profil pengodean yang berbeda.
Menyiapkan proyek Anda untuk transcoding
Selain namespace yang dirujuk oleh templat proyek default, Anda harus mereferensikan namespace layanan ini untuk mentranskode file media menggunakan kode dalam artikel ini.
using Windows.Storage;
using Windows.Media.MediaProperties;
using Windows.Media.Transcoding;
Pilih file sumber dan tujuan
Cara aplikasi Anda menentukan file sumber dan tujuan untuk transcoding tergantung pada implementasi Anda. Contoh ini menggunakan FileOpenPicker dan FileSavePicker untuk memungkinkan pengguna memilih sumber dan file tujuan.
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();
Membuat profil pengodean media
Profil pengodean berisi pengaturan yang menentukan bagaimana file tujuan akan dikodekan. Di sinilah Anda memiliki sejumlah besar opsi saat Anda melakukan transkode file.
Kelas MediaEncodingProfile menyediakan metode statis untuk membuat profil pengodean yang telah ditentukan sebelumnya:
Metode untuk membuat profil pengodean audio saja
Metode | Profil |
---|---|
CreateAlac | Audio Codec Audio Lossless (ALAC) Apple |
CreateFlac | Audio Free Lossless Audio Codec (FLAC). |
BuatM4a | Audio AAC (M4A) |
BuatMp3 | Audio MP3 |
BuatWav | Audio WAV |
BuatWmv | Windows Media Audio (WMA) |
Metode untuk membuat profil pengodean audio/video
Metode | Profil |
---|---|
CreateAvi | AVI |
CreateHevc | Video High Efficiency Video Coding (HEVC), juga dikenal sebagai video H.265 |
BuatMp4 | Video MP4 (video H.264 ditambah audio AAC) |
BuatWmv | Windows Media Video (WMV) |
Kode berikut membuat profil untuk video MP4.
MediaEncodingProfile profile =
MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
Metode CreateMp4 statis membuat profil pengodean MP4. Parameter untuk metode ini memberikan resolusi target untuk video. Dalam hal ini, VideoEncodingQuality.hd720p berarti 1280 x 720 piksel pada 30 bingkai per detik. ("720p" adalah singkatan dari 720 baris pemindaian progresif per bingkai.) Metode lain untuk membuat profil yang telah ditentukan sebelumnya semuanya mengikuti pola ini.
Atau, Anda dapat membuat profil yang cocok dengan file media yang ada dengan menggunakan metode MediaEncodingProfile.CreateFromFileAsync. Atau, jika Anda mengetahui pengaturan pengodean yang tepat yang Anda inginkan, Anda dapat membuat objek MediaEncodingProfile baru dan mengisi detail profil.
Transkode file
Untuk mentranskode file, buat objek MediaTranscoder baru dan panggil metode MediaTranscoder.PrepareFileTranscodeAsync. Teruskan file sumber, file tujuan, dan profil pengodean. Kemudian panggil metode TranscodeAsync pada objek PrepareTranscodeResult yang dikembalikan dari operasi transcode asinkron.
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;
}
}
Menanggapi kemajuan transcoding
Anda dapat mendaftarkan peristiwa untuk merespons ketika kemajuan TranscodeAsync asinkron berubah. Peristiwa ini adalah bagian dari kerangka kerja pemrograman asinkron untuk aplikasi Platform Windows Universal (UWP) dan tidak spesifik untuk API transcoding.
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.
}
}
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk