Windows 10 UWP uygulamasında MediaEditing ile resimlerden video oluşturmak

Bu makale’de ilginç bir uygulama yazarak, 10 adet resim ve 1 adet mp3 dosyasından 1 adet video üreteceğiz.

Aşağıdaki projeyi geliştirirken ihtiyacımız olacak örnek dosyaları aşağıda paylaşıyorum;

Hemen yeni bir Blank App (Universal Windows) proje oluşturalım;

MainPage.xaml dosyasını açalım içerisindeki kodları aşağıdaki şekilde güncelleyelim. Böylece ekranda bir Button nesnesi gözükecek, üzerine tıklandığında resim ve ses dosyaları kullanılarak bir video oluşturulacak, oluşturulan video dosyası Button‘un hemen altına eklediğimiz MediaElement nesnesinde oynatılacak.

<Page x:Class=”CreatingVideoFromImages.MainPage” xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” xmlns:local=”using:CreatingVideoFromImages”>

&lt;StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"&gt;
    &lt;Button Content="Video Oluştur" Click="Button_Click" /&gt;

    &lt;MediaElement x:Name="player" Width="1024" Height="768" /&gt;
&lt;/StackPanel&gt;

</Page></pre>

MainPage.xaml.cs dosyasında Button_Click() methodunu oluşturmalıyız;

private async void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    var composition = new MediaComposition();
    var folderPhotos = await Package.Current.InstalledLocation.GetFolderAsync("Assets\\Photos");

    foreach (var file in await folderPhotos.GetFilesAsync())
    {
        var clip = await MediaClip.CreateFromImageFileAsync(file, TimeSpan.FromMilliseconds(3500));

        composition.Clips.Add(clip);
    }

    var folderSounds = await Package.Current.InstalledLocation.GetFolderAsync("Assets\\Sounds");

    foreach (var file in await folderSounds.GetFilesAsync())
    {
        var track = await BackgroundAudioTrack.CreateFromFileAsync(file);

        composition.BackgroundAudioTracks.Add(track);
    }

    var renderFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("video.mp4", CreationCollisionOption.GenerateUniqueName);

    await composition.RenderToFileAsync(renderFile);

    player.SetSource(await renderFile.OpenReadAsync(), renderFile.ContentType);

    player.Play();
}


Yukarıdaki kod bloğunda öncelikle MediaComposition sınıfından yeni bir değişken oluşturuyoruz. Böylece istediğimiz kadar *resim*, *ses* veya *video* dosyasını bu **composition** değişkenine ekleyerek yeni bir *video* oluşturabileceğiz.

Package sınıfının InstalledLocation **property**'sinden erişebildiğimiz GetFolderAsync() methodu ile projenin istediğim dizinine erişebiliyor, GetFilesAsync() methodunu kullanarak içindeki dosyaları elde edebiliyoruz.

MediaClip sınıfının **static** CreateFromImageFileAsync() methodunu kullanarak TimeSpan sınıfı aracılığıyla belirlediğimiz süre kadar videoda görüntülenecek resimleri **composition** değişkenine ekliyoruz.

BackgroundAudioTrack sınıfının **static** CreateFromFileAsync() methodunu kullanarak videonun arkaplan sesi olacak ses dosyalarını **composition** değişkenine ekliyoruz.

ApplicationData sınıfının LocalFolder **property**'si aracılığı ile erişebildiğimiz CreateFileAsync() methodu aracılığıyla *video.mp4* isimli dosyayı oluşturuyoruz, ikinci parametrede **CreationCollisionOption.GenerateUniqueName** değerini verdiğimiz için aynı isimli bir dosya zaten dizinde varsa dosyaya yeni bir isim verilecek.

MediaComposition sınıfının RenderToFileAsync() methodunu kullanarak, resim ve ses dosyaları eklediğim **composition** değişkeninden **video** oluşturuyoruz.

Ekranda yeralan MediaElement nesnesinin SetSource() methodunu kullanarak oluşturduğumuz video dosyasını yüklüyor, Play() methodunu kullanarak ekranda oynatmaya başlıyoruz.

Bu makalede verdiğim resim ve ses dosyalarını kullanarak oluşturulan videoyu aşağıda izleyebilirsiniz;

İlgili diğer makaleler

blog comments powered by Disqus

Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 452

Creative Commons Lisansı