我试图使用Emgu CV VideoWriter捕获视频,但它显示:
无法创建VideoWriter。确保您拥有特定的编解码器 安装
我该如何处理?
这就是我的代码:/
Bitmap back = new Bitmap("jpg image path");
Image<Bgr, Byte> bg;
bg = new Image(Bgr, byte)(back);
vw = new VideoWriter("c://work//test1.mp4",CvInvoke.CV_FOURCC('M','S','V','C'), 17, 640, 480, true);
它适用于.avi扩展,但尺寸非常大,只有几秒钟,所以我想更多地压缩它。请建议代码/库的任何变通方法或更改。
答案 0 :(得分:1)
对我来说,问题在于fileName
参数期望反斜杠,但是我使用的是正斜杠。例如,c://work//test1.mp4
引发了原始海报描述的异常,但是c:\work\test1.mp4
起作用。
答案 1 :(得分:0)
在我的usb网络摄像头中,我使用width = 352和height = 288(运行良好没有错误),但是 如果我更改宽度= 460和高度= 480,我会收到错误消息&#34;无法写入视频文件&#34;
所以,问题是宽度和高度参数错误
您可以使用frame.Height使用frame.Width和height获取宽度 你必须像这样声明帧变量。
Dim frame As Emgu.CV.Image(Of Emgu.CV.Structure.Bgr, Byte) = Capturez.QueryFrame
答案 2 :(得分:0)
我很幸运使用XVID进行我的FOURCC设置。它为我的应用程序提供了最佳的压缩效果。
我注意到我正在使用的Emgu版本使用不同的机制来指定VideoWriter中的FOURCC值。
我用来获取XVID编码器的电话是:
VideoWriter video = new VideoWriter(saveFilename, VideoWriter.Fourcc('X', 'V', 'I', 'D'), fps, videoFrameSize, true);
关键是发现VideoWriter本身有一种指定Fourcc设置的方法。
VideoWriter.Fourcc('X', 'V', 'I', 'D')
答案 3 :(得分:0)
我有一个类似的问题,问题是帧只能是Bgr格式。 只需使用格式转换,例如:
Image<Emgu.CV.Structure.Bgr, byte> frameBgr = frameBgra.Convert<Emgu.CV.Structure.Bgr, byte>();
可以解决VideoWriter的问题。