Search
 
SCRIPT & CODE EXAMPLE
 

CSHARP

c# video to frames

TimeSpan timeOfFrame = new TimeSpan(0, 0, 1);

        //pick mp4 file
        var picker = new Windows.Storage.Pickers.FileOpenPicker();
        picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
        picker.FileTypeFilter.Add(".mp4");
        StorageFile pickedFile = await picker.PickSingleFileAsync();
        if (pickedFile == null)
        {
            return;
        }
        ///


        //Get video resolution
        List<string> encodingPropertiesToRetrieve = new List<string>();
        encodingPropertiesToRetrieve.Add("System.Video.FrameHeight");
        encodingPropertiesToRetrieve.Add("System.Video.FrameWidth");
        IDictionary<string, object> encodingProperties = await pickedFile.Properties.RetrievePropertiesAsync(encodingPropertiesToRetrieve);
        uint frameHeight = (uint)encodingProperties["System.Video.FrameHeight"];
        uint frameWidth = (uint)encodingProperties["System.Video.FrameWidth"];
        ///


        //Use Windows.Media.Editing to get ImageStream
        var clip = await MediaClip.CreateFromFileAsync(pickedFile);
        var composition = new MediaComposition();
        composition.Clips.Add(clip);

        var imageStream = await composition.GetThumbnailAsync(timeOfFrame, (int)frameWidth, (int)frameHeight, VideoFramePrecision.NearestFrame);
        ///


        //generate bitmap 
        var writableBitmap = new WriteableBitmap((int)frameWidth, (int)frameHeight);
        writableBitmap.SetSource(imageStream);


        //generate some random name for file in PicturesLibrary
        var saveAsTarget = await KnownFolders.PicturesLibrary.CreateFileAsync("IMG" + Guid.NewGuid().ToString().Substring(0, 4) + ".jpg");


        //get stream from bitmap
        Stream stream = writableBitmap.PixelBuffer.AsStream();
        byte[] pixels = new byte[(uint)stream.Length];
        await stream.ReadAsync(pixels, 0, pixels.Length);

        using (var writeStream = await saveAsTarget.OpenAsync(FileAccessMode.ReadWrite))
        {
            var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, writeStream);
            encoder.SetPixelData(
                BitmapPixelFormat.Bgra8,
                BitmapAlphaMode.Premultiplied,
                (uint)writableBitmap.PixelWidth,
                (uint)writableBitmap.PixelHeight,
                96,
                96,
                pixels);
            await encoder.FlushAsync();

            using (var outputStream = writeStream.GetOutputStreamAt(0))
            {
                await outputStream.FlushAsync();
            }
        }
Comment

PREVIOUS NEXT
Code Example
Csharp :: C# clear console input buffer 
Csharp :: c# get type of class 
Csharp :: array object to datatable c# 
Csharp :: c# select a row from datagridview by value 
Csharp :: c# is odd number 
Csharp :: subtract days c# 
Csharp :: c# get function name 
Csharp :: text read C# 
Csharp :: random in f# 
Csharp :: group by ef core 
Csharp :: c# convert enumb to int array 
Csharp :: c# array display 
Csharp :: how to make a string in c# 
Csharp :: c# read large file 
Csharp :: c# loop through dictionary 
Csharp :: mvc session key exists 
Csharp :: unity add button 
Csharp :: change sprite color unity 
Csharp :: unity making homing missile 
Csharp :: autofac .net core 6 
Csharp :: linq to json 
Csharp :: c# substring until character single 
Csharp :: How to add rigidbody as a variable 
Csharp :: unity position ui element 
Csharp :: Commenting on C# 
Csharp :: c# write iformfile 
Csharp :: visitor pattern 
Csharp :: how to use double in c# 
Csharp :: c# split include separators 
Csharp :: c# null conditional 
ADD CONTENT
Topic
Content
Source link
Name
1+6 =