/// <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(); }
/// <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))); } } }