[Interest] [Qt3D] Render to video

Andy asmaloney at gmail.com
Mon Apr 18 14:38:21 CEST 2016


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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160418/437218ed/attachment.html>


More information about the Interest mailing list