Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Video dosyalarını bir biçimden diğerine dönüştürmek için Windows.Media.Transcoding API'lerini kullanabilirsiniz.
Kod dönüştürme , video veya ses dosyası gibi dijital bir medya dosyasının bir biçimden diğerine dönüştürülmesidir. Bu genellikle dosyanın kodunu çözerek ve sonra yeniden kodlayarak yapılır. Örneğin, mp4 biçimini destekleyen taşınabilir bir cihazda oynatılabilmesi için Windows Media dosyasını MP4'e dönüştürebilirsiniz. İsterseniz, yüksek tanımlı bir video dosyasını daha düşük bir çözünürlüğe dönüştürebilirsiniz. Bu durumda, yeniden kodlanmış dosya özgün dosyayla aynı codec bileşenini kullanabilir, ancak farklı bir kodlama profiline sahip olabilir.
Kaynak ve hedef dosyaları seçme
Uygulamanızın kod dönüştürme için kaynak ve hedef dosyaları belirleme şekli, uygulamanıza bağlıdır. Bu örnekte kullanıcının kaynak ve hedef dosya seçmesine izin vermek için FileOpenPicker ve FileSavePicker kullanılır.
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();
Medya kodlama profili oluşturma
Kodlama profili, hedef dosyanın nasıl kodlanacağına karar veren ayarları içerir. Burası, bir dosyayı kodlarken en fazla seçenek sayısına sahip olduğunuz yerdir.
MediaEncodingProfile sınıfı önceden tanımlanmış kodlama profilleri oluşturmak için statik yöntemler sağlar:
Yalnızca ses kodlama profilleri oluşturma yöntemleri
| Yöntem | Profile |
|---|---|
| CreateAlac | Apple Kayıpsız Ses Kodeği (ALAC) sesi |
| CreateFlac | Ücretsiz Kayıpsız Ses Kodlayıcı/Çözücü (FLAC) |
| CreateM4a | AAC ses (M4A) |
| CreateMp3 | MP3 sesi |
| CreateWav | WAV sesi |
| CreateWma | Windows Medya Sesi (WMA) |
Ses /video kodlama profilleri oluşturma yöntemleri
| Yöntem | Profile |
|---|---|
| CreateAv1 | AOMedia Video 1 (AV1) videosu |
| CreateAvi | AVI |
| CreateHevc | H.265 video olarak da bilinen Yüksek Verimli Video Kodlama (HEVC) videosu |
| CreateMp4 | MP4 video (H.264 video artı AAC ses) |
| CreateVp9 | VP9 videosu |
| CreateWmv | Windows Medya Videosu (WMV) |
Aşağıdaki kod, MP4 videosu için bir profil oluşturur.
MediaEncodingProfile profile =
MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
Statik CreateMp4 yöntemi bir MP4 kodlama profili oluşturur. Bu yöntemin parametresi video için hedef çözünürlüğü verir. Bu durumda VideoEncodingQuality.hd720p saniyede 30 karede 1280 x 720 piksel anlamına gelir. ("720p" kare başına 720 aşamalı tarama çizgisi anlamına gelir.) Önceden tanımlanmış profiller oluşturmaya yönelik diğer yöntemlerin tümü bu deseni izler.
Alternatif olarak, MediaEncodingProfile.CreateFromFileAsync yöntemini kullanarak mevcut bir medya dosyasıyla eşleşen bir profil oluşturabilirsiniz. İsterseniz, tam olarak istediğiniz kodlama ayarlarını biliyorsanız yeni bir MediaEncodingProfile nesnesi oluşturabilir ve profil ayrıntılarını doldurabilirsiniz.
Dosyayı dönüştürme
Dosyayı kodlamak için yeni bir MediaTranscoder nesnesi oluşturun ve MediaTranscoder.PrepareFileTranscodeAsync yöntemini çağırın. Kaynak dosyayı, hedef dosyayı ve kodlama profilini geçirin. Ardından, eşzamansız dönüştürme işleminden döndürülen PrepareTranscodeResult nesnesi üzerinde TranscodeAsync yöntemini çağırın.
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;
}
}
Kod dönüştürme ilerlemesine yanıt verme
Zaman uyumsuz TranscodeAsync'in ilerleme durumu değiştiğinde yanıt vermek için olayları kaydedebilirsiniz. Bu olaylar, Windows uygulamaları için eşzamansız programlama çerçevesinin bir parçasıdır ve dönüştürme API'sine özgü değildir.
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