2011-10-03 84 views
0

我想從圖像製作視頻,每個圖像應該停留一秒鐘。 AVIWriter具有25幀的速率,所以我必須添加一個圖像25次,使其停留一秒鐘。AForge.NET - > AVIWriter將圖像作爲幀添加

我試圖改變幀率,但它不工作。

任何人都可以提出一種解決方法嗎?

以下是寫幀到視頻代碼:

private void writeVideo() 
    { 
     // instantiate AVI writer, use WMV3 codec 
     AVIWriter writer = new AVIWriter("wmv3"); 
     // create new AVI file and open it 
     writer.Open(fileName, 320, 240); 
     // create frame image 
     Bitmap image = new Bitmap(320, 240); 
     var cubit = new AForge.Imaging.Filters.ResizeBilinear(320, 240); 
     string[] files = Directory.GetFiles(imagesFolder); 
     writer.FrameRate = 25; 
     int index = 0; 
     int failed = 0; 
     foreach (var item in files) 
     { 
      index++; 
      try 
      { 
       image = Image.FromFile(item) as Bitmap; 
       //image = cubit.Apply(image); 

       for (int i = 0; i < 25; i++) 
       { 
        writer.AddFrame(image); 
       } 
      } 
      catch 
      { 
       failed++; 
      } 
      this.Text = index + " of " + files.Length + ". Failed: " + failed; 
     } 
     writer.Close(); 
    } 
+0

當您添加相同的框架25次時,您會得到什麼結果? – box86rowh

+1

作爲容器格式的AVI對於1 fps幀速率以及空幀/丟幀均可。如果您可以找到一種方法爲幀添加時間戳(例如幀#0,然後幀#25)並將其通過此庫,則AVI API會自動將缺失幀添加爲空幀,並且結果文件將以1 fps進行回放。 –

+0

發佈一些代碼。 – Amy

回答

0

AVIWriter默認的幀頻爲25.你有沒有選項來指定掉落或跳過的幀,你爲什麼不設置AVIWriter::FrameRate屬性爲1,然後開始使用框架填充作家?

+0

我已經試過writer.FrameRate = 1;但仍然不起作用。默認值是25,根據我的'不好'的經驗,它不能更新。 – inam101

+1

底層的AVI編寫器的工作原理如下:您不僅提供了新幀,而且還有時間戳。如果你推送#0,#1,#2和#9幀,AVI寫入器層將考慮到這一點,並負責隊長幀#3到#8。所以它似乎是AForge.NET庫的限制,因爲它忽略了幀時間。也許你會想看看AForge.NET代碼並更新它來解決問題。 –

1

哈坎的解決方案的工作,如果你使用這個代碼:

AVIWriter videoWriter; 
videoWriter = new AVIWriter("wmv3"); 
videoWriter.FrameRate = 1; 
videoWriter.Open("test.avi", 320, 240); 
videoWriter.AddFrame(bitmap1); 
videoWriter.AddFrame(bitmap2); 
videoWriter.AddFrame(bitmap3); 
videoWriter.Close(); 

有很好每秒顯示的一個位圖。 (只是爲了給出一個直接工作的代碼)。