2011-10-03 1 views
0

이미지에서 비디오를 만들고 싶습니다. 각 이미지는 1 초 동안 있어야합니다. AVIWriter는 25 프레임 속도를 가지고 있으므로 1 초 동안 1 이미지를 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는 1fps 프레임 속도와 빈 프레임/누락 프레임 모두에 적합합니다. 프레임 (예 : 프레임 # 0, 프레임 # 25)을 타임 스탬프 처리하고이 라이브러리를 통해 밀어 넣으면 AVI API가 누락 된 프레임을 빈 프레임으로 자동 추가하여 결과 파일을 1fps로 재생합니다. –

+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(); 

초 당 표시 한 비트 맵도 있습니다. (코드를 직접 작성하는 데 사용).