【问题标题】:EMGU CV videowriter is unable to make videoEMGU CV videowriter 无法制作视频
【发布时间】:2015-09-21 22:06:39
【问题描述】:

我试图使用 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 扩展名,但大小在几秒钟内非常巨大,所以我想进一步压缩它。请对代码/库提出任何解决方法或更改建议。

【问题讨论】:

    标签: c# opencv bitmap emgucv image-compression


    【解决方案1】:

    我也看到了这个问题。这真的很痛苦,因为 Emgu CV 是一个非常适合初学者的平台!

    由于与此主题相关的论坛问题大约有 10 个,并且在网络上的不同版块中都没有得到解答和解决,我认为这值得更多关注。

    有关 FOURCC 编解码器代码,请参阅:http://www.fourcc.org/codecs.php

    C++ 代码:

    cout << "Codec Value: " << CV_FOURCC('D', 'I', 'V', '3') << endl;
    

    返回:861292868

    C# 代码:

    return Emgu.CV.CvInvoke.CV_FOURCC('D', 'I', 'V', '3');
    

    返回:861292868

    所以问题不在于函数/方法“CV_FOURCC”,它必须在分配的编解码器中传递此变量:

    int Codec = Emgu.CV.CvInvoke.CV_FOURCC('D', 'I', 'V', '3');
    Emgu.CV.VideoWriter(path, Codec, 20, 640, 480, true);
    

    Emgu.CV.VideoWriter 类是我能看到的唯一问题。文档没有说明任何此类已知问题:

    http://www.emgu.com/wiki/files/1.3.0.0/html/3fb90645-ecc4-0c4e-b238-6d0ca38f4ebc.htm

    和:

    http://www.emgu.com/wiki/files/1.3.0.0/html/a3e01212-2f4e-6ac8-7c74-77ddb5c16299.htm

    这是一个答案吗,不,它是对 Emgu.CV.VideoWriter 类的进一步调查的提议。

    编辑

    根据文档,-1 应该会弹出“编解码器选择对话框”窗口。

    使用 C++ 和 OpenCV 会出现此窗口,您可以从计算机上安装的已安装编解码器中进行选择:

    使用带有 -1 的 C# 和 Emgu CV 进行编解码器对话框选择,我得到了窗口,但是一旦选择了编解码器,某些项目就无法工作:

    如您所见,即使使用同一台 PC,编解码器选择也不相同。

    事实上,使用 C++ 和 OpenCV,这行代码可以工作:

    myVideoWriter = VideoWriter(path, CV_FOURCC('D', 'I', 'V', '3'), 30, fSize, true);
    

    使用 C# 和 Emgu CV 这行代码不会:

    myVideoWriter = new VideoWriter(path, CvInvoke.CV_FOURCC('D', 'I', 'V', '3'), 20, 640, 480, true);
    

    编辑

    我最终只是使用:

    CvInvoke.CV_FOURCC('I', 'Y', 'U', 'V')
    

    这给了我很好的压缩和视频质量。这是我写的一个 FOURCC 课程来帮助解决这个问题:

    public class FourCC
    {
        /// <summary>
        /// Opens the Codec Selection Dialog...
        /// </summary>
        public static int UserSelect = -1;
    
        public static int _1978 = 943143217;
        public static int _2VUY = 1498764850;
        public static int _3IV0 = 810961203;
        public static int _3IV1 = 827738419;
        public static int _3IV2 = 844515635;
        public static int _3IVD = 1146505523;
        public static int _3IVX = 1482049843;
        public static int _8BPS = 1397768760;
        public static int AAS4 = 877871425;
        public static int AASC = 1129529665;
        public static int ABYR = 1381581377;
        public static int ACTL = 1280590657;
        public static int ADV1 = 827737153;
        public static int ADVJ = 1247167553;
        public static int AEIK = 1263093057;
        public static int AEMI = 1229800769;
        public static int AFLC = 1129072193;
        public static int AFLI = 1229735489;
        public static int AHDV = 1447315521;
        public static int AJPG = 1196444225;
        public static int AMPG = 1196444993;
        public static int ANIM = 1296649793;
        public static int AP41 = 825512001;
        public static int AP42 = 842289217;
        public static int ASLC = 1129075521;
        public static int ASV1 = 827740993;
        public static int ASV2 = 844518209;
        public static int ASVX = 1482052417;
        public static int ATM4 = 877483073;
        public static int AUR2 = 844256577;
        public static int AURA = 1095914817;
        public static int AVC1 = 826496577;
        public static int AVRN = 1314018881;
        public static int BA81 = 825770306;
        public static int BINK = 1263421762;
        public static int BLZ0 = 811224130;
        public static int BT20 = 808604738;
        public static int BTCV = 1447253058;
        public static int BW10 = 808539970;
        public static int BYR1 = 827480386;
        public static int BYR2 = 844257602;
        public static int CC12 = 842089283;
        public static int CDVC = 1129727043;
        public static int CFCC = 1128482371;
        public static int CGDI = 1229211459;
        public static int CHAM = 1296123971;
        public static int CJPG = 1196444227;
        public static int CMYK = 1264143683;
        public static int CPLA = 1095520323;
        public static int CRAM = 1296126531;
        public static int CSCD = 1145262915;
        public static int CTRX = 1481790531;
        public static int CVID = 1145656899;
        public static int CWLT = 1414289219;
        public static int CXY1 = 827938883;
        public static int CXY2 = 844716099;
        public static int CYUV = 1448433987;
        public static int CYUY = 1498765635;
        public static int D261 = 825635396;
        public static int D263 = 859189828;
        public static int DAVC = 1129726276;
        public static int DCL1 = 827081540;
        public static int DCL2 = 843858756;
        public static int DCL3 = 860635972;
        public static int DCL4 = 877413188;
        public static int DCL5 = 894190404;
        public static int DIV3 = 861292868;
        public static int DIV4 = 878070084;
        public static int DIV5 = 894847300;
        public static int DIVX = 1482049860;
        public static int DM4V = 1446268228;
        public static int DMB1 = 826428740;
        public static int DMB2 = 843205956;
        public static int DMK2 = 843795780;
        public static int DSVD = 1146508100;
        public static int DUCK = 1262703940;
        public static int DV25 = 892491332;
        public static int DV50 = 808801860;
        public static int DVAN = 1312904772;
        public static int DVCS = 1396921924;
        public static int DVE2 = 843404868;
        public static int DVH1 = 826824260;
        public static int DVHD = 1145591364;
        public static int DVSD = 1146312260;
        public static int DVSL = 1280529988;
        public static int DVX1 = 827872836;
        public static int DVX2 = 844650052;
        public static int DVX3 = 861427268;
        public static int DX50 = 808802372;
        public static int DXGM = 1296521284;
        public static int DXTC = 1129601092;
        public static int DXTN = 1314150468;
        public static int EKQ0 = 810634053;
        public static int ELK0 = 810241093;
        public static int EM2V = 1446137157;
        public static int ES07 = 925913925;
        public static int ESCP = 1346589509;
        public static int ETV1 = 827741253;
        public static int ETV2 = 844518469;
        public static int ETVC = 1129731141;
        public static int FFV1 = 827737670;
        public static int FLJP = 1347046470;
        public static int FMP4 = 877677894;
        public static int FMVC = 1129729350;
        public static int FPS1 = 827543622;
        public static int FRWA = 1096241734;
        public static int FRWD = 1146573382;
        public static int FVF1 = 826693190;
        public static int GEOX = 1481590087;
        public static int GJPG = 1196444231;
        public static int GLZW = 1465535559;
        public static int GPEG = 1195724871;
        public static int GWLT = 1414289223;
        public static int H260 = 808858184;
        public static int H261 = 825635400;
        public static int H262 = 842412616;
        public static int H263 = 859189832;
        public static int H264 = 875967048;
        public static int H265 = 892744264;
        public static int H266 = 909521480;
        public static int H267 = 926298696;
        public static int H268 = 943075912;
        public static int H269 = 959853128;
        public static int HDYC = 1129923656;
        public static int HEVC = 1129727304;
        public static int HFYU = 1431914056;
        public static int HMCR = 1380142408;
        public static int HMRR = 1381125448;
        public static int I263 = 859189833;
        public static int ICLB = 1112294217;
        public static int IGOR = 1380927305;
        public static int IJPG = 1196444233;
        public static int ILVC = 1129729097;
        public static int ILVR = 1381387337;
        public static int IPDV = 1447317577;
        public static int IR21 = 825381449;
        public static int IRAW = 1463898697;
        public static int ISME = 1162695497;
        public static int IV30 = 808670793;
        public static int IV31 = 825448009;
        public static int IV32 = 842225225;
        public static int IV33 = 859002441;
        public static int IV34 = 875779657;
        public static int IV35 = 892556873;
        public static int IV36 = 909334089;
        public static int IV37 = 926111305;
        public static int IV38 = 942888521;
        public static int IV39 = 959665737;
        public static int IV40 = 808736329;
        public static int IV41 = 825513545;
        public static int IV42 = 842290761;
        public static int IV43 = 859067977;
        public static int IV44 = 875845193;
        public static int IV45 = 892622409;
        public static int IV46 = 909399625;
        public static int IV47 = 926176841;
        public static int IV48 = 942954057;
        public static int IV49 = 959731273;
        public static int IV50 = 808801865;
    
        /// <summary>
        /// This is considered to be the Dfault Fallback Codec for Linux and also Windows may be following suit.
        /// Not in the Litrature on the FOURCC website.
        /// See: http://www.emgu.com/wiki/index.php/Video_Files
        /// </summary>
        public static int IYUV = 1448433993;
    
        public static int JBYR = 1381581386;
        public static int JPEG = 1195724874;
        public static int JPGL = 1279742026;
        public static int KMVC = 1129729355;
        public static int L261 = 825635404;
        public static int L263 = 859189836;
        public static int LBYR = 1381581388;
        public static int LCMW = 1464681292;
        public static int LCW2 = 844579660;
        public static int LEAD = 1145128268;
        public static int LGRY = 1498564428;
        public static int LJ11 = 825313868;
        public static int LJ22 = 842156620;
        public static int LJ2K = 1261587020;
        public static int LJ44 = 875842124;
        public static int LJPG = 1196444236;
        public static int LMP2 = 844123468;
        public static int LMP4 = 877677900;
        public static int LSVC = 1129730892;
        public static int LSVM = 1297503052;
        public static int LSVX = 1482052428;
        public static int LZO1 = 827284044;
        public static int M261 = 825635405;
        public static int M263 = 859189837;
        public static int M4CC = 1128477773;
        public static int M4S2 = 844313677;
        public static int MC12 = 842089293;
        public static int MCAM = 1296122701;
        public static int MJ2C = 1127369293;
        public static int MJPG = 1196444237;
        public static int MMES = 1397050701;
        public static int MP2A = 1093816397;
        public static int MP2T = 1412583501;
        public static int MP2V = 1446137933;
        public static int MP42 = 842289229;
        public static int MP43 = 859066445;
        public static int MP4A = 1093947469;
        public static int MP4S = 1395937357;
        public static int MP4T = 1412714573;
        public static int MP4V = 1446269005;
        public static int MPEG = 1195724877;
        public static int MPG4 = 877088845;
        public static int MPGI = 1229410381;
        public static int MR16 = 909201997;
        public static int MRCA = 1094931021;
        public static int MRLE = 1162629709;
        public static int MSVC = 1129730893;
        public static int MSZH = 1213879117;
        public static int MTX1 = 827872333;
        public static int MTX2 = 844649549;
        public static int MTX3 = 861426765;
        public static int MTX4 = 878203981;
        public static int MTX5 = 894981197;
        public static int MTX6 = 911758413;
        public static int MTX7 = 928535629;
        public static int MTX8 = 945312845;
        public static int MTX9 = 962090061;
        public static int MVI1 = 826889805;
        public static int MVI2 = 843667021;
        public static int MWV1 = 827742029;
        public static int NAVI = 1230389582;
        public static int NDSC = 1129530446;
        public static int NDSM = 1297302606;
        public static int NDSP = 1347634254;
        public static int NDSS = 1397965902;
        public static int NDXC = 1129858126;
        public static int NDXH = 1213744206;
        public static int NDXP = 1347961934;
        public static int NDXS = 1398293582;
        public static int NHVU = 1431717966;
        public static int NTN1 = 827216974;
        public static int NTN2 = 843994190;
        public static int NVDS = 1396987470;
        public static int NVHS = 1397249614;
        public static int NVS0 = 810767950;
        public static int NVS1 = 827545166;
        public static int NVS2 = 844322382;
        public static int NVS3 = 861099598;
        public static int NVS4 = 877876814;
        public static int NVS5 = 894654030;
        public static int NVT0 = 810833486;
        public static int NVT1 = 827610702;
        public static int NVT2 = 844387918;
        public static int NVT3 = 861165134;
        public static int NVT4 = 877942350;
        public static int NVT5 = 894719566;
        public static int PDVC = 1129727056;
        public static int PGVV = 1448494928;
        public static int PHMO = 1330464848;
        public static int PIM1 = 827148624;
        public static int PIM2 = 843925840;
        public static int PIMJ = 1246579024;
        public static int PIXL = 1280854352;
        public static int PJPG = 1196444240;
        public static int PVEZ = 1514493520;
        public static int PVMM = 1296914000;
        public static int PVW2 = 844584528;
        public static int QPEG = 1195724881;
        public static int QPEQ = 1363497041;
        public static int RGBT = 1413629778;
        public static int RLE = 1162629727;
        public static int RLE4 = 876956754;
        public static int RLE8 = 944065618;
        public static int RMP4 = 877677906;
        public static int RPZA = 1096437842;
        public static int RT21 = 825381970;
        public static int RV20 = 808605266;
        public static int RV30 = 808670802;
        public static int RV40 = 808736338;
        public static int S422 = 842150995;
        public static int SAN3 = 860766547;
        public static int SDCC = 1128481875;
        public static int SEDG = 1195656531;
        public static int SFMC = 1129137747;
        public static int SMP4 = 877677907;
        public static int SMSC = 1129532755;
        public static int SMSD = 1146309971;
        public static int SMSV = 1448299859;
        public static int SP40 = 808734803;
        public static int SP44 = 875843667;
        public static int SP54 = 875909203;
        public static int SPIG = 1195987027;
        public static int SQZ2 = 844779859;
        public static int STVA = 1096176723;
        public static int STVB = 1112953939;
        public static int STVC = 1129731155;
        public static int STVX = 1482052691;
        public static int STVY = 1498829907;
        public static int SV10 = 808539731;
        public static int SVQ1 = 827414099;
        public static int SVQ3 = 860968531;
        public static int TLMS = 1397574740;
        public static int TLST = 1414745172;
        public static int TM20 = 808602964;
        public static int TM2X = 1479691604;
        public static int TMIC = 1128877396;
        public static int TMOT = 1414483284;
        public static int TR20 = 808604244;
        public static int TSCC = 1128485716;
        public static int TV10 = 808539732;
        public static int TVJP = 1347049044;
        public static int TVMJ = 1246582356;
        public static int TY0N = 1311791444;
        public static int TY2C = 1127373140;
        public static int TY2N = 1311922516;
        public static int UCOD = 1146045269;
        public static int ULTI = 1230261333;
        public static int V210 = 808530518;
        public static int V261 = 825635414;
        public static int V655 = 892679766;
        public static int VCR1 = 827474774;
        public static int VCR2 = 844251990;
        public static int VCR3 = 861029206;
        public static int VCR4 = 877806422;
        public static int VCR5 = 894583638;
        public static int VCR6 = 911360854;
        public static int VCR7 = 928138070;
        public static int VCR8 = 944915286;
        public static int VCR9 = 961692502;
        public static int VDCT = 1413694550;
        public static int VDOM = 1297040470;
        public static int VDOW = 1464812630;
        public static int VDTZ = 1515471958;
        public static int VGPX = 1481656150;
        public static int VIDS = 1396984150;
        public static int VIFP = 1346783574;
        public static int VIVO = 1331054934;
        public static int VIXL = 1280854358;
        public static int VLV1 = 827739222;
        public static int VP30 = 808669270;
        public static int VP31 = 825446486;
        public static int VP40 = 808734806;
        public static int VP50 = 808800342;
        public static int VP60 = 808865878;
        public static int VP61 = 825643094;
        public static int VP62 = 842420310;
        public static int VP70 = 808931414;
        public static int VP80 = 808996950;
        public static int VQC1 = 826495318;
        public static int VQC2 = 843272534;
        public static int VQJC = 1128943958;
        public static int VSSV = 1448301398;
        public static int VUUU = 1431655766;
        public static int VX1K = 1261525078;
        public static int VX2K = 1261590614;
        public static int VXSP = 1347639382;
        public static int VYU9 = 961894742;
        public static int VYUY = 1498765654;
        public static int WBVC = 1129726551;
        public static int WHAM = 1296123991;
        public static int WINX = 1481525591;
        public static int WJPG = 1196444247;
        public static int WMV1 = 827739479;
        public static int WMV2 = 844516695;
        public static int WMV3 = 861293911;
        public static int WMVA = 1096174935;
        public static int WNV1 = 827739735;
        public static int WVC1 = 826496599;
        public static int X263 = 859189848;
        public static int X264 = 875967064;
        public static int XLV0 = 810962008;
        public static int XMPG = 1196445016;
        public static int XVID = 1145656920;
        public static int XWV0 = 810964824;
        public static int XWV1 = 827742040;
        public static int XWV2 = 844519256;
        public static int XWV3 = 861296472;
        public static int XWV4 = 878073688;
        public static int XWV5 = 894850904;
        public static int XWV6 = 911628120;
        public static int XWV7 = 928405336;
        public static int XWV8 = 945182552;
        public static int XWV9 = 961959768;
        public static int XXAN = 1312905304;
        public static int Y16 = 909203807;
        public static int Y411 = 825308249;
        public static int Y41P = 1345401945;
        public static int Y444 = 875836505;
        public static int Y8 = 945381215;
        public static int YC12 = 842089305;
        public static int YUV8 = 945182041;
        public static int YUV9 = 961959257;
        public static int YUVP = 1347835225;
        public static int YUY2 = 844715353;
        public static int YUYV = 1448695129;
        public static int YV12 = 842094169;
        public static int YV16 = 909203033;
        public static int YV92 = 842618457;
        public static int ZLIB = 1112099930;
        public static int ZMBV = 1447185754;
        public static int ZPEG = 1195724890;
        public static int ZYGO = 1330075994;
        public static int ZYYY = 1499027802;
    }
    

    只需通过以下方式调用它:

    FourCC.IYUV
    

    一切顺利

    克里斯

    【讨论】:

      【解决方案2】:

      我很幸运将 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】:

        对我来说,问题是 fileName 参数需要反斜杠,但我使用的是正斜杠。例如,c://work//test1.mp4 会引发原始发布者描述的异常,但 c:\work\test1.mp4 有效。

        【讨论】:

          【解决方案4】:

          在我的 USB 网络摄像头中,我使用宽度 = 352 和高度 = 288(运行良好,没有错误),但是 如果我更改 width = 460 和 height=480 ,我会收到错误消息“无法写入视频文件”

          所以,问题是宽度和高度参数错误

          您可以使用 frame.Width 获取宽度,使用 frame.Height 获取高度 你必须在这样之前声明框架变量。

          Dim frame As Emgu.CV.Image(Of Emgu.CV.Structure.Bgr, Byte) = Capturez.QueryFrame
          

          【讨论】:

            【解决方案5】:

            我遇到了类似的问题,问题是帧只能是 Bgr 格式。 只需使用格式转换,例如:

            Image<Emgu.CV.Structure.Bgr, byte> frameBgr = frameBgra.Convert<Emgu.CV.Structure.Bgr, byte>();
            

            可能会解决 VideoWriter 的问题。

            【讨论】:

              猜你喜欢
              • 2015-05-17
              • 1970-01-01
              • 1970-01-01
              • 2018-08-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-05-30
              • 1970-01-01
              相关资源
              最近更新 更多