示例#1
0
        public async Task ConversionStreamTest()
        {
            var path  = Res.GetPath(Res.Video_Mp4);
            var opath = "out-test-v-2.mp4";

            try
            {
                using var reader = new VideoReader(path);
                await reader.LoadMetadataAsync();

                var encoder = new H264Encoder
                {
                    Format = "flv"
                };

                using (var filestream = File.Create(opath))
                {
                    using (var writer = new VideoWriter(filestream,
                                                        reader.Metadata.Width,
                                                        reader.Metadata.Height,
                                                        reader.Metadata.AvgFramerate,
                                                        encoder.Create()))
                    {
                        writer.OpenWrite();

                        reader.Load();

                        await reader.CopyToAsync(writer);
                    }
                }

                using var video = new VideoReader(opath);
                await video.LoadMetadataAsync();

                Assert.True(video.Metadata.Codec == "h264");
                Assert.True(video.Metadata.AvgFramerate == reader.Metadata.AvgFramerate);
                Assert.True(Math.Abs(video.Metadata.Duration - reader.Metadata.Duration) < 0.2);
                Assert.True(video.Metadata.Width == reader.Metadata.Width);
                Assert.True(video.Metadata.Height == reader.Metadata.Height);
                Assert.True(video.Metadata.BitDepth == reader.Metadata.BitDepth);
                Assert.True(video.Metadata.Streams.Length == 1);  // only video
            }
            finally
            {
                if (File.Exists(opath))
                {
                    File.Delete(opath);
                }
            }
        }
示例#2
0
        public async Task ConversionTest2()
        {
            var path  = Res.GetPath(Res.Video_Mp4);
            var opath = "out-test-v-2.webm";

            try
            {
                var encoder = new VP9Encoder();
                encoder.RowBasedMultithreading = true;
                encoder.SetCQP(31);

                using var reader = new VideoReader(path);

                reader.LoadMetadata();
                reader.Load();

                using (var writer = new VideoWriter(opath,
                                                    reader.Metadata.Width,
                                                    reader.Metadata.Height,
                                                    reader.Metadata.AvgFramerate,
                                                    encoder.Create()))
                {
                    writer.OpenWrite(true);
                    reader.CopyTo(writer);
                }


                using var video = new VideoReader(opath);
                await video.LoadMetadataAsync();

                Assert.True(video.Metadata.Codec == "vp9");
                Assert.True(video.Metadata.AvgFramerate == reader.Metadata.AvgFramerate);
                Assert.True(Math.Abs(video.Metadata.Duration - reader.Metadata.Duration) < 0.01);
                Assert.True(video.Metadata.Width == reader.Metadata.Width);
                Assert.True(video.Metadata.Height == reader.Metadata.Height);
                Assert.True(video.Metadata.Streams.Length == 1);  // only video
            }
            finally
            {
                if (File.Exists(opath))
                {
                    File.Delete(opath);
                }
            }
        }
示例#3
0
        static void ReadWriteVideo(string input, string output)
        {
            var video = new VideoReader(input);

            video.LoadMetadataAsync().Wait();
            video.Load();

            using (var writer = new VideoWriter(File.Create(output),
                                                video.Metadata.Width, video.Metadata.Height, video.Metadata.AvgFramerate,
                                                new H264Encoder()
            {
                Format = "flv"
            }.Create()))
            {
                writer.OpenWrite(true);
                //video.CopyTo(writer);

                var frame = new VideoFrame(video.Metadata.Width, video.Metadata.Height);
                while (true)
                {
                    // read next frame
                    var f = video.NextFrame(frame);
                    if (f == null)
                    {
                        break;
                    }


                    for (int i = 0; i < 100; i++)
                    {
                        for (int j = 0; j < 100; j++)
                        {
                            var px = frame.GetPixels(i, j).Span;
                            px[0] = 255;
                            px[1] = 0;
                            px[2] = 0;
                        }
                    }

                    writer.WriteFrame(frame);
                }
            }
        }
示例#4
0
        static void ConvertVideo(string input, string output)
        {
            var encoder = new VP9Encoder();

            encoder.RowBasedMultithreading = true;
            encoder.SetCQP(31);

            using (var reader = new VideoReader(input))
            {
                reader.LoadMetadata();
                reader.Load();

                using (var writer = new VideoWriter(output,
                                                    reader.Metadata.Width,
                                                    reader.Metadata.Height,
                                                    reader.Metadata.AvgFramerate,
                                                    encoder.Create()))
                {
                    writer.OpenWrite(true);
                    reader.CopyTo(writer);
                }
            }
        }