Spracovanie videí v aplikáciách Windows 10

Vedeli ste, že Windows 10 SDK obsahuje výkonnú knižnicu pre spracovanie videí? Pokiaľ máte výborný nápad alebo len plánujete vylepšiť vašu existujúcu aplikáciu o manipuláciu a tvorbu videí, Windows.Media.Editing je vhodný nástroj ako toho dosiahnuť!

Posledných pár mesiacov som venoval vývoju aplikácie Flashback pre Windows 10, ktorá umožňuje vytvárať videá z klipov, fotiek a hudby. Aplikácia využíva knižnice Windows.Media.Editing a poskytuje základné operácie s videom ako orezávanie, vytváranie sérií fotografií a ich jednoduchú organizáciu na časovej línií. Okrem toho aplikácia podporuje pridanie audio stopy, aplikovanie filtrov alebo titulkov. Vďaka skvelým vývojárom spoločnosti Microsoft, sú takéto operácie jednoduché a je ich možné implementovať pomocou pár riadkov kódu. Knižnica je navyše univerzálna a teda je ju možné použiť na ktoromkoľvek zariadení Windows 10.

Orezávanie

Knižnica pracuje s objektmi triedy MediaClip, ktorá reprezentuje samostatný klip vytvorený z video súboru, fotografie alebo farby. Po vytvorení klipu je skrátenie videa docielené jednoduchým nastavením dvoch parametrov TrimTimeFromStartTrimTimeFromEnd.

 var mediaClip = await MediaClip.CreateFromFileAsync(file);
mediaClip.TrimTimeFromStart = TimeSpan.FromSeconds(3);
mediaClip.TrimTimeFromEnd = TimeSpan.FromSeconds(1.5);

Vytvorenie kompozície

Objekt triedy MediaComposition môžeme považovať za obdobu časovej línie videa. Do existujúcej kompozície sú pridávané a organizované jednotlivé klipy, vrstvy prekrytia a audio stopy, pričom poskytuje funkcie pre živý náhľad a export výsledného videa do súboru.

 var mediaComposition = new MediaComposition();
var mediaClip = await MediaClip.CreateFromFileAsync(file);
mediaComposition.Clips.Add(mediaClip);

Živý náhľad

Ukážku výsledného videa je možné zobraziť v prvku MediaElement.

 <MediaElement x:Name="mediaElement" AutoPlay="True" AreTransportControlsEnabled="True"/>
var mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight);
mediaElement.SetMediaStreamSource(mediaStreamSource);

Pridanie hudby na pozadí

Pridanie obľúbenej pesničky a jej orezanie je taktiež veľmi jednoduché.

 var backgroundAudioTrack = await BackgroundAudioTrack.CreateFromFileAsync(file);
backgroundAudioTrack.TrimTimeFromStart = TimeSpan.FromSeconds(5);
backgroundAudioTrack.Volume = 0.5;
mediaComposition.BackgroundAudioTracks.Add(backgroundAudioTrack);

Exportovanie výsledného video súboru

Objekt triedy MediaComposition poskytuje asynchrónnu úlohu pre uloženie výsledného videa v plnej kvalite do súboru formátu .mp4.

 await mediaComposition.RenderToFileAsync(file);

Efekty

Každopádne, všetky tieto operácie boli dostupné už vo verzii Windows Phone 8.1, takže čo sa okrem dostupnosti pre univerzálnu rodinu zariadení Windows 10 zmenilo? UWP verzia Windows.Media.Editing poskytuje nové rozhrania ako IBasicVideoEffect, IBasicAudioEffect a IVideoCompositor, ktoré slúžia pre tvorbu vlastných video alebo audio efektov a vrstiev prekrytia.

Tieto efekty spracovávajú každý rámec videa ako obrázok a umožňujú použiť knižnice ako Win2D alebo Lumia.Imaging pre vytvorenie ľubovoľného efektu. Nasledujúca ukážka kódu znázorňuje implementáciu efektu saturácie.

 public void ProcessFrame(ProcessVideoFrameContext context)
{
    using (CanvasBitmap inputBitmap = CanvasBitmap.CreateFromDirect3D11Surface(_canvasDevice, context.InputFrame.Direct3DSurface))
    using (CanvasRenderTarget renderTarget = CanvasRenderTarget.CreateFromDirect3D11Surface(_canvasDevice, context.OutputFrame.Direct3DSurface))
    using (CanvasDrawingSession ds = renderTarget.CreateDrawingSession())
    {
        var saturation = new SaturationEffect()
        {
            Source = inputBitmap,
            Saturation = 0.4f
        };
        ds.DrawImage(saturation);
    }
}

Výsledok

Dúfam, že odteraz vám už nič nebude brániť vytvárať skvelé video rozšírenia a aplikácie podľa vašich predstáv. V prípade, že sa ale nechystáte vytvárať novú aplikáciu, vždy môžete využiť Flashback, alebo pomôcť aplikáciu vylepšiť vašim kódom J

Odporúčané zdroje

https://msdn.microsoft.com/en-us/windows/uwp/audio-video-camera/media-compositions-and-editing https://channel9.msdn.com/events/Build/2015/3-634 https://codingcoda.com/posts/2015/04/30/creative-video-experiences-with-the-universal-windows-platform/ https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples

 

- Martin Bojnanský