[Interest] [Qt3D] Render to video
Sean Harmer
sean.harmer at kdab.com
Mon Apr 18 15:05:48 CEST 2016
Hi,
I think it's possible, although it's not an out of the box feature yet, as
Harald pointed out.
Have a look into this kind of approach:
* Implement something similar to the Scene3DItem that allows to embed Qt 3D
into a Qt Quick 2 scene
* This requires using a little bit of private (for now) API to feed the Qt 3D
renderer your own OpenGL context and to ask it to render when needed.
* Use an FBO (as the Scene3D item does) as the render target - take care to
tell the framegraph the size of this "external" render target.
* Then, once the scene is rendered on your custom context, either:
a) use glReadPixels to grab the contents of the texture you attached to the
FBO and pass it to a software encoder.
or
b) use the texture id to pass the data to a hardware encoder such as nvenc
without needing a round trip from the GPU->CPU->GPU.
I think that can be made to work.
Cheers,
Sean
On Monday 18 April 2016 08:38:21 Andy wrote:
> On Mon, Apr 18, 2016 at 3:26 AM, Harald Vistnes <harald.vistnes at gmail.com>
>
> wrote:
> > Hi Andy,
> >
> > An alternative is to use the FFMPEG encoding library instead of the
> > command line tools. Then you can pass each frame to the video encoder as
> > you generate it without writing them all to disk first.
>
> This is non-GPL software, so I can't use the lib directly (I should have
> mentioned that). I haven't found a BSD or MIT lib that encodes the common
> formats - is anyone aware of one?
>
> > The natural way to generate the QImages would be to render to an offscreen
> > surface of the desired resolution, and then pass each frame to the video
> > encoder.
>
> Great - so I'm on the right track!
>
> > Unfortunately, reading back the content of offscreen surfaces is missing
> > in Qt3D. According to these it will not come before 5.8.
> >
> > https://bugreports.qt.io/browse/QTBUG-52136
> > https://bugreports.qt.io/browse/QTBUG-52074
> >
> > So AFAIK we just have to wait with generating images and videos with Qt3D.
>
> Thanks Harald. Your report is exactly what I'm looking for... That's
> unfortunate though - a real showstopper.
>
> > Cheers,
> > Harald
> >
> > 2016-04-18 5:46 GMT+02:00 Andy <asmaloney at gmail.com>:
> >> 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>
--
Dr Sean Harmer | sean.harmer at kdab.com | Managing Director UK
KDAB (UK) Ltd, a KDAB Group company
Tel. +44 (0)1625 809908; Sweden (HQ) +46-563-540090
Mobile: +44 (0)7545 140604
KDAB - Qt Experts
More information about the Interest
mailing list