捕获视频时出现X264错误消息

时间:2014-01-10 00:35:04

标签: c# opencv video-capture codec x264

我正在编写一个程序,将一些网络摄像头视频保存到文件中。我正在使用此处找到的x264编解码器 x264

当我尝试将帧写入文件时,会弹出此错误消息。 error

  

x264vfw [警告]:很少有帧丢失。修复的方法   这样:

     

x264vfw [警告]: - 如果你使用VirtualDub或它的分叉,你可以   启用'VirtualDub Hack'选项

     

x264vfw [警告]: - 您可以启用“文件”输出模式

     

x264vfw [警告]: - 您可以启用“零延迟”选项

我发现了这个VirtualDub Hack,但后来我没有使用虚拟配音。 我不确定文件输出模式和零延迟意味着什么。

我认为问题与编解码器有关,因为当我改用使用不同的编解码器时,一切正常。我正在使用C#和emgu,但我不认为这就是问题所在。

修改

如果代码有帮助

public static void StartCapture()
{
    try
    {
        capture = new Capture();
        capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 1920);  //1920
        capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 1080); //1080

        CaptureOutput = new VideoWriter
        (
            "capture output.avi",
            CvInvoke.CV_FOURCC('X','2','6','4'),
            50, //fps
            (int)capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH), 
            (int)capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT), 
            true
        );

        if (capture != null)
        {
            capture.ImageGrabbed += SaveFrame;
            capture.Start();
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.ToString());
    }
}

static void SaveFrame(System.Object sender, EventArgs e)
{
    Image<Bgr, Byte> video;
    video = capture.RetrieveBgrFrame();
    CaptureOutput.WriteFrame(video);
}

1 个答案:

答案 0 :(得分:1)

我知道有点晚了,但我想出来了。解决方案(在Windows上)是设置-1而不是编解码器的fourcc。这会弹出一个对话框,您可以在其中选择编解码器,如果您选择x264wfv,则可以使用配置按钮来配置这些选项(零延迟适用于我)。下次编解码器将使用完全相同的设置,因此您可以使用fourcc代码运行程序。