如何使用Qt5 C ++中的QMediaRecorder从QImage序列生成视频文件

时间:2016-07-16 02:25:59

标签: c++ qt5 video-encoding qmediarecorder qmediaservice

基本上我想要的是使用QMediaRecorder对视频进行编码,方法是在运行时提供我在自定义代码中生成的QImage序列作为源。

到目前为止,我发现没有简单的方法可以做到这一点,所有内容都指向解决方案,我必须以某种方式实现我自己的QMediaService和/或QMediaControl的子类,{{1}作为输入,注册它们并以某种方式让QImage使用它们。但是根据关于这个主题的官方Qt文档中的to this页面,这是一条较少走过的路,我独自一人:

  

通常,实现QMediaService超出了范围   这些文档和相关邮件列表或IRC的支持   应该寻求渠道。

我正在接受这篇文章,希望拥有这些知识的人可以了解如何做到这一点。我认为记录这组功能将为Qt5的用户开辟许多有用的可能性。

2 个答案:

答案 0 :(得分:0)

使用ffmpeg直接执行此操作非常简单。 您可以将图像保存在磁盘上,然后通过QProcess从命令行使用ffmpeg过滤器。 您还可以在代码中创建视频流,因此避免了由于将图像保存在磁盘上而造成的时间和性能损失,请将图像保存在该流中

答案 1 :(得分:0)

您可以尝试libqtavi。它是libgwavi的包装。 API看起来很简单,并且可以与Qt类很好地集成。但是仅支持MJPG编解码器和avi格式,并且其输出大小比mpeg / mp4,hevc / mkv ...

QAviWriter writer("demo.avi", QSize(800, 600), 24, "MJPG");// set framerate to 24 fps and 'MJPG' codec 
writer.setAudioFileName("audio.wav"); // set audio track
writer.open();
writer.addFrame(QImage("file.png"));
//...add all other video frames here
writer.close();