C#emgu简历:录制的视频播放回到快速/慢速

C#emgu简历:录制的视频播放回到快速/慢速,c#,video-capture,playback,emgucv,C#,Video Capture,Playback,Emgucv,我正在尝试使用VideoWriter将捕获的视频写入文件,并从emguCV捕获, 问题是:如果我播放刚刚录制的视频,它会播放快还是慢。 我如何解决这一问题,使我录制的视频能够实时播放/录制,从而不会变慢或变快 这是我的代码: Capture-Capture=new-Capture(); 视频写手大众; 尺寸ms_hd_cam_5000_分辨率=新尺寸(1280720); 标签宽度标签、高度标签、记录时间; 按钮记录; 线程记录; 图像框; 整数秒; 整数分钟; 公共表格1() { 初始化组件(

我正在尝试使用VideoWriter将捕获的视频写入文件,并从emguCV捕获, 问题是:如果我播放刚刚录制的视频,它会播放快还是慢。 我如何解决这一问题,使我录制的视频能够实时播放/录制,从而不会变慢或变快

这是我的代码:


Capture-Capture=new-Capture();
视频写手大众;
尺寸ms_hd_cam_5000_分辨率=新尺寸(1280720);
标签宽度标签、高度标签、记录时间;
按钮记录;
线程记录;
图像框;
整数秒;
整数分钟;
公共表格1()
{
初始化组件();
初始化控制();
//Cam_属性
capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH,1280);
capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT,720);
capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS,30);
//视频写入特性
vw=新的录像机(“test.avi”,30,ms_hd_cam_5000_分辨率。宽度,ms_hd_cam_5000_分辨率。高度,真);
}
私有void InitializeConrols()
{
this.BackColor=Color.Black;
this.ClientSize=新尺寸(ms_hd_cam_5000_分辨率。宽度+25,ms_hd_cam_5000_分辨率。高度+75);
this.Picture\u box.Size=ms\u hd\u cam\u 5000\u分辨率;
宽度_标签=新标签();
宽度标签位置=新点(10,ms高清摄像头5000分辨率高度+15);
宽度\u label.ForeColor=颜色.白色;
width_label.Text=“width:+capture.width.ToString();
高度_标签=新标签();
高度标签位置=新点(10,ms高清摄像头5000分辨率高度+40);
高度_label.ForeColor=颜色.白色;
height_label.Text=“height:+capture.height.ToString();
recordingTime=新标签();
recordingTime.Location=新点(225,毫秒高清摄像头5000分辨率高度+40);
recordingTime.ForeColor=颜色.白色;
recordingTime.Text=“时间:0”;
记录=新按钮();
记录。位置=新点(225,ms_hd_cam_5000_分辨率。高度+15);
record.ForeColor=颜色.白色;
record.Text=“record”;
控件。添加(宽度\标签);
控件。添加(高度标签);
控制。添加(记录);
控件。添加(记录时间);
记录。单击+=记录\u单击;
}
私有void Form1\u加载(对象发送方、事件参数e)
{
captureCamImage(发送方,e);
Application.Idle+=captureCamImage;
}
私有无效记录\u单击(对象发送者,事件参数e)
{
if(isRecording==null)
{
recordingTime.Text=“时间:0”;
record.Text=“停止”;
isRecording=新线程(this.Record);
isRecording.Start();
}
其他的
{
record.Text=“record”;
isRecording=null;
}
}
私有void captureCamImage(对象发送方,事件参数e)
{
imageFrame=capture.QueryFrame();
Picture_box.Image=imageFrame.ToBitmap();
记录时间();
}
私有无效记录时间()
{
recordingTime.Text=“Time:+minutes.ToString()+”:“+seconds.ToString();
}
私人无效记录()
{
秒表秒表=新秒表();
秒表复位();
秒表。开始();
while(isRecording!=null)
{
秒=秒表。已用。秒;
分钟=秒表。已用时间。分钟;
vw.WriteFrame(图像帧);
睡眠(1000/30);
}
}


尝试降低FPS值

vw = new VideoWriter("test.avi", 30, ms_hd_cam_5000_resolution.Width, ms_hd_cam_5000_resolution.Height, true);

提供较低的值,而不是30帧/秒。

尝试降低FPS值。在

vw = new VideoWriter("test.avi", 30, ms_hd_cam_5000_resolution.Width, ms_hd_cam_5000_resolution.Height, true);

而不是30帧/秒提供较低的值。

代码没有意义。挂接到
应用程序.Idle
不是一个好主意

将代码扔进垃圾桶,有一个记录线程
capture.QueryFrame()
并立即保存它。

地狱甚至不用担心线程使用计时器,根据FPS设置它。它不会精确,但会比您现在拥有的更好。

代码毫无意义。挂接到
应用程序.Idle
不是一个好主意

将代码扔进垃圾桶,有一个记录线程
capture.QueryFrame()
并立即保存它。
地狱甚至不用担心线程使用计时器,根据FPS设置它。它不会精确,但比你现在拥有的要好