static void Main(string[] args) { string outputFile = "test-output.wmv"; int width = 320; int height = 240; // create instance of video writer VideoFileWriter writer = new VideoFileWriter(); // create new video file writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4); // create a bitmap to save into the video file Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb); // write 1000 video frames for (int i = 0; i < 1000; i++) { image.SetPixel(i % width, i % height, Color.Red); writer.WriteVideoFrame(image); } writer.Close(); Console.WriteLine("Finished"); Console.ReadKey(); }
private void capturedWebCamNewFrame(object sender, NewFrameEventArgs eventArgs) { try { if (isRecording) { //TODO //센서 데이터 수집 시간과 동기화 if (firstFrameTime != null) { videoFileWriter.WriteVideoFrame(eventArgs.Frame, DateTime.Now - firstFrameTime.Value); } else { videoFileWriter.WriteVideoFrame(eventArgs.Frame); firstFrameTime = DateTime.Now; } } using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { Image = bitmap.ToBitmapImage(); } Image.Freeze(); // 메모리 누수 방지 } catch (Exception exc) { MessageBox.Show(exc.Message); StopCamera(); } }
public void ReadFromVideo(string path) { pathToFile = new Uri(AnaglyphParameters.VideoPath.LocalPath); AnaglyphParameters.PathToRead = pathToFile.LocalPath; AnaglyphParameters.PathToWrite = path.Split('.')[0] + "1.mp4"; reader.Open(pathToFile.LocalPath); SetWriter(reader, writer); for (int i = 0; i < reader.FrameCount; i++) { OnOnFrameDone(i, (int)reader.FrameCount); try { using (Bitmap videoFrame = reader.ReadVideoFrame(i)) { using (Bitmap videoFrameChanged = new Fitler().Calc(videoFrame)) { writer.WriteVideoFrame(videoFrameChanged, (uint)i); } } } catch (Exception e) { Console.WriteLine(e.StackTrace); } } reader.Close(); writer.Close(); VideoToFrames.AddAudioToVideo(path); OnOnProcessDone(); }
private void button1_Click(object sender, EventArgs e) { if (captureDevice.ShowDialog(this) == DialogResult.OK) { //VideoCaptureDevice videoSource = captureDevice.VideoDevice; FinalVideo = captureDevice.VideoDevice; FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame); FinalVideo.Start(); } saveAvi = new SaveFileDialog(); saveAvi.Filter = "Avi Files (*.avi)|*.avi"; if (saveAvi.ShowDialog() == System.Windows.Forms.DialogResult.OK) { int h = captureDevice.VideoDevice.VideoResolution.FrameSize.Height; int w = captureDevice.VideoDevice.VideoResolution.FrameSize.Width; FileWriter.Open(saveAvi.FileName, w, h, 20, VideoCodec.MPEG4, 9000000); FileWriter.WriteVideoFrame(video); //AVIwriter.Open(saveAvi.FileName, w, h); button3.Text = "Stop Record"; //FinalVideo = captureDevice.VideoDevice; //FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame); //FinalVideo.Start(); } }
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { try { if (_recording) { using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { if (_firstFrameTime != null) { _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value); } else { _writer.WriteVideoFrame(bitmap); _firstFrameTime = DateTime.Now; } } } using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { var bi = bitmap.ToBitmapImage(); bi.Freeze(); Dispatcher.CurrentDispatcher.Invoke(() => Image = bi); } } catch (Exception exc) { MessageBox.Show("Error on _videoSource_NewFrame:\n" + exc.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); StopCamera(); } }
private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs) { try { if (btnStop.Text == "Lưu") { video = (Bitmap)eventArgs.Frame.Clone(); CameraBox.Image = (Bitmap)eventArgs.Frame.Clone(); FileWriter.WriteVideoFrame(video); } else { video = (Bitmap)eventArgs.Frame.Clone(); CameraBox.Image = (Bitmap)eventArgs.Frame.Clone(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "New Frame", MessageBoxButtons.OK, MessageBoxIcon.Error); } /* ^ * Here it cannot convert implicitly from System.Drawing.Bitmap to * System.Windows.Media.ImageSource */ }
public void RecordVideo(Bitmap frame) { lock (this) { TimeSpan ts; try { if (this._recording && _writer != null) { if (firstFrameTime != null) { ts = TimeSpan.FromMilliseconds(DateTime.Now.Subtract(firstFrameTime.Value).TotalMilliseconds); _writer.WriteVideoFrame(frame, ts); } else { _writer.WriteVideoFrame(frame); firstFrameTime = DateTime.Now; } } } catch (Exception ex) { } } }
private void video_NewFrame_fail(object sender, NewFrameEventArgs eventArgs) { using (Bitmap videoimg = (Bitmap)eventArgs.Frame.Clone()) { try { //pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone(); // save image to file if (m_startrecording && FileWriter.IsOpen && videoimg != null) { FileWriter.WriteVideoFrame(videoimg); FileWriter.Flush(); } pictureBox1.Image = videoimg;// (Bitmap)eventArgs.Frame.Clone(); } catch { Console.WriteLine("object is used somewhere else"); } } //do processing here //videoimg.Dispose(); }
/// <summary> /// 通常の記録方式 /// </summary> /// <param name="bitmap">ビデオフレームに追加するbitmap</param> private void WriteFrame(Graphics g) { g.CopyFromScreen(new Point(_captureRect.X, _captureRect.Y), new Point(0, 0), _bitmap.Size); ImageProcessing(g); mpegWriter.WriteVideoFrame(_bitmap); _writed_frame += 1; }
// New frame received by the player private void videoSourcePlayer_NewFrame(object sender, NewFrameEventArgs args) { DateTime now = DateTime.Now; Graphics g = Graphics.FromImage(args.Frame); // paint current time SolidBrush brush = new SolidBrush(Color.Red); g.DrawString(now.ToString(), this.Font, brush, new PointF(5, 5)); brush.Dispose(); g.Dispose(); if (isNeedRecord) { using (var bitmap = (Bitmap)args.Frame.Clone()) { if (_firstFrameTime != null) { _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value); } else { _writer.WriteVideoFrame(bitmap); _firstFrameTime = DateTime.Now; } } } }
private void show_video(object sender, NewFrameEventArgs eventArgs) { if (isShooting) { videoWriter.WriteVideoFrame(eventArgs.Frame); } }
public void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { try { if (_recording) { using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { if (_firstFrameTime != null) { System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null)); _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value); } else { System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null)); _writer.WriteVideoFrame(bitmap); _firstFrameTime = DateTime.Now; } } } using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { var bi = bitmap.ToBitmapImage(); bi.Freeze(); Dispatcher.CurrentDispatcher.Invoke(() => Image = bi); } } catch (Exception exc) { } }
public void StartVideoRecording(Bitmap frame) { _videoDurationTracker++; var durationOfRecordedVideoChunk = SettingsService.GetApplicationSettings().DurationOfRecordedVideoChunk; var chunkTimeSize = _frapsPerMinute * durationOfRecordedVideoChunk; if (_videoDurationTracker % chunkTimeSize == 0 || !_writer.IsOpen) { var filePath = AppDomain .CurrentDomain .BaseDirectory + "SurvellianceMaterials\\" + $"{CameraName.GetVideoFileName()}" + ".avi"; _writer.Close(); _writer.Open(filePath, (int)Width, (int)Height); _videoDurationTracker = 0; } if (_firstFrameTime != null) { _writer.WriteVideoFrame(frame); } else { _writer.WriteVideoFrame(frame); _firstFrameTime = DateTime.Now; } }
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { try { if (_recording) { if (_firstFrameTime != null) { _writer.WriteVideoFrame(eventArgs.Frame, DateTime.Now - _firstFrameTime.Value); } else { _writer.WriteVideoFrame(eventArgs.Frame); _firstFrameTime = DateTime.Now; } } using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { Image = bitmap.ToBitmapImage(); } Image.Freeze(); // avoid cross thread operations and prevents leaks } catch (Exception exc) { MessageBox.Show("Error on _videoSource_NewFrame:\n" + exc.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); StopCamera(); } }
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { try { if (_recording) { if (_firstFrameTime != null) { _writer.WriteVideoFrame(eventArgs.Frame, DateTime.Now - _firstFrameTime.Value); } else { _writer.WriteVideoFrame(eventArgs.Frame); _firstFrameTime = DateTime.Now; } } System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke((Action)(() => { using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { // Image = bitmap.ToBitmapImage(); Application.Current.Dispatcher.Invoke(new Action(() => Image = bitmap.ToBitmapImage())); } Application.Current.Dispatcher.Invoke(new Action(() => Image.Freeze())); // Image.Freeze(); // avoid cross thread operations and prevents leaks })); } catch (Exception) { } }
private void CameraOne_NewFrame(object sender, NewFrameEventArgs eventArgs) { if (isRecording1) { using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { if (firstFrameTime != null) { writer.WriteVideoFrame(bitmap, DateTime.Now - firstFrameTime.Value); } else { writer.WriteVideoFrame(bitmap); firstFrameTime = DateTime.Now; } } } Bitmap bitmap1 = (Bitmap)eventArgs.Frame.Clone(); BrightnessCorrection br = new BrightnessCorrection(brightess1); ContrastCorrection cr = new ContrastCorrection(contrast1); SaturationCorrection sr = new SaturationCorrection(saturation1); bitmap1 = br.Apply((Bitmap)bitmap1.Clone()); bitmap1 = cr.Apply((Bitmap)bitmap1.Clone()); bitmap1 = sr.Apply((Bitmap)bitmap1.Clone()); try { pbCam1.Image = bitmap1; } catch (NullReferenceException ex) { Console.WriteLine("A problem with image loading occured! You may want to close other apps using your camera!"); } }
public void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { try { if (_recording) { if (_firstFrameTime != null) { _writer.WriteVideoFrame(eventArgs.Frame, DateTime.Now - _firstFrameTime.Value); } else { _writer.WriteVideoFrame(eventArgs.Frame); _firstFrameTime = DateTime.Now; } } using (var bitmap = eventArgs.Frame) { Image = ToBitmapImage(bitmap); } Image.Freeze(); // avoid cross thread operations and prevents leaks Dispatcher.BeginInvoke(new ThreadStart(delegate { VideoPlayer.Source = Image; })); } catch (Exception exc) { MessageBox.Show(String.Format("Error on _videoSource_NewFrame:{0}\n", exc.Message), "Error", MessageBoxButton.OK, MessageBoxImage.Error); myCamera.Stop(); _recording = false; } }
private void encode() { Stopwatch stopwatch = new Stopwatch(); updateData((float)encodedFrameCount / totalFrameCount, false, stopwatch.Elapsed.TotalSeconds * (totalFrameCount - encodedFrameCount)); while (true) { if (imageQueue.Count > 0) { stopwatch.Restart(); encoder.WriteVideoFrame(imageQueue.Dequeue()); encodedFrameCount++; stopwatch.Stop(); updateData((float)encodedFrameCount / totalFrameCount, false, stopwatch.Elapsed.TotalSeconds * (totalFrameCount - encodedFrameCount)); } if (lastFrame && imageQueue.Count == 0) { finalize(); finished = true; break; } } }
public async void Cam_NewFrame(object sender, NewFrameEventArgs eventArgs) { //if (fps > maxFPS) { // fps--; // await Task.Delay(30); // return; //} try { System.Drawing.Image img = (Bitmap)eventArgs.Frame.Clone(); if (isRecording) { using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { try { if (StartTime != null) { writer.WriteVideoFrame(bitmap, DateTime.Now - StartTime.Value); } else { StartTime = DateTime.Now; writer.WriteVideoFrame(bitmap); } } catch (Exception) { } } } using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { MemoryStream ms = new MemoryStream(); bitmap.Save(ms, ImageFormat.Bmp); ms.Seek(0, SeekOrigin.Begin); BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.StreamSource = ms; bi.EndInit(); bi.Freeze(); Dispatcher.Invoke(() => { frameHolder.Source = bi; }); //Dispatcher.CurrentDispatcher.Invoke(() => frameHolder.Source = bi); } } catch (Exception ex) { Console.WriteLine("error" + ex.Message); } }
//eventhandler if new frame is ready private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { videoimg = (Bitmap)eventArgs.Frame.Clone(); //do processing here pictureBox1.Image = videoimg; // save image to file FileWriter.WriteVideoFrame(videoimg); }
public void StartRecording(string videofilepath) { h = videoimg.Height; w = videoimg.Width; FileWriter.Open(videofilepath, w, h, 25, VideoCodec.Default, 5000000); FileWriter.WriteVideoFrame(videoimg); m_startrecording = true; }
private void OnTimedEvent(Object source, ElapsedEventArgs e) { //Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",e.SignalTime); if (aTimer.Enabled) { if (IsSrc1Dirty && _cam1 != null) { //Console.Write("count" + ncount++); // a refresh is needed of source 1 try { // always lock image data to prevent accessing of the image from other threads. _cam1.GetImage().EnterLock(); this.Invoke((MethodInvoker) delegate() { pictureBoxSource1.Image = _cam1.GetImage().Image; }); //pictureBoxSource1.Image = _cam1.GetImage().Image; // save image to file if (m_startrecording && FileWriter.IsOpen) { //StartTick; long currentTick = DateTime.Now.Ticks; var frameOffset = new TimeSpan(currentTick - StartTick); Bitmap videoimg = (Bitmap)_cam1.GetImage().Image.Clone(); FileWriter.WriteVideoFrame(videoimg, frameOffset); FileWriter.Flush(); videoimg.Dispose(); if (checkBox_csv.Checked) { double[,] pixel_array = _cam1.GetImage().ImageProcessing.GetPixelsArray(); //array containing the raw signal data Thread t_thread = new Thread(() => SaveToCsv(pixel_array)); t_thread.Start(); } } } catch (Exception) { } finally { // We are done with the image data object, release. _cam1.GetImage().ExitLock(); //IsSrc1Dirty = false; } } } }
public void SaveVideo(string path, int repeat) { if (_images == null || _images.Length == 0) { return; } using (VideoFileWriter writer = new VideoFileWriter()) { int width = _images[0].Width; if (width % 2 == 1) { width += 1; } int height = _images[0].Height; if (height % 2 == 1) { height += 1; } int bitRate = 15 * 1024 * 1024; writer.Open(path, width, height, 30, VideoCodec.MPEG4, bitRate); for (int i = 0; i < repeat; i++) { if (Reverse) { for (int j = _images.Length - 1; j > 0; j--) { for (int k = 0; k < 30 / Speed; k++) { writer.WriteVideoFrame((Bitmap)_images[j]); } } } else { for (int j = 0; j < _images.Length; j++) { for (int k = 0; k < 30 / Speed; k++) { writer.WriteVideoFrame((Bitmap)_images[j]); } } } } writer.Close(); } }
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { lock (_lock) { Thread.Sleep(40); try { if (_isCameraStart) { using (var bitmap = (Bitmap)eventArgs.Frame.Clone()) { _bitmap = bitmap; if (_recording) { _detector.ProcessFrame(bitmap); if (_firstFrameTime != null) { _writer.WriteVideoFrame(bitmap, DateTime.Now - _firstFrameTime.Value); } else { _writer.WriteVideoFrame(bitmap); _firstFrameTime = DateTime.Now; } } else { if (_detector.ProcessFrame(bitmap) > 0.02) // нарушитель замечен { _logger.Info($"Start recording process | {DateTime.Now}"); _recording = true; var filename = Guid.NewGuid().ToString(); CreateSnapShot(filename); CreateVideoShot(filename); } } } } } catch (Exception e) { _logger.Error("Error on _videoSource_NewFrame:\n" + e); StopCamera(); } } }
/// <summary> /// generate multiple frames of the cursor (|) based on a loop iterations /// </summary> /// <param name="writer">VideoFileWriter (open) for adding the frames</param> /// <param name="sentence">Sentence object with the empty and full cursor png images</param> /// <param name="interations">number of iterations 2 iterations equal to half a second frame</param> private void SetCursorBlink(VideoFileWriter writer, Sentences sentence, int interations) { var emptyCursor = sentence.CursorEmpty; var fullCursor = sentence.CursorFull; for (int i = 0; i < interations; i++) { writer.WriteVideoFrame(LoadImageToMemory(emptyCursor.FullName)); writer.WriteVideoFrame(LoadImageToMemory(emptyCursor.FullName)); writer.WriteVideoFrame(LoadImageToMemory(fullCursor.FullName)); writer.WriteVideoFrame(LoadImageToMemory(fullCursor.FullName)); } }
// Méthode d'analyse de l'image pour trouver un mouvement private static void VideoSourcePlayer_NewFrame(Bitmap image) { Bitmap img_cut = SelectedZone(image, polygon); // récupère le niveau de mouvement var motionLevel = _motionDetector.ProcessFrame(img_cut); img_cut.Dispose(); if (motionLevel > _motionAlarmLevel) { if (_hasMotion) { _FileWriter.WriteVideoFrame(image); } else if (nbPicture == 0) { _volgnr++; int h = image.Height; int w = image.Width; Console.WriteLine(DateTime.Now + ": Motion started. Motion level: " + motionLevel); _FileWriter = new VideoFileWriter(); // création de la vidéo motion en .av, le nombre d'image par seconde peut être réglé _FileWriter.Open("/MotionsVideo/" + fileNameMovie + "_Number_" + _volgnr + ".avi", w, h, 25, VideoCodec.Default); Console.WriteLine("/MotionsVideo/" + fileNameMovie + "_Number_" + _volgnr + ".avi"); _FileWriter.WriteVideoFrame(image); } _hasMotion = true; nbPicture = 0; } else { // nombre d'image que l'on garde dans la video à la fin d'un mouvement peut être réglé. if (nbPicture > 200) { Console.WriteLine(DateTime.Now + ": Motion stopped. Motion level: " + motionLevel); _FileWriter.WriteVideoFrame(image); _FileWriter.Close(); _FileWriter.Dispose(); nbPicture = 0; // TODO : la date réelle sur la video à mettre à la place de "00" XMLManager.CreateXMLMotion("/Movie/" + fileNameMovie + ".xml", _volgnr, DateTime.Now, DateTime.Now, "00", "00"); } else if (_hasMotion || nbPicture >= 1) { _FileWriter.WriteVideoFrame(image); nbPicture++; } _hasMotion = false; } }
private void video_NewFrame_ori(object sender, NewFrameEventArgs eventArgs) { videoimg = (Bitmap)eventArgs.Frame.Clone(); //_readWriteLock.EnterWriteLock(); try { if (m_startrecording && FileWriter.IsOpen && videoimg != null) { //FileWriter.WriteVideoFrame(videoimg); FileWriter.WriteVideoFrame(videoimg); FileWriter.Flush(); } pictureBox1.Image = videoimg; } catch { Console.WriteLine("object is used somewhere else 2"); } finally { //_readWriteLock.ExitWriteLock(); } m_framelist.Add(videoimg); if (m_framelist.Count > 50)//100 { m_framelist[0].Dispose(); m_framelist.RemoveAt(0); } if (!m_startrecording && FileWriter.IsOpen) { //FileWriter.Close(); //_readWriteLock.EnterWriteLock(); try { FileWriter.Close(); Console.WriteLine("stop recording"); } finally { //_readWriteLock.ExitWriteLock(); } } }
private void videoNewFrame(object sender, NewFrameEventArgs eventArgs) { Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone(); Threshold thresholdFilter = new Threshold(120); Grayscale grayscaleFilter = new Grayscale(0.2, 0.7, 0.07); BrightnessCorrection brightnessFilter = new BrightnessCorrection(brightnessVal); ContrastCorrection contrastFilter = new ContrastCorrection(contrastVal); SaturationCorrection saturationFilter = new SaturationCorrection(saturationVal); bitmap = brightnessFilter.Apply((Bitmap)bitmap.Clone()); bitmap = contrastFilter.Apply((Bitmap)bitmap.Clone()); bitmap = saturationFilter.Apply((Bitmap)bitmap.Clone()); if (isGray) { bitmap = grayscaleFilter.Apply((Bitmap)bitmap.Clone()); } if (isBW) { bitmap = grayscaleFilter.Apply((Bitmap)bitmap.Clone()); bitmap = thresholdFilter.Apply(bitmap); } currentFrame = (Bitmap)bitmap.Clone(); if (fileWriter != null) { fileWriter.WriteVideoFrame((Bitmap)bitmap.Clone()); } }
private void buttonCreateVideo_Click(object sender, EventArgs e) { int width = 858; int height = 480; VideoFileWriter writer = new VideoFileWriter(); writer.Open("sample-video.avi", width, height, 1, VideoCodec.MPEG4, 2500000); Bitmap image = new Bitmap(width, height); using (OpenFileDialog dlg = new OpenFileDialog()) { dlg.Title = "Open Image"; dlg.Filter = "bmp files (*.bmp)|*.bmp"; if (dlg.ShowDialog() == DialogResult.OK) { image = new Bitmap(dlg.FileName); } } for (int i = 0; i < 36000; i++) { writer.WriteVideoFrame(image); } writer.Close(); Application.Exit(); }
static void Main(string[] args) { string outputFile = "test-output.wmv"; int width = 320; int height = 240; // create instance of video writer VideoFileWriter writer = new VideoFileWriter(); // create new video file writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4); // create a bitmap to save into the video file Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb); // write 1000 video frames for (int i = 0; i < 1000; i++) { image.SetPixel(i % width, i % height, Color.Red); writer.WriteVideoFrame(image); } writer.Close(); Console.WriteLine("Finished"); Console.ReadKey(); }
public void ShowImage(ImageEventArgs imageEventArgs) { imgCamera.Source = imageEventArgs.FrameReadyEventArgs.BitmapImage; //BitmapImage image = imageEventArgs.FrameReadyEventArgs.BitmapImage; //System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(image.PixelWidth, image.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); //System.Drawing.Imaging.BitmapData data = bmp.LockBits( //new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); //image.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride); bmp.UnlockBits(data); MemoryStream stream = new MemoryStream(); JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create((BitmapSource)imageEventArgs.FrameReadyEventArgs.BitmapImage)); encoder.Save(stream); System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream); stream.Close(); if (videoFileWriter.IsOpen) { videoFileWriter.WriteVideoFrame(bitmap); } }
void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs) { System.Drawing.Image imgforms = (Bitmap)eventArgs.Frame.Clone(); Bitmap bmp = (Bitmap)eventArgs.Frame.Clone(); BitmapImage bi = new BitmapImage(); bi.BeginInit(); MemoryStream ms = new MemoryStream(); imgforms.Save(ms, ImageFormat.Bmp); ms.Seek(0, SeekOrigin.Begin); bi.StreamSource = ms; bi.EndInit(); //Using the freeze function to avoid cross thread operations bi.Freeze(); //Calling the UI thread using the Dispatcher to update the 'Image' WPF control Dispatcher.BeginInvoke(new ThreadStart(delegate { pictureBox1.Source = bi; /*frameholder is the name of the 'Image' WPF control*/ })); for (int i = 0; i < 2; i++) { writer.WriteVideoFrame(bmp); } }
public void write_video_test() { var videoWriter = new VideoFileWriter(); int width = 800; int height = 600; int framerate = 24; string path = Path.GetFullPath("output.avi"); int videoBitRate = 1200 * 1000; //int audioBitRate = 320 * 1000; videoWriter.Open(path, width, height, framerate, VideoCodec.H264, videoBitRate); var m2i = new MatrixToImage(); Bitmap frame; for (byte i = 0; i < 255; i++) { byte[,] matrix = Matrix.Create(height, width, i); m2i.Convert(matrix, out frame); videoWriter.WriteVideoFrame(frame, TimeSpan.FromSeconds(i)); } videoWriter.Close(); Assert.IsTrue(File.Exists(path)); }
private static void WriteFranes(IEnumerable<string> grouping, string path, VideoFileWriter videoFileWriter, int frameRate) { int index = 0; var images = grouping.Select(s => Path.Combine(path, s + ImgExtentsion)).ToArray(); foreach (var image in images){ index++; using (var bitmap = new Bitmap(image)){ var timeSpan = TimeSpan.FromSeconds((double)index/frameRate); videoFileWriter.WriteVideoFrame(bitmap, timeSpan); } } Console.WriteLine("Found " + images.Count() + " images"); }
public static void CreateTimeLapse(string outputFilePath, int width, int height, int frameRate, bool orderByFileDate, string[] fileList) { try { using (var videoWriter = new VideoFileWriter()) { videoWriter.Open(outputFilePath, width, height, frameRate, VideoCodec.MPEG4, 1000000); // use for ordering by file date //System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(basePath); //System.IO.FileSystemInfo[] images = di.GetFileSystemInfos(); //var orderedImages = images.OrderBy(f => f.CreationTime); //foreach (FileSystemInfo imageFile in images) foreach (string file in fileList) { // Out of Memory errors are common for incomplete or corrupted images. Skip over them and continue. try { using (Bitmap image = Image.FromFile(file) as Bitmap) { if (image != null) { Bitmap bm = ResizeImage(image, width, height); videoWriter.WriteVideoFrame(bm); } } } catch { continue; } } videoWriter.Close(); } } catch (Exception) { throw; } }
public override void Record(object o) { var r = (RecData)o; String outputFilePath = r.path; if (File.Exists(outputFilePath)) { File.Delete(outputFilePath); } rec = true; var vFWriter = new VideoFileWriter(); vFWriter.Open(outputFilePath, 800, 600, 5, VideoCodec.MPEG4); while (rec) { if (!pause) { Stopwatch st = new Stopwatch(); st.Start(); using (Bitmap bmpScreenCapture = new Bitmap(r.width, r.height)) { using (Graphics g = Graphics.FromImage(bmpScreenCapture)) { g.CopyFromScreen(r.pos, new Point(0, 0), bmpScreenCapture.Size, CopyPixelOperation.SourceCopy); Rectangle cursorBounds = new Rectangle(new Point(Cursor.Position.X - r.pos.X, Cursor.Position.Y - r.pos.Y), Cursors.Default.Size); Cursors.Default.Draw(g, cursorBounds); } vFWriter.WriteVideoFrame(ReduceBitmap(bmpScreenCapture, 800, 600)); st.Stop(); var t = st.ElapsedMilliseconds; if (200 - t > 0) Thread.Sleep((int)(200 - t)); } } } vFWriter.Close(); }
public void test() { int width = 320; int height = 240; // create instance of video writer VideoFileWriter writer = new VideoFileWriter(); // create new video file writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4); // create a bitmap to save into the video file Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb); // write 1000 video frames for (int i = 0; i < 1000; i++) { image.SetPixel(i % width, i % height, Color.Red); writer.WriteVideoFrame(image); } writer.Close(); }
static void Main(string[] args) { if (args.Length < 3) printHelp(); else { var dinfo = new DirectoryInfo(args[0]); var files = dinfo.GetFiles(args[1]).OrderBy(p => p.Name).ToArray(); if (files.Length > 0) { Bitmap image = (Bitmap)Image.FromFile(files[0].FullName); var vFWriter = new VideoFileWriter(); vFWriter.Open(args[2], image.Width, image.Height, 50, VideoCodec.MPEG4); foreach (var file in files) { Console.WriteLine(file.FullName); image = (Bitmap)Image.FromFile(file.FullName); vFWriter.WriteVideoFrame(image); } vFWriter.Close(); } } }
private static void Create3DVideo(Cam leftCam, Cam rightCam) { if (leftCam == null) throw new ArgumentNullException("leftCam"); if (rightCam == null) throw new ArgumentNullException("rightCam"); string camSaveDirectory = PrepareSaveDirectory(leftCam.CamContainer); string videoFileName = String.Format("{0}{1} {2}.mpeg", camSaveDirectory, leftCam.CamContainer, DateTime.Now.ToString("MMM-dd-yyyy-HH-mm")); if (File.Exists(videoFileName)) File.Delete(videoFileName); try { using (VideoFileWriter videoWriter = new VideoFileWriter()) { videoWriter.Open(videoFileName, MslCamConstants.FullDataProductWidth, MslCamConstants.FullDataProductHeight); int totalImageCount = 0; using (MSLScraperEntities mslContext = new MSLScraperEntities()) { totalImageCount = (from A in (from a1 in mslContext.SolImageData where a1.Cam.Contains(leftCam.CamName) select a1) from B in (from b1 in mslContext.SolImageData where b1.Cam.Contains(rightCam.CamName) select b1) where A.Sol == B.Sol && A.TimeStamp == B.TimeStamp select A).Count(); } int take = 15; int processedCount = 0; for (int skip = 0; skip < totalImageCount; skip = skip + take) { using (MSLScraperEntities mslContext = new MSLScraperEntities()) { var imagesToProcess = (from A in (from a1 in mslContext.SolImageData where a1.Cam.Contains(leftCam.CamName) select a1) from B in (from b1 in mslContext.SolImageData where b1.Cam.Contains(rightCam.CamName) select b1) where A.Sol == B.Sol && A.TimeStamp == B.TimeStamp orderby A.TimeStamp select new { LeftCam = A, RightCam = B }).Skip(skip).Take(take); foreach (var imagePair in imagesToProcess) { using (MemoryStream msLeft = new MemoryStream(imagePair.LeftCam.ImageData)) using (Bitmap bitmapLeft = (Bitmap)Image.FromStream(msLeft)) using (MemoryStream msRight = new MemoryStream(imagePair.RightCam.ImageData)) using (Bitmap bitmapRight = (Bitmap)Image.FromStream(msRight)) { if (bitmapLeft.Width == videoWriter.Width && bitmapLeft.Height == videoWriter.Height && bitmapRight.Width == videoWriter.Width && bitmapRight.Height == videoWriter.Height) { StereoAnaglyph filter = new StereoAnaglyph(StereoAnaglyph.Algorithm.GrayAnaglyph); filter.OverlayImage = AForge.Imaging.Image.Clone(bitmapRight, System.Drawing.Imaging.PixelFormat.Format24bppRgb); using (Bitmap bitmap3D = filter.Apply(AForge.Imaging.Image.Clone(bitmapLeft, System.Drawing.Imaging.PixelFormat.Format24bppRgb))) using (Bitmap newBitmap = new Bitmap(bitmapLeft.Width, bitmapLeft.Height)) using (Graphics g = Graphics.FromImage(newBitmap)) { g.DrawImage(bitmap3D, 0, 0); g.DrawString(String.Format("{0} - Sol: {1}", leftCam.CamContainer, imagePair.LeftCam.Sol), new Font(FontFamily.GenericSansSerif, 30, FontStyle.Bold), Brushes.White, new PointF(10, 10)); for (int i = 0; i < 4; i++) { videoWriter.WriteVideoFrame(newBitmap); } } } } processedCount++; Console.Clear(); Console.WriteLine(string.Format("3D processing: {0} of {1} images processed for {2}", processedCount, totalImageCount, leftCam.CamContainer)); } } } } } catch (Exception ex) { string errorMessage = String.Format("ERROR while creating 3D video for {0}", leftCam.CamContainer); Console.WriteLine(String.Format("{0}: {1}", errorMessage, ex.Message)); errorCollection.Enqueue(new Exception(errorMessage, ex)); } }
public string RecordingPath = "recording"; // default recording path private void DoRecord() { //// we set our VideoFileWriter as well as the file name, resolution and fps VideoFileWriter writer = new VideoFileWriter(); string filename = String.Format("{0}\\{1}_{2:dd-MM-yyyy_hh-mm-ss}.avi", RecordingPath, cameraName, DateTime.Now); string logStr = ""; int afr =0; if (cam.VideoResolution.FrameSize.Width * cam.VideoResolution.FrameSize.Height >= 1024 * 768) { afr = 10; // minimum framerate is 10? } else afr = cam.VideoResolution.AverageFrameRate; writer.Open(filename, cam.VideoResolution.FrameSize.Width, cam.VideoResolution.FrameSize.Height, afr, VideoCodec.MPEG4); // (int)(cam.VideoResolution.AverageFrameRate / 3) logStr = String.Format("DoRecord({0}) with ({1},{2}) x {3}", filename, cam.VideoResolution.FrameSize.Width, cam.VideoResolution.FrameSize.Height, afr); Program.mf.log(logStr); // as long as we're recording // we dequeue the BitMaps waiting in the Queue and write them to the file while (IsRecording) { if (frames.Count > 0) { Bitmap bmp = frames.Dequeue(); writer.WriteVideoFrame(bmp); bmp.Dispose(); } } writer.Close(); }
private static void CreateVideo(Cam cam) { if (cam == null) throw new ArgumentNullException("cam"); string camSaveDirectory = PrepareSaveDirectory(cam.CamName); string videoFileName = String.Format("{0}{1} {2}.mpeg", camSaveDirectory, cam.CamName.Replace(":", ""), DateTime.Now.ToString("MMM-dd-yyyy-HH-mm")); if (File.Exists(videoFileName)) File.Delete(videoFileName); try { using (VideoFileWriter videoWriter = new VideoFileWriter()) { videoWriter.Open(videoFileName, MslCamConstants.FullDataProductWidth, MslCamConstants.FullDataProductHeight); int totalImageCount = 0; using (MSLScraperEntities mslContext = new MSLScraperEntities()) { totalImageCount = mslContext.SolImageData.Count(x => x.Cam.Contains(cam.CamName)); } int take = 30; int processedCount = 0; for (int skip = 0; skip < totalImageCount; skip = skip + take) { using (MSLScraperEntities mslContext = new MSLScraperEntities()) { var imagesToProcess = mslContext.SolImageData.Where(x => x.Cam.Contains(cam.CamName)).OrderBy(x => x.TimeStamp).Skip(skip).Take(take); foreach (SolImageData solImage in imagesToProcess) { using (MemoryStream ms = new MemoryStream(solImage.ImageData)) using (Bitmap bitmap = (Bitmap)Image.FromStream(ms)) { if (bitmap.Width == videoWriter.Width && bitmap.Height == videoWriter.Height) { using (Bitmap newBitmap = new Bitmap(bitmap.Width, bitmap.Height)) using (Graphics g = Graphics.FromImage(newBitmap)) { g.DrawImage(bitmap, 0, 0); g.DrawString(String.Format("{0} - Sol: {1}", solImage.Cam, solImage.Sol), new Font(FontFamily.GenericSansSerif, 30, FontStyle.Bold), Brushes.White, new PointF(10, 10)); for (int i = 0; i < 4; i++) { videoWriter.WriteVideoFrame(newBitmap); } } } } processedCount++; Console.Clear(); Console.WriteLine(string.Format("video processing: {0} of {1} images processed for {2}", processedCount, totalImageCount, cam.CamName)); } } } } } catch (Exception ex) { string errorMessage = String.Format("ERROR while creating video for {0}", cam.CamName); Console.WriteLine(String.Format("{0}: {1}", errorMessage, ex.Message)); errorCollection.Enqueue(new Exception(errorMessage, ex)); } }
private void button3_Click(object sender, EventArgs e) { SaveFileDialog sfVideoKaydet = new SaveFileDialog(); if (sfVideoKaydet.ShowDialog() != System.Windows.Forms.DialogResult.OK) { MessageBox.Show("Kayit Yeri Seçilmedi"); return; } int width = 100; int height = 100; Image ImgOrnek = (Image.FromFile("C:\\Users\\Halil\\Desktop\\newframes\\image0.jpg") as Bitmap).Clone() as Image; width = ImgOrnek.Width; height = ImgOrnek.Height; ImgOrnek.Dispose(); VideoFileWriter writer = new VideoFileWriter(); writer.Open(sfVideoKaydet.FileName, width, height, this.Videofps, VideoCodec.MPEG4); yol = sfVideoKaydet.FileName; Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb); DirectoryInfo dir = new DirectoryInfo(fbdFramePath.SelectedPath + "\\"); int FrameSayisi = dir.GetFiles().Length; for (int i = 0; i < FrameSayisi - 3; i++) { image = (Bitmap)Image.FromFile("C:\\Users\\Halil\\Desktop\\newframes\\image" + i + ".jpg"); writer.WriteVideoFrame(image); } writer.Close(); writer.Dispose(); MessageBox.Show("Video Olusturuldu"); btnGonder.Enabled = true; }
private void btn_encode_Click(object sender, EventArgs e) { if (oform != null && File.Exists(oform.FileName)) { //has a filestream been opened? hScrollBar1.Enabled = false; checkBox1.Enabled = false; btn_encode.Enabled = false; // create instance of video reader VideoFileReader reader = new VideoFileReader(); VideoFileWriter writer = new VideoFileWriter(); reader.Open(oform.FileName); if (checkBox1.Checked) { //Is the user requesting a AVI? writer.Open(apath + "output.wmv", 320, 200, reader.FrameRate, VideoCodec.WMV2); } // print some of its attributes logbox.Text += "Width: " + reader.Width + "px" + Environment.NewLine; logbox.Text += ("Height: " + reader.Height + "px" + Environment.NewLine); logbox.Text += ("Fps: " + reader.FrameRate + "fps"+ Environment.NewLine); logbox.Text += ("Codec: " + reader.CodecName + Environment.NewLine); logbox.Text += ("Frames: " + reader.FrameCount + Environment.NewLine); //start encoding classes TMVVideo tvid = new TMVVideo(); TMVEncoder tmv = new TMVEncoder(); //tmvframe.Threshold = hScrollBar1.Value; Bitmap videoFrame = new Bitmap(320,200); logbox.Text += "Conversion started @ " + DateTime.Now.ToString(); string logtxt = logbox.Text; logbox.Text += "Current Frame: 0"; TMVFont renderfont = new TMVFont(apath + "font.bin"); TMVFrame tframe; for (int i = 0; i < reader.FrameCount; i++) { videoFrame = resize_image(reader.ReadVideoFrame()); tframe = tmv.encode(videoFrame); tvid.addFrame(tframe); obox.Image = tframe.renderFrame(renderfont); pbar.Value = (int)((i * 100) / (reader.FrameCount-1)); logbox.Text = logtxt + Environment.NewLine + "Current Frame: " + i + "/" + (reader.FrameCount-1); if (checkBox1.Checked) { //Is the user requesting a AVI? writer.WriteVideoFrame((Bitmap)obox.Image); } if (closing) { return; } fbox.Image = videoFrame; Application.DoEvents(); } logbox.Text += Environment.NewLine + "All frames converted, attempting to interleave audio."; if (File.Exists(apath + "temp.wav")) { //remove any previous streams File.Delete(apath + "temp.wav"); } AviManager aviManager = new AviManager(oform.FileName, true); try { //try to read the stream AudioStream waveStream = aviManager.GetWaveStream(); logbox.Text += Environment.NewLine + "Audio stream found:"; logbox.Text += Environment.NewLine + "Sample Rate: " + waveStream.CountSamplesPerSecond.ToString(); logbox.Text += Environment.NewLine + "Bits:" + waveStream.CountBitsPerSample.ToString(); logbox.Text += Environment.NewLine + "Number of Channels: " + waveStream.CountChannels.ToString(); File.Delete(apath + "temp.wav"); waveStream.ExportStream(apath+"temp.wav"); waveStream.Close(); aviManager.Close(); byte[] audio_data = readWav(apath + "temp.wav"); if (reader.FrameRate > 99) { //sometimes frame rate is stored fixed point CRUDE tvid.setFPS((decimal)(reader.FrameRate / 10.0)); tvid.loadAudio(audio_data); tvid.save(); } else { tvid.setFPS(reader.FrameRate); tvid.loadAudio(audio_data); tvid.save(); } } catch { //error somewhere here, continue silent. logbox.Text += Environment.NewLine+"Error, source video does not have WAV audio, video will be silent."; if (reader.FrameRate > 99) { //sometimes frame rate is stored fixed point CRUDE tvid.setFPS((decimal)(reader.FrameRate / 10.0)); tvid.loadAudio(new Byte[reader.FrameCount]); tvid.save(); } else { tvid.setFPS(reader.FrameRate); tvid.loadAudio(new Byte[reader.FrameCount]); tvid.save(); } } logbox.Text += Environment.NewLine + "Conversion finished @ " + DateTime.Now.ToString(); writer.Close(); reader.Close(); hScrollBar1.Enabled = true; checkBox1.Enabled = true; btn_encode.Enabled = true; } else { logbox.Text += Environment.NewLine + "Error: Select a file (Using File -> Open) before attempting to encode."; } }
private void button1_Click_1(object sender, EventArgs e) { int width = 640; int height = 480; VideoFileWriter writer = new VideoFileWriter(); writer.Open(myFolderName + "\\" + "test_video.avi", width, height, 25, VideoCodec.MPEG4, 1000000); Bitmap image = new Bitmap(width, height); Graphics g = Graphics.FromImage(image); g.FillRectangle(Brushes.Black, 0, 0, width, height); Brush[] brushList = new Brush[] { Brushes.Green, Brushes.Red, Brushes.Yellow, Brushes.Pink, Brushes.LimeGreen }; Random rnd = new Random(); for (int i = 0; i < 250; i++) { int rndTmp = rnd.Next(1, 3); Application.DoEvents(); g.FillRectangle(brushList[i % 5], (i % width) * 2, (i % height) * 0.5f, i % 30, i % 30); g.FillRectangle(brushList[i % 5], (i % width) * 2, (i % height) * 2, i % 30, i % 30); g.FillRectangle(brushList[i % 5], (i % width) * 0.5f, (i % height) * 2, i % 30, i % 30); g.Save(); writer.WriteVideoFrame(image); } g.DrawString("(c) 2016 - Test Video", new System.Drawing.Font("Calibri", 30), Brushes.White, 80, 240); g.Save(); for (int i = 0; i < 125; i++) { writer.WriteVideoFrame(image); } writer.Close(); }
static void Main(string[] args) { int width = 512; int height = width; int[] framerates = {60, 120, 180}; double preamblePostamble = 0.5; // seconds double movieLength = 60.0; // seconds foreach (var framerate in framerates) { VideoFileWriter writer = new VideoFileWriter(); VideoCodec codec = VideoCodec.WMV2; string fname = "test." + codec.ToString() + "." + framerate.ToString("000") + "Hz." + movieLength.ToString() + "sec." + width.ToString() + "." + height.ToString() + ".avi"; writer.Open(fname, width, height, framerate, codec); RectangleF rectText = new RectangleF(width / 2, 0, width / 2, height); RectangleF rectBlock = new RectangleF(0, 0, width / 2, height); Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb); SolidBrush brushWhite = new SolidBrush(Color.White); SolidBrush brushBlack = new SolidBrush(Color.Black); var font = new Font("Tahoma", width <= 64 ? 8 : width <= 128 ? 12 : width <=256 ? 16 : 20); // Preamble for (int i = 0; i < (int)(framerate * preamblePostamble); i++) { using (Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Black); g.Flush(); } writer.WriteVideoFrame(bmp); } for (int i = 0; i < (int)(framerate * movieLength); i++) { bmp.SetPixel(i % width, i % height, Color.Blue); using (Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Black); g.SmoothingMode = SmoothingMode.AntiAlias; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.DrawString(i.ToString(), font, Brushes.White, rectText); g.FillRectangle(((i & 1) == 0) ? brushWhite : brushBlack, rectBlock); g.Flush(); } writer.WriteVideoFrame(bmp); } // Postamble for (int i = 0; i < (int)(framerate * preamblePostamble); i++) { using (Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Black); g.Flush(); } writer.WriteVideoFrame(bmp); } writer.Close(); } }
private void StartInternal( RecordSettings settings ) { try { _stopwatch = _stopwatch ?? new Stopwatch(); _stopwatch.Reset(); _stopwatch.Start(); StopWaiter.Reset(); if ( !Directory.Exists( settings.OutputPath ) ) Directory.CreateDirectory( settings.OutputPath ); while ( Recording ) { var outfile = Path.Combine( settings.OutputPath, DateTime.Now.ToFileTime().ToString() + ".avi" ); using (var outstream = new VideoFileWriter()) { var sourceRect = settings.CaptureRectangle; var w = sourceRect.Width; var h = sourceRect.Height; outstream.Open( outfile, w, h, settings.Fps, settings.Codec, settings.Bitrate ); var mpf = settings.SplitInterval * 60000 / settings.Interval; using ( var bmp = new Bitmap( w, h ) ) { using ( var gr = Graphics.FromImage( bmp ) ) { for ( var i = 0; (mpf==null||i < mpf) && Recording; i++ ) { try { gr.CopyFromScreen( sourceRect.X, sourceRect.Y, 0, 0, sourceRect.Size ); PreprocessFrame( gr, settings ); gr.Flush(); outstream.WriteVideoFrame( bmp ); settings.OnFrameWritten?.Invoke( _stopwatch.Elapsed ); } catch { } Thread.Sleep( settings.Interval ); } } } } } } catch(Exception ex) { //global } finally { _stopwatch?.Stop(); StopWaiter.Set(); } }
private void CreateVideo() { // Start a new video file VideoFileWriter vfw = new VideoFileWriter(); vfw.Open("Test.avi", mat.Width, mat.Height, 30, VideoCodec.Default); // create an image that we are going to use for the buffering of the next frame Bitmap bitmap = new Bitmap(mat.Width, mat.Height); FxMaths.Images.FxImages nextFrameImage = FxMaths.Images.FxTools.FxImages_safe_constructors(bitmap); // Start the simulation simulation.Start(); var imTarget = imPerson * 0.1f + 0.5f; for (int i = 0; i < 2000; i++) { // Set to zero value mat.DrawMatrix(shopPlan, new FxVector2f(0, 0), new FxVector2f(mat.Width, mat.Height), FxMatrixF.DrawInterpolationMethod.Linear); //mat.SetValue(1); // white // Draw the target points if(true) foreach(var t in targetList) { var size = new FxVector2f(20 * resize.x, 20 * resize.y); var center = size / 2; // Draw a circle per person mat.DrawMatrix(imTarget, imPersonMask, t - center, size, FxMatrixF.DrawInterpolationMethod.Linear); } lock (shop) { var size = new FxVector2f(50 * resize.x, 50 * resize.y); var center = size / 2; // move the blobs in random directions foreach (var person in shop.personList) { // Draw a circle per person mat.DrawMatrix(imPerson, imPersonMask, person.Position - center, size, FxMatrixF.DrawInterpolationMethod.Linear); } } // Update the bitmap that we write to image nextFrameImage.Load(mat, new FxMaths.Images.ColorMap(FxMaths.Images.ColorMapDefaults.Gray)); vfw.WriteVideoFrame(bitmap); // Update showing image im.UpdateInternalImage(mat, new FxMaths.Images.ColorMap(FxMaths.Images.ColorMapDefaults.Gray)); canvas1.ReDraw(); if (i % 10 == 0) Console.WriteLine("Write Frame:" + i.ToString()); } // Stop the simulation simulation.Stop(); vfw.Close(); }
private void captureLoop(object parameters) { dynamic p = parameters; //Precompute size parameters s.t. actual width/height are multiples of two and requested width/height are the window size Thickness borderThickness = p.BorderThickness; int bLeft = (int)borderThickness.Left; int bRight = (int)borderThickness.Right; int bTop = (int)borderThickness.Top; int bBottom = (int)borderThickness.Bottom; int requestedWidth = p.Width - bLeft - bRight; int requestedHeight = p.Height - bTop - bBottom; int actualWidth = requestedWidth + requestedWidth % 2; //Enforce multiple of two int actualHeight = requestedHeight + requestedHeight % 2; //Enforce multiple of two int left = p.Left; int top = p.Top; System.Drawing.Size requestedSize = new System.Drawing.Size(requestedWidth, requestedHeight); //Generate the render surfaces Bitmap requestedRenderBitmap = new Bitmap(requestedWidth, requestedHeight); Graphics requestedRenderGraphics = Graphics.FromImage(requestedRenderBitmap); Bitmap actualRenderBitmap = new Bitmap(actualWidth, actualHeight); Graphics actualRenderGraphics = Graphics.FromImage(actualRenderBitmap); //Create a timer for keeping loop time as consistent as possible Stopwatch loopTimer = new Stopwatch(); //Timer for timing each iteration of the loop (for convenience) Stopwatch fullCaptureTimer = new Stopwatch(); //Timer for timing the full capture int performanceCounter = 0; //Create a local variable for tracking performance in number of ms per loop interval missed int maxFrameRateDeviation = 0; //Create a local variable for tracking the maximum frame rate deviation int deviationCount = 0; //Count the number of frames which did not successfully meet their timing constraint int framesWritten = 0; //Count the number of frames which have been written to file //Create output stream VideoFileWriter writer = new VideoFileWriter(); writer.Open(imageDirPath + outputFilename, actualWidth, actualHeight, frameRateScaleFactor / captureInterval, VideoCodec.MPEG4, bitRate); //Open mp4 file using multiple of two width and height //Start the full capture timer fullCaptureTimer.Start(); //Begin capturing int i; for (i = 0; i < maxCaptureLength; i++) { loopTimer.Restart(); //Restart the timer for loop speed regulating //Copy the screen requestedRenderGraphics.CopyFromScreen(left + bLeft, top + bTop, 0, 0, requestedSize); //Draw the cursor on the image CURSORINFO pci; pci.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(CURSORINFO)); if (GetCursorInfo(out pci)) { if (pci.flags == CURSOR_SHOWING) { DrawIconEx(requestedRenderGraphics.GetHdc(), pci.ptScreenPos.x - left - bLeft - cursorOffsetLeft, pci.ptScreenPos.y - top - bTop - cursorOffsetTop, pci.hCursor, 0, 0, 0, IntPtr.Zero, DI_MASK | DI_IMAGE | DI_COMPAT); requestedRenderGraphics.ReleaseHdc(); } } //Output to Video actualRenderGraphics.DrawImage(requestedRenderBitmap, 0, 0); //Render the graphics down to the output surface writer.WriteVideoFrame(actualRenderBitmap); //Write the frame to the output stream framesWritten++; p = this.Dispatcher.Invoke(new GetParameterUpdateCallback(GetParameterUpdate), null); //Update the system parameters (only position is used) if (p != null) { //Update the movement variables if they're valid left = p.Left; top = p.Top; } loopTimer.Stop(); //Stop the timer //If we've gone over time, increment the performance counter by the number of ms we missed by int deviation = (long)captureInterval < loopTimer.ElapsedMilliseconds ? (int)(loopTimer.ElapsedMilliseconds - (long)captureInterval) : 0; if (deviation > 0) deviationCount++; if (deviation > maxFrameRateDeviation) maxFrameRateDeviation = deviation; //Set the new max if appropriate performanceCounter += deviation; //Computer makeup frames and duplicate write as many times as is necessary int expectedFrames = (int)((double)fullCaptureTimer.ElapsedMilliseconds / (double)captureInterval); for (int frameCount = framesWritten; framesWritten<expectedFrames; framesWritten++) //For as many times as we can subtract the frame interval from the makeup counter (meaning how many frames we missed by taking too long) writer.WriteVideoFrame(actualRenderBitmap); //Write the frame to the output stream //Watch for shutdown condition if (requestThreadShutdown) { //Stop the full capture timer to see how well we did fullCaptureTimer.Stop(); //Exit the capture loop break; } //If we're under time, sleep until it's time to start again Thread.Sleep((long)captureInterval > loopTimer.ElapsedMilliseconds ? (int)((long)captureInterval - loopTimer.ElapsedMilliseconds) : 0); } //Close the output stream writer.Close(); //Reenable the form recordButton.Dispatcher.Invoke(new ReEnableFormCallback(ReEnableForm), null); //Show performance this.Dispatcher.Invoke(new ShowPopupCallback(ShowPopup), new object[] { "Finished with " + (performanceCounter / i) + "ms average framerate deviation, " + deviationCount + "/" + (i + 1) + " total missed frames, and " + maxFrameRateDeviation + "ms maximum frame deviation.\r\nFound "+framesWritten+" frames; expected "+(fullCaptureTimer.ElapsedMilliseconds/captureInterval)+".\r\n<Click to Close...>" }); }
public void DoWork() { try { if (CaptureBuffer.fps > 0) { writer = new VideoFileWriter(); writer.Open(filePath, CaptureBuffer.width, CaptureBuffer.height, CaptureBuffer.fps, VideoCodec.MPEG4, 2000000); foreach (Bitmap bmp in frames) { writer.WriteVideoFrame(bmp); } // Close the writer writer.Close(); writer = null; foreach (Bitmap bmp in frames) { bmp.Dispose(); } frames = null; // Upload the file to the server. WebClient myWebClient = new WebClient(); NetworkCredential myCredentials = new NetworkCredential("snijhof", "MKD7529s09"); myWebClient.Credentials = myCredentials; byte[] responseArray = myWebClient.UploadFile("ftp://student.aii.avans.nl/GRP/42IN11EWd/Videos/" + fileName, filePath); String temp = System.Text.Encoding.ASCII.GetString(responseArray); // Decode and display the response. Console.WriteLine("\nResponse Received.The contents of the file uploaded are:\n{0}", System.Text.Encoding.ASCII.GetString(responseArray)); } } catch (Exception e) { Console.Write(e.StackTrace); } }
static void Main(string[] args) { var parserResults = Parser.Default.ParseArguments<Options>(args); if (parserResults.Tag == ParserResultType.NotParsed) { Console.WriteLine( new HelpText { AddDashesToOption = true } .AddPreOptionsLine("HeatMapVideoBuilder") .AddPreOptionsLine("") .AddOptions(parserResults).ToString()); return; } var options = (parserResults as Parsed<Options>).Value; bool hasArgumentErrors = false; Image backgroundImage = null; IList<Image> spriteImages = new List<Image>(); IList<SizeF> halfSpriteSize = new List<SizeF>(); Image residualSpriteImage = null; Point mapOrigin = Point.Empty; Size mapSize = Size.Empty; Point dataOrigin = Point.Empty; Size dataSize = Size.Empty; IList<HeatMapData> heatMapData = new List<HeatMapData>(); try { backgroundImage = Bitmap.FromFile(options.Background); } catch (Exception e) { Console.Error.WriteLine("Failed to load background image \"{0}\":\n\n{1}\n\n", options.Background, e); hasArgumentErrors = true; } try { mapOrigin = string.IsNullOrWhiteSpace(options.MapOrigin) ? Point.Empty : ParsePoint(options.MapOrigin); } catch (Exception e) { Console.Error.WriteLine("Failed to parse map origin \"{0}\":\n\n{1}\n\n", options.MapOrigin, e); hasArgumentErrors = true; } try { mapSize = string.IsNullOrWhiteSpace(options.MapSize) ? new Size(backgroundImage.Size.Width - mapOrigin.X, backgroundImage.Size.Height - mapOrigin.Y) : ParseSize(options.MapSize); } catch (Exception e) { Console.Error.WriteLine("Failed to parse map size \"{0}\":\n\n{1}\n\n", options.MapSize, e); hasArgumentErrors = true; } try { dataOrigin = string.IsNullOrWhiteSpace(options.DataOrigin) ? mapOrigin : ParsePoint(options.DataOrigin); } catch (Exception e) { Console.Error.WriteLine("Failed to parse data origin \"{0}\":\n\n{1}\n\n", options.DataOrigin, e); hasArgumentErrors = true; } try { dataSize = string.IsNullOrWhiteSpace(options.DataSize) ? mapSize : ParseSize(options.DataSize); } catch (Exception e) { Console.Error.WriteLine("Failed to parse data size \"{0}\":\n\n{1}\n\n", options.DataSize, e); hasArgumentErrors = true; } foreach (var spriteFile in options.SpriteFiles) { try { var sprite = Bitmap.FromFile(spriteFile); spriteImages.Add(sprite); halfSpriteSize.Add(new SizeF(sprite.Width / 2.0f, sprite.Height / 2.0f)); } catch (Exception e) { Console.Error.WriteLine("Failed to load heat map sprite image \"{0}\":\n\n{1}\n\n", spriteFile, e); hasArgumentErrors = true; } } if (string.IsNullOrWhiteSpace(options.ResidualSpriteFile)) { residualSpriteImage = spriteImages.First(); } else { try { residualSpriteImage = Bitmap.FromFile(options.ResidualSpriteFile); } catch (Exception e) { Console.Error.WriteLine("Failed to load heat map sprite image \"{0}\":\n\n{1}\n\n", options.ResidualSpriteFile, e); hasArgumentErrors = true; } } foreach (var inputFile in options.InputFile) { try { var json = File.ReadAllText(inputFile); var currentHeatMapData = JsonConvert.DeserializeObject<HeatMapData>(json); if ((currentHeatMapData.Timestamps == null)) { throw new Exception("Heat map data is missing a times array. This must be an array in a root object and contain time in milliseconds."); } if ((currentHeatMapData.X == null)) { throw new Exception("Heat map data is missing an x coordinate array. This must be an array in a root object."); } if ((currentHeatMapData.Y == null)) { throw new Exception("Heat map data is missing an y coordinate array. This must be an array in a root object."); } if ((currentHeatMapData.Timestamps.Count != currentHeatMapData.X.Count) || (currentHeatMapData.Timestamps.Count != currentHeatMapData.Y.Count)) { throw new Exception("Heat map data arrays are not equal length."); } heatMapData.Add(currentHeatMapData); } catch (Exception e) { Console.Error.WriteLine("Failed to load heat map data from \"{0}\":\n\n{1}\n\n", options.InputFile, e); hasArgumentErrors = true; } } if (hasArgumentErrors) { return; } var frameRate = 25; var scaledFrameRate = options.TimeScale / frameRate; var timeDelta = (int) (1000 * scaledFrameRate); var width = backgroundImage.Width; var height = backgroundImage.Height; var fullRect = new Rectangle(0, 0, width, height); var xScaling = mapSize.Width / (float) dataSize.Width; var yScaling = mapSize.Height / (float) dataSize.Height; var compositeImage = new Bitmap(width, height, PixelFormat.Format32bppArgb); var compositeImageGraphics = Graphics.FromImage(compositeImage); compositeImageGraphics.CompositingMode = CompositingMode.SourceOver; compositeImageGraphics.CompositingQuality = CompositingQuality.HighSpeed; var heatMapBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb); var heatMapBufferGraphics = Graphics.FromImage(heatMapBuffer); heatMapBufferGraphics.CompositingMode = CompositingMode.SourceOver; heatMapBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed; var residualBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb); var residualBufferGraphics = Graphics.FromImage(residualBuffer); residualBufferGraphics.CompositingMode = CompositingMode.SourceOver; residualBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed; var tempBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb); var tempBufferGraphics = Graphics.FromImage(tempBuffer); tempBufferGraphics.CompositingMode = CompositingMode.SourceOver; tempBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed; var currentTime = 0; var currentIndices = Enumerable.Repeat(0, heatMapData.Count).ToArray(); var heatMapDataDone = Enumerable.Repeat(false, heatMapData.Count).ToArray(); var outputDirectory = Path.GetDirectoryName(options.OutputFile); if (!Directory.Exists(outputDirectory)) { Directory.CreateDirectory(outputDirectory); } var videoWriter = new VideoFileWriter(); if (options.BitRate == 0) { videoWriter.Open(options.OutputFile, width, height, frameRate, VideoCodec.MPEG4); } else { videoWriter.Open(options.OutputFile, width, height, frameRate, VideoCodec.MPEG4, options.BitRate); } compositeImageGraphics.DrawImage(backgroundImage, Point.Empty); compositeImageGraphics.Save(); videoWriter.WriteVideoFrame(compositeImage); var alphaFade = frameRate / options.Duration; var heatMapFadeMatrix = new ColorMatrix(); heatMapFadeMatrix.Matrix33 = 0.95f;// alphaFade; var heatMapFadeImageAttributes = new ImageAttributes(); heatMapFadeImageAttributes.SetColorMatrix(heatMapFadeMatrix); var residualFadeMatrix = new ColorMatrix(); residualFadeMatrix.Matrix00 = 0.45f; residualFadeMatrix.Matrix01 = 0.45f; residualFadeMatrix.Matrix02 = 0.45f; residualFadeMatrix.Matrix10 = 0.45f; residualFadeMatrix.Matrix11 = 0.45f; residualFadeMatrix.Matrix12 = 0.45f; residualFadeMatrix.Matrix20 = 0.45f; residualFadeMatrix.Matrix21 = 0.45f; residualFadeMatrix.Matrix22 = 0.45f; var residualFadeImageAttributes = new ImageAttributes(); residualFadeImageAttributes.SetColorMatrix(residualFadeMatrix); var lastTime = 0u; var endPadding = 8 * options.Duration * frameRate; var font = new Font("Consolas", 10.0f); var pens = new[] { new Pen(Color.FromArgb(unchecked((int) 0x080000FF))), new Pen(Color.FromArgb(unchecked((int) 0x08FF0000))) }; residualBufferGraphics.CompositingMode = CompositingMode.SourceOver; while ((heatMapDataDone.Any(isDone => !isDone)) || (currentTime < (lastTime + endPadding))) { // Process the accumulation buffer. //tempBufferGraphics.FillRectangle(Brushes.White, 0, 0, width, height); //tempBufferGraphics.CompositingMode = CompositingMode.SourceCopy; //tempBufferGraphics.DrawImage(residualBuffer, fullRect, 0, 0, width, height, GraphicsUnit.Pixel, residualFadeImageAttributes); //tempBufferGraphics.Save(); //residualBufferGraphics.FillRectangle(Brushes.Transparent, 0, 0, width, height); //residualBufferGraphics.CompositingMode = CompositingMode.SourceCopy; //residualBufferGraphics.DrawImage(tempBuffer, Point.Empty); //residualBufferGraphics.CompositingMode = CompositingMode.SourceOver; // Process the accumulation buffer. tempBufferGraphics.FillRectangle(Brushes.White, 0, 0, width, height); tempBufferGraphics.CompositingMode = CompositingMode.SourceCopy; tempBufferGraphics.DrawImage(heatMapBuffer, fullRect, 0, 0, width, height, GraphicsUnit.Pixel, heatMapFadeImageAttributes); tempBufferGraphics.Save(); heatMapBufferGraphics.FillRectangle(Brushes.Transparent, 0, 0, width, height); heatMapBufferGraphics.CompositingMode = CompositingMode.SourceCopy; heatMapBufferGraphics.DrawImage(tempBuffer, Point.Empty); heatMapBufferGraphics.CompositingMode = CompositingMode.SourceOver; // Write the new heat map data into the heat map buffer. for (var i = 0; i < timeDelta; ++i) { ++currentTime; var heatMapIndex = 0; var spriteIndex = 0; foreach (var heatMapDataInstance in heatMapData) { var currentIndex = currentIndices[heatMapIndex]; while ((currentIndex < heatMapDataInstance.Timestamps.Count) && (heatMapDataInstance.Timestamps[currentIndex] < currentTime)) { lastTime = heatMapDataInstance.Timestamps[currentIndex]; var x = (heatMapDataInstance.X[currentIndex] - dataOrigin.X) * xScaling + mapOrigin.X; var y = (heatMapDataInstance.Y[currentIndex] - dataOrigin.Y) * yScaling + mapOrigin.Y; //residualBufferGraphics.DrawImage(residualSpriteImage, x, y); residualBufferGraphics.DrawRectangle(pens[heatMapIndex], x -1, y -1, 3, 3); x -= halfSpriteSize[spriteIndex].Width; y -= -halfSpriteSize[spriteIndex].Height; heatMapBufferGraphics.DrawImage(spriteImages[spriteIndex], x, y); ++currentIndex; } currentIndices[heatMapIndex] = currentIndex; if (currentIndex >= heatMapDataInstance.Timestamps.Count) { heatMapDataDone[heatMapIndex] = true; } if (spriteIndex < spriteImages.Count - 1) { ++spriteIndex; } ++heatMapIndex; } } residualBufferGraphics.Save(); heatMapBufferGraphics.Save(); compositeImageGraphics.DrawImage(backgroundImage, Point.Empty); compositeImageGraphics.DrawImage(residualBuffer, Point.Empty); //compositeImageGraphics.DrawImage(heatMapBuffer, Point.Empty); var text = new TimeSpan(0, 0, 0, 0, currentTime).ToString(@"h\:mm\:ss"); for (var i = -1; i <= 1; ++i) { for (var j = -1; j <= 1; ++j) { compositeImageGraphics.DrawString(text, font, Brushes.Black, 2 + i, 2 + j); } } compositeImageGraphics.DrawString(text, font, Brushes.White, 2, 2); compositeImageGraphics.Save(); videoWriter.WriteVideoFrame(compositeImage); } videoWriter.Close(); }
private void Record() { _stopWrite = false; MainForm.RecordingThreads++; string previewImage = ""; DateTime recordingStart = DateTime.MinValue; if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null) { string[] tid = Camobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.RecordSwitch(true); break; case "2": CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null) cw.RecordSwitch(true); break; } } try { if (_writerBuffer != null) _writerBuffer.Clear(); _writerBuffer = new QueueWithEvents<FrameAction>(); _writerBuffer.Changed += WriterBufferChanged; DateTime date = DateTime.Now; string filename = String.Format("{0}-{1}-{2}_{3}-{4}-{5}", date.Year, Helper.ZeroPad(date.Month), Helper.ZeroPad(date.Day), Helper.ZeroPad(date.Hour), Helper.ZeroPad(date.Minute), Helper.ZeroPad(date.Second)); var vc = VolumeControl; if (vc != null && vc.Micobject.settings.active) { vc.ForcedRecording = ForcedRecording; vc.StartSaving(); } VideoFileName = Camobject.id + "_" + filename; string folder = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\"; string avifilename = folder + VideoFileName + CodecExtension; bool error = false; double maxAlarm = 0; try { int w, h; GetVideoSize(out w, out h); Program.WriterMutex.WaitOne(); try { Writer = new VideoFileWriter(); if (vc == null || vc.AudioSource==null) Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec, CalcBitRate(Camobject.recorder.quality), CodecFramerate); else { Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec, CalcBitRate(Camobject.recorder.quality), CodecAudio, CodecFramerate, vc.AudioSource.RecordingFormat.BitsPerSample * vc.AudioSource.RecordingFormat.SampleRate * vc.AudioSource.RecordingFormat.Channels, vc.AudioSource.RecordingFormat.SampleRate, vc.AudioSource.RecordingFormat.Channels); } } catch { ForcedRecording = false; if (vc != null) { vc.ForcedRecording = false; vc.StopSaving(); } throw; } finally { Program.WriterMutex.ReleaseMutex(); } FrameAction? peakFrame = null; foreach(FrameAction fa in _videoBuffer.OrderBy(p=>p.Timestamp)) { try { using (var ms = new MemoryStream(fa.Frame)) { using (var bmp = (Bitmap)Image.FromStream(ms)) { if (recordingStart == DateTime.MinValue) { recordingStart = fa.Timestamp; } Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart); } if (fa.MotionLevel > maxAlarm || peakFrame == null) { maxAlarm = fa.MotionLevel; peakFrame = fa; } _motionData.Append(String.Format(CultureInfo.InvariantCulture, "{0:0.000}", Math.Min(fa.MotionLevel*1000, 100))); _motionData.Append(","); ms.Close(); } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } } _videoBuffer.Clear(); if (vc != null && vc.AudioBuffer != null) { foreach (VolumeLevel.AudioAction aa in vc.AudioBuffer.OrderBy(p=>p.TimeStamp)) { unsafe { fixed (byte* p = aa.Decoded) { if ((aa.TimeStamp - recordingStart).TotalMilliseconds>=0) Writer.WriteAudio(p, aa.Decoded.Length); } } } vc.AudioBuffer.Clear(); } if (recordingStart == DateTime.MinValue) recordingStart = DateTime.Now; while (!_stopWrite) { while (_writerBuffer.Count > 0) { var fa = _writerBuffer.Dequeue(); try { using (var ms = new MemoryStream(fa.Frame)) { var bmp = (Bitmap) Image.FromStream(ms); Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart); bmp.Dispose(); bmp = null; if (fa.MotionLevel > maxAlarm || peakFrame == null) { maxAlarm = fa.MotionLevel; peakFrame = fa; } _motionData.Append(String.Format(CultureInfo.InvariantCulture, "{0:0.000}", Math.Min(fa.MotionLevel*1000, 100))); _motionData.Append(","); ms.Close(); } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } if (vc != null && vc.WriterBuffer != null) { try { while (vc.WriterBuffer.Count > 0) { var b = vc.WriterBuffer.Dequeue(); unsafe { fixed (byte* p = b.Decoded) { Writer.WriteAudio(p, b.Decoded.Length); } } } } catch { //can fail if the control is switched off/removed whilst recording } } } _newRecordingFrame.WaitOne(200); } if (!Directory.Exists(folder + @"thumbs\")) Directory.CreateDirectory(folder + @"thumbs\"); if (peakFrame != null) { using (var ms = new MemoryStream(peakFrame.Value.Frame)) { using (var bmp = (Bitmap)Image.FromStream(ms)) { bmp.Save(folder + @"thumbs\" + VideoFileName + "_large.jpg", MainForm.Encoder, MainForm.EncoderParams); Image.GetThumbnailImageAbort myCallback = ThumbnailCallback; using (var myThumbnail = bmp.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero)) { myThumbnail.Save(folder + @"thumbs\" + VideoFileName + ".jpg", MainForm.Encoder, MainForm.EncoderParams); } } previewImage = folder + @"thumbs\" + VideoFileName + ".jpg"; ms.Close(); } } } catch (Exception ex) { error = true; Log.Error("Camera " + Camobject.id, ex); } finally { _stopWrite = false; if (Writer != null) { Program.WriterMutex.WaitOne(); try { Writer.Close(); Writer.Dispose(); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } finally { Program.WriterMutex.ReleaseMutex(); } Writer = null; } try { _writerBuffer.Clear(); } catch { } _writerBuffer = null; _recordingTime = 0; if (vc != null && vc.Micobject.settings.active) VolumeControl.StopSaving(); } if (error) { try { FileOperations.Delete(filename + CodecExtension); } catch { } MainForm.RecordingThreads--; return; } string path = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\" + VideoFileName; bool yt = Camobject.settings.youtube.autoupload && MainForm.Conf.Subscribed; string[] fnpath = (path + CodecExtension).Split('\\'); string fn = fnpath[fnpath.Length - 1]; var fpath = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\thumbs\\"; var fi = new FileInfo(path + CodecExtension); var dSeconds = Convert.ToInt32((DateTime.Now - recordingStart).TotalSeconds); FilesFile ff = FileList.FirstOrDefault(p => p.Filename.EndsWith(fn)); bool newfile = false; if (ff == null) { ff = new FilesFile(); newfile = true; } ff.CreatedDateTicks = DateTime.Now.Ticks; ff.Filename = fn; ff.MaxAlarm = Math.Min(maxAlarm * 1000, 100); ff.SizeBytes = fi.Length; ff.DurationSeconds = dSeconds; ff.IsTimelapse = false; ff.AlertData = Helper.GetMotionDataPoints(_motionData); _motionData.Clear(); ff.TriggerLevel = (100-Camobject.detector.minsensitivity); //adjusted if (newfile) { FileList.Insert(0, ff); if (!MainForm.MasterFileList.Any(p => p.Filename.EndsWith(fn))) { MainForm.MasterFileList.Add(new FilePreview(fn, dSeconds, Camobject.name, DateTime.Now.Ticks, 2, Camobject.id, ff.MaxAlarm)); if (TopLevelControl != null) { string thumb = fpath + fn.Replace(CodecExtension, ".jpg"); ((MainForm)TopLevelControl).AddPreviewControl(thumb, path + CodecExtension, dSeconds, DateTime.Now, true); } } if (yt) { if (CodecExtension!=".mp4") Log.Info("Skipped youtube upload (only upload mp4 files)."); else { try { YouTubeUploader.AddUpload(Camobject.id, fn, Camobject.settings.youtube.@public, "", ""); } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } } } } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); } MainForm.RecordingThreads--; Camobject.newrecordingcount++; if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null) { string[] tid = Camobject.recorder.trigger.Split(','); switch (tid[0]) { case "1": VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1])); if (vl != null) vl.RecordSwitch(false); break; case "2": CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1])); if (cw != null) cw.RecordSwitch(false); break; } } if (Notification != null) Notification(this, new NotificationType("NewRecording", Camobject.name, previewImage)); }
private void saveshot() { string str = Url; string[] sAry = str.Split('.'); Url2 = sAry[0]; VideoFileReader reader = new VideoFileReader(); reader.Open(textBox1.Text); int co = 0; int end = int.Parse(reader.FrameCount.ToString()); int countFrameCut = 0; VideoFileWriter writerShort = new VideoFileWriter(); name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(countFrameCut) + ".avi"; videoname = Url2 + "_" + countFrameCut + ".avi"; writerShort.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000); for (int i = 0; i < end; i++) { Bitmap videoFrame = reader.ReadVideoFrame(); writerShort.WriteVideoFrame(videoFrame); videoFrame.Dispose(); if (i == Savei[countFrameCut]) { // cut short writerShort.Close(); keyFrame(); if (countCutFrame != countFrameCut) { name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(countFrameCut) + ".avi"; videoname = Url2 + "_" + countFrameCut + ".avi"; writerShort.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000); } countFrameCut++; } } writerShort.Close(); reader.Close(); /* for (int i = 0; i < Savei.Length; i++) { if (Savei[i] == 0) { if (co == 0) { Savei[i] = end; co = 1; } else { break; } } VideoFileWriter writer = new VideoFileWriter(); try { name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(i) + ".avi"; videoname = Url2 + "_" + i + ".avi"; writer.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000); for (int j = 0; j < end; j++) { if (Savei[i] == j) { writer.Close(); break; } Bitmap videoFrame = reader.ReadVideoFrame(); writer.WriteVideoFrame(videoFrame); videoFrame.Dispose(); } } catch (Exception exception) { writer.Close(); } if (i == 0) { end = end - Savei[i]; } else { end = end - Math.Abs(Savei[i] - Savei[i - 1]); } keyFrame(); //string constr = ConfigurationManager.ConnectionStrings["Db"].ConnectionString; //SqlConnection con = new SqlConnection(constr); //con.Open(); //SqlCommand cmd = new SqlCommand("INSERT into CollectionShot (No,VideoName,PathVideoName,KeyFrame,HistrogrameVecter) " + // " VALUES ( (Select count(*) from CollectionShot ),'" + videoname + "','" + name + "' , '" + keyF + "','" + Vechist + "')", con); //cmd.ExecuteNonQuery(); //con.Close(); } reader.Close(); */ }
private void Video_Player_NewFrame(object sender, ref Bitmap image) { //录像 Graphics g = Graphics.FromImage(image); SolidBrush drawBrush = new SolidBrush(Color.Red); Font drawFont = new Font("Arial", 4, FontStyle.Italic, GraphicsUnit.Millimeter); int xPos = image.Width - (image.Width - 15); int yPos = 10; //写到屏幕上的时间 drawDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); g.DrawString(drawDate, drawFont, drawBrush, xPos, yPos); if (!Directory.Exists(videoPath)) Directory.CreateDirectory(videoPath); //开始录像 if (createNewFile) { //videoFileName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".flv"; videoFileName = "wuwh.flv"; videoFileFullPath = videoPath + "/" + videoFileName; createNewFile = false; if (videoWriter != null) { videoWriter.Close(); videoWriter.Dispose(); } videoWriter = new VideoFileWriter(); //这里必须是全路径,否则会默认保存到程序运行根据录下了 videoWriter.Open(videoFileFullPath, image.Width, image.Height, frameRate, VideoCodec.FLV1); videoWriter.WriteVideoFrame(image); VideoFileSource videoFileSource = new VideoFileSource(videoFileFullPath); } else { videoWriter.WriteVideoFrame(image); } }
private void button1_Click(object sender, EventArgs e) { myOutputName = Path.GetFileName(myFileName) + ((videoType == 0) ? ".mp4" : ".avi"); using (var videoWriter = new VideoFileWriter()) { int maxI = 1, progrB=0; progrB = maxI * secs * fps; progressBar1.Maximum = progrB; progressBar1.Step = 1; progressBar1.Value = 0; toolStripStatusLabel1.Text = "Running..."; /* Supported Formats: Raw Raw (uncompressed) video. MPEG2 MPEG-2 part 2. FLV1 Flash Video (FLV) / Sorenson Spark / Sorenson H.263. H263P H.263+ / H.263-1998 / H.263 version 2. MSMPEG4v3 MPEG-4 part 2 Microsoft variant version 3. MSMPEG4v2 MPEG-4 part 2 Microsoft variant version 2. WMV2 Windows Media Video 8. WMV1 Windows Media Video 7. MPEG4 MPEG-4 part 2. Default Default video codec, which FFmpeg library selects for the specified file format. missing : H264 */ videoWriter.Open(myFolderName + "\\" + myOutputName, width, height, fps, ((videoType == 0) ? VideoCodec.MPEG2 : VideoCodec.MPEG4)); //videoWriter.Open(myFolderName + "\\" + myOutputName, width, height, fps, ((videoType == 0) ? VideoCodec.H263P : VideoCodec.MPEG4)); //Files //for (int i =0;i < filesFound.Count;i++) for (int i = 0; i < maxI; i++) { //using (Bitmap image = Bitmap.FromFile(filesFound[i]) as Bitmap) using (Bitmap image = Bitmap.FromFile(myFileName) as Bitmap) { if (textBoxWaterMark.Text != null) myText = textBoxWaterMark.Text; else myText = ""; Bitmap imageResized = ResizeIt(image, width, height, myText); //Seconds for (int j = 0; j < secs; j++) { //Frames for (int k = 0; k < fps; k++) { videoWriter.WriteVideoFrame(imageResized); progressBar1.PerformStep(); } } } } videoWriter.Close(); //progressBar1.Value = 0; toolStripStatusLabel1.Text = "Done"; } }
/// <summary> /// Method for rendering and saving the video to a new file. All settings are set in the ProjectSettings class. /// </summary> // TODO add sound, use constructor with parameters in a factory patern public static void RenderVideo() { ProjectSettings settings = ProjectSettings.GetSettings(); // TODO moove to Widget if (string.IsNullOrEmpty(settings.GPXPath)) { throw new ArgumentNullException("No track file was selected!"); } new GPXFileLoader().LoadPoints(settings.GPXPath); List<Widget> activeWidgets = UpdateActiveWidgets(); VideoFileWriter writer = new VideoFileWriter(); // open video file reader.Open(settings.VideoInputPath); VideoDimensions = new Size(reader.Width, reader.Height); float framerate = reader.FrameRate; // create new AVI file and open it var encoding = (VideoCodec)Enum.Parse(typeof(VideoCodec), settings.Format.ToString()); if (string.IsNullOrEmpty(settings.VideoOutputPath)) { throw new ArgumentNullException("No output video file was specified!"); } writer.Open(settings.VideoOutputPath, reader.Width, reader.Height, reader.FrameRate, encoding, settings.VideoQuality * 1000000); videoEnd = (int)(settings.VideoEnd * reader.FrameRate); videoStart = (int)(settings.VideoStart * reader.FrameRate); if (videoEnd == 0 || videoEnd > reader.FrameCount) { videoEnd = reader.FrameCount; } int speed = settings.VideoSpeed; for (long currentFrameNumber = 0; currentFrameNumber < videoEnd - speed; currentFrameNumber++) { Bitmap videoFrame = GetFrame(reader, speed, ref currentFrameNumber); RenderFrame(currentFrameNumber / framerate, videoFrame, activeWidgets); writer.WriteVideoFrame(videoFrame); videoFrame.Dispose(); ////string progress = string.Format("{0} {1}", (int)(100 * n / videoEnd), '%'); } reader.Close(); writer.Close(); }