[vtkusers] How to write AVI files properly, Please Help

Miguel Angel Rodriguez Florido marf at ctm.ulpgc.es
Thu Jun 7 12:00:48 EDT 2007


	Did you get to save the video while you were interacting
(vtkInteractor) with the scene?.

	I have tried to save a .avi video of a scene while I'm interacting and
it seems to stop interactor while it is saving video frames.

	Thanks in advance.

Janny Dong wrote:
> Hey Beau,
> 
> Thank you so much! You are right! I update the pointer to the
> vtkWindowToImageFilter every time when I call the image rendering
> function. After I added avi->SetInputConnection(w2i->GetOutputPort()) to
> the loop, the generated movie looks normal.
> 
> Also, off-screen rendering is acceptable. That is, when I set the
> off-screen rendering on, the program can still get proper movies.
> 
> Janny
> 
> On 5/30/07, * Beau Sapach* <beau.sapach at ualberta.ca
> <mailto:beau.sapach at ualberta.ca>> wrote:
> 
>     Hi Janny,
> 
>      
> 
>     I'm not sure I understand your code… the ImgRender() function
>     somehow changes your input data and renders the image (changing what
>     is displayed in the window) and then returns a pointer to the
>     vtkWindowToImageFilter, correct?  I'm not sure why you have w2i =
>     ImgRender() in your loop.  Once you have a pointer to the filter you
>     shouldn't need to assign that pointer again, unless you're deleting
>     and re-creating the vtkWindowToImageFilter on each call to
>     ImgRender(), are you?  If you are, then you should call
>     avi->SetInputConnection(w2i->GetOutputPort()) each time you get a
>     new w2i pointer.
> 
>      
> 
>     Beau
> 
>      
> 
>     ------------------------------------------------------------------------
> 
>     *From:* Janny Dong [mailto:janny.dong at gmail.com
>     <mailto:janny.dong at gmail.com>]
>     *Sent:* Tuesday, May 29, 2007 3:16 PM
>     *To:* Beau Sapach
> 
>     *Subject:* Re: [vtkusers] How to write AVI files properly, Please Help
> 
>      
> 
>     Hey Beau,
> 
>     Thanks a lot for your suggestions. I still could not get correct
>     movies. What I did is:
> 
>     Define a function - static vtkWindowToImageFilter *ImgRender() to
>     render the images and pass WindowToImageFilter as a parameter to
>     main();
>     My main function is
>     int main( int argc, char *argv[] )
>     {
>         int imageN;
>         //Generate avi file
>         vtkWindowToImageFilter *w2i = ImgRender();
>         vtkAVIWriter *avi = vtkAVIWriter::New();
>         avi->SetInputConnection(w2i->GetOutputPort());
>         avi->SetFileName("test.avi");
>         avi->Start();
>       
>         for (imageN = 0; imageN < 10; imageN ++)
>         {
>             w2i = ImgRender();
>             avi->Write(); 
>         }
>         avi->End();
>         avi->Delete();
>         w2i->Delete();
>         return 0;
>     }
> 
>     I don't know how you set up your loop to generate movies. I already
>     switched to on-screen rendering and I could see the images in the
>     rendering window were changing. I am guessing probably it's not a
>     good way to pass the WindowToImageFilter as a parameter, but I have
>     no better idea to do this right now, because my image rendering part
>     is fairly large, and I try to make the code neat by defining the
>     rendering part as a function and calling it in the main function.
> 
>     Sorry to bother you and thanks for sharing your experience with me.
> 
>     Janny
> 
>     On 5/29/07, *Beau Sapach* < beau.sapach at ualberta.ca
>     <mailto:beau.sapach at ualberta.ca>> wrote:
> 
>     Hi Janny,
> 
>      
> 
>     My movies are 2-4MB or less for 30 frames @ 25 frames per second.  I
>     just realized something though.  If you're using
>     SetOffScreenRendering(1) then when you call Render() the image in
>     the window is not updated.  It's the image in the vtkRenderWindow
>     that the vtkWindowToImageFilter uses.  I'm just guessing but the
>     single static image you're seeing in the AVI file is probably the
>     last image that was rendered to the window (before off-screen
>     rendering was switched on).
> 
>      
> 
>     It may work properly if you leave rendering on-screen.  Or if you
>     want to use off-screen rendering you could probably get the memory
>     buffer that the vtkRenderWindow it's rendering to, and use the RGBA
>     data in there to build your own vtkImageData object and write that
>     to the AVI.
> 
>      
> 
>     Beau
> 
>      
> 
>     ------------------------------------------------------------------------
> 
>     *From:* Janny Dong [mailto: janny.dong at gmail.com
>     <mailto:janny.dong at gmail.com>]
>     *Sent:* Tuesday, May 29, 2007 12:27 PM
>     *To:* Beau Sapach
>     *Cc:* vtkusers
>     *Subject:* Re: [vtkusers] How to write AVI files properly, Please Help
> 
>      
> 
>     Beau, you said you didn't have size problem. You are saying your
>     movie is reasonably smaller?
> 
>     I added Modified() before the line WindowToImage->update() as you
>     suggested. The movie still shows a single static image. :(
> 
>     Janny
> 
>     On 5/29/07, *Janny Dong* <janny.dong at gmail.com
>     <mailto:janny.dong at gmail.com>> wrote:
> 
>     Thanks, Beau. I tried to play with FFMPEG, but with no success. I am
>     using MSVC, and unfortunately FFMPEG doesn't support it, so I
>     couldn't get the library installed. My project requires automated
>     movie generation. That's why I am struggling to get everything under
>     control in my code. :(
> 
>     Janny
> 
>      
> 
>     On 5/29/07, *Beau Sapach* < beau.sapach at ualberta.ca
>     <mailto:beau.sapach at ualberta.ca>> wrote:
> 
>     I think I had a similar problem, not the size issue but the single,
>     static image issue.  Try calling Modified() on
>     vtkWindowToImageFilter before you call Update().  As for frame rate
>     I don't know how to set that with vtk's classes, I suggest you look
>     at FFMPEG, it can be built into VTK but I've had little luck doing
>     so.  Currently I write out image files and have my application call
>     the ffmpeg executable to encode the images as a movie, using ffmpeg
>     command line options you can control framerate.
> 
>      
> 
>     Beau
> 
>      
> 
>     ------------------------------------------------------------------------
> 
>     *From:* vtkusers-bounces+beau.sapach= ualberta.ca at vtk.org
>     <mailto:ualberta.ca at vtk.org>
>     [mailto:vtkusers-bounces+beau.sapach=ualberta.ca at vtk.org
>     <mailto:vtkusers-bounces+beau.sapach=ualberta.ca at vtk.org>] * On
>     Behalf Of *Janny Dong
>     *Sent:* Tuesday, May 29, 2007 8:24 AM
>     *To:* vtkusers
>     *Subject:* [vtkusers] How to write AVI files properly, Please Help
> 
>      
> 
>     I posted a similar question but didn't get any answer, probably I
>     didn't make it clear enough.
> 
>     I am coding a C++ program to visualize my data and generate movie
>     automatically. I put vtkAVIWriter in a loop to get a movie out of
>     the rendering. It did get an avi file, but not the one I expected. I
>     have two questions about it.
> 
>     (1) The size of the movie file is 18MB, but it has only 50 frames.
>     Moreover, it is only 3 second long. Can I compress the movie file
>     with vtkAVIWriter? How can I control the speed of the movie, like
>     specifying number of frames per second?
> 
>     (2) I found the avi file displayed only one frame like a static
>     image. However, I did update the data when rendering each frame. The
>     data rendering part in my program is like
>     data
>     points--->vtkPolyData--->vtkDelaunay2D--->vktPolyDataMapper--->vtkRenderer--->vtkWin32OpenGLRenderWindow->SetOffScreenRendering(1)--->vtkWindowToImageFilter--->vtkAVIWriter
> 
> 
>     I have something like: PolyDataMapper->update();
>     WindowToImage->update() in my code.  Did I call update() in a wrong
>     way or should I call it in different parts of the code?
> 
>     Any suggestions will be greatly appreciated.
> 
>     Janny
>      
> 
>      
> 
>      
> 
>      
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers


-- 
Miguel Angel Rodriguez Florido
Center for Technology in Medicine-ULPGC-Gran Canaria-CanaryIslands,Spain
Emails:marf@{ctm.ulpgc.es,bwh.harvard.edu}-http://www.ctm.ulpgc.es/
Tfnos:+34 928 451253, +34 928 452956 - Fax:+34 928 451243



-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3237 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20070607/b0e3e298/attachment.bin>


More information about the vtkusers mailing list