2014-01-10 48 views
1

我正在編寫一個程序來將一些網絡攝像頭視頻保存到文件中。我正在使用在此處找到的x264編解碼器 x264X264捕獲視頻時出現錯誤信息

當我嘗試將幀寫入文件時,彈出此錯誤消息。 error

x264vfw [warning]:幾幀可能會丟失。方法來解決這個 :

x264vfw [警示]: - 如果您使用的VirtualDub或其叉比你能 啓用「VirtualDub的哈克」選項

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); 
} 
+0

我認爲我用X264的avi容器可能會造成一些麻煩 – sav

回答

1

我知道是有點晚,但我想通了這一點。解決方案(在Windows上)是設置-1而不是編解碼器的fourcc。這會彈出一個對話框,您可以選擇一個編解碼器,如果您選擇x264wfv,則有一個配置按鈕,可讓您配置這些選項(零延遲適用於我)。下次編解碼器將使用完全相同的設置,因此您可以使用fourcc代碼運行程序。

+0

感謝您的回覆,但錯誤信息仍然存在。我懷疑這個問題與我在AVI容器中使用x264編解碼器有關。雖然這*可以完成,但我認爲avi容器並不適合x264。因此,錯誤消息指出幀可能會丟失。 – sav

+0

我可能需要調查使用gstreamer和C++編碼更好的容器內的視頻,因爲opencv和emgu不支持這個。 – sav