[Interest] [Qt3D] Render to video

Andy asmaloney at gmail.com
Mon Apr 18 16:13:38 CEST 2016

On Mon, Apr 18, 2016 at 10:00 AM, Jason H <jhihn at gmx.com> wrote:

> I did something like this a long time ago in QML (Before Qt3D, QtQuick 1):
> 1. There is some kind of frame advance, so you set up the animations as
> you want, then you start the animation and render the first frame to an
> image. Then call frame advance and get the next frame, repeat.
> 2. Then use FFMPeg to create the video from the PNG/JPG files.
> A couple of pointers:
> 1. Use a multithreaded image saver. I was Passign QPixmap/QImage to a
> thread for saving to PNG and the compression time was horrendous. Being
> able to tap into all the CPUs scaled linearly. (I was rendering 1920x1080
> about 6 years ago)
> 2. You might have to restrict yourself to a raster painter (if such an
> option still exists)

Thanks Jason.

I'm hoping I can tap into the Qt3D FBO (Sean's suggestion) and pipe the
data directly to ffmpeg (Michael's suggestion) which would avoid all that
I/O.  Hardware encoding would also be nice, but first things first!

> *Sent:* Sunday, April 17, 2016 at 11:46 PM
> *From:* Andy <asmaloney at gmail.com>
> *To:* "Qt Project" <interest at qt-project.org>
> *Subject:* [Interest] [Qt3D] Render to video
> Goal: generate video with a user-specified resolution, frame rate, &
> container/codec format from an animation in my Qt3D window
> (Disclaimer: I've never worked with video files before!)
> As far as I can tell, Qt doesn't provide a way to generate video files
> directly, so I think I have to write a series of QImages to disk and use
> them to generate a video using ffmpeg.  This seems like it will take a
> large amount of disk space, be pretty heavy on the I/O, and generally be
> slow.  Are there better solutions?
> If I need to do it that way though, I must generate QImages from my
> existing Qt3DCore::QAspectEngine in my QWindow-derived class.  I don't see
> a clear/elegant way to do this.
> I think I need to create an offscreen surface? window? with the correct
> resolution and then somehow render & animate my scene to it, saving
> snapshots as I move the camera.  (I am already using QAbstractAnimation to
> move the camera, so I would use it to grab the snapshots as well.)  Can I
> use the same root entity in multiple QAspectEngines? (i.e. setRootEntity()
> to my root entity in the new offscreen and tell it to render.)
> Has anyone done this before?  Is this even close to the right approach?
> (I'm using straight C++ - no QML.)
> Thanks!
> ---
> Andy Maloney  //  https://asmaloney.com
> twitter ~ @asmaloney <https://twitter.com/asmaloney>
> _______________________________________________ Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

Andy Maloney  //  https://asmaloney.com
twitter ~ @asmaloney <https://twitter.com/asmaloney>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160418/c62189af/attachment.html>

More information about the Interest mailing list