예제 #1
0
        /// <summary>
        /// Record a video for 5 seconds and store it as c:\temp\example.mp4
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // Install-Package Emgu.CV
            // Install-Package Emgu.CV.runtime.windows
            // Install-Package FFMediaToolkit
            // Install-Package DirectShowLib

            var camIndex = SelectCameraIndex();

            _captureDevice = new VideoCapture(camIndex, VideoCapture.API.DShow)
            {
                FlipVertical = true
            };
            _captureDevice.ImageGrabbed += CaptureDeviceImageGrabbed;
            var settings = new VideoEncoderSettings(width:
                                                    _captureDevice.Width
                                                    , height: _captureDevice.Height
                                                    , framerate: 15
                                                    , codec: VideoCodec.H264)
            {
                EncoderPreset = EncoderPreset.Fast,
                CRF           = 17 // Constant Rate Factor
            };

            // Download from https://github.com/BtbN/FFmpeg-Builds/releases
            FFmpegLoader.FFmpegPath =
                @"C:\Users\fiach\source\repos\Webcam\FFmpeg\";
            _videoOutput = MediaBuilder.CreateContainer(@"c:\temp\example.mp4").WithVideo(settings).Create();
            _captureDevice.Start();
            Thread.Sleep(TimeSpan.FromSeconds(5));
            _captureDevice.Stop();
            _captureDevice.Dispose();
            _videoOutput.Dispose();
        }
예제 #2
0
        /// <summary>
        /// Stops video recording
        /// </summary>
        public void StopRecording()
        {
            _videoCaptureDevice.SignalToStop();
            _dispatcherTimer.Stop();
            var settings = new VideoEncoderSettings(width: _width, height: _height, framerate: 1, codec: VideoCodec.H264);

            settings.EncoderPreset = EncoderPreset.Fast;
            settings.CRF           = 17;

            using (var file = MediaBuilder.CreateContainer(_filePath + "\\videoCapture.mp4").WithVideo(settings).Create())
            {
                foreach (var bitmap in _frames)
                {
                    file.Video.AddFrame(ToImageData(Convert(bitmap)));
                }
            }
        }