Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda dapat menggunakan Windows. API 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.
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();
// 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();
Buat 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 khusus audio
| Metode | Profile |
|---|---|
| CreateAlac | Audio dengan codec Apple Lossless Audio Codec (ALAC) |
| CreateFlac | audio Free Lossless Audio Codec (FLAC) |
| CreateM4a | Audio AAC (M4A) |
| CreateMp3 | Audio MP3 |
| CreateWav | Audio WAV |
| CreateWma | Windows Media Audio (WMA) |
Metode untuk membuat profil pengodean audio/video
| Metode | Profile |
|---|---|
| CreateAv1 | Video AOMedia Video 1 (AV1) |
| CreateAvi | AVI |
| CreateHevc | Video HEVC (High Efficiency Video Coding), juga dikenal sebagai video H.265 |
| CreateMp4 | Video MP4 (video H.264 ditambah audio AAC) |
| CreateVp9 | Video VP9 |
| CreateWmv | 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 dan mengisi detail profil.
Transkode berkas
Untuk mentranskode file, buat objek MediaTranscoder dan panggil MediaTranscoder.PrepareFileTranscodeAsync metode. Masukkan file sumber, file tujuan, dan profil pengodean. Kemudian panggil metode TranscodeAsync pada PrepareTranscodeResult objek 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 agar merespons saat progres operasi asinkron TranscodeAsync berubah. Peristiwa ini adalah bagian dari kerangka kerja pemrograman asinkron untuk aplikasi Windows 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.
}
}
Windows developer