36

基本上我想要的是通过提供我在运行时在自定义代码中生成QMediaRecorder的 s 序列作为源来编码视频。QImage

到目前为止,我还没有找到简单的方法来做到这一点,并且一切都指向解决方案,我必须以某种方式实现我自己的子类QMediaService和/或作为输入,注册它们并以某种方式QMediaControl使用它们。但是根据有关该主题的官方 Qt 文档中的页面,这是一条少有人走的路,我独自一人:QImageQMediaRecorder

一般来说,实现 QMediaService 超出了本文档的范围,应寻求相关邮件列表或 IRC 频道的支持。

我在这篇文章中希望拥有这方面知识的人可以对如何做到这一点有所了解。我认为记录这组特性将为 Qt5 的用户打开许多有用的可能性。

2020-06-16 更新: 已经快 4 年了,仍然没有一个答案。我将悬赏这个问题,并接受最近 Qt5的工作示例代码的最佳答案。

4

2 回答 2

0

You can try libqtavi. It is a wrapper around the libgwavi. API looking simple and good integration with Qt classes. But only support MJPG codec and avi format and its bigger output size than 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();
于 2020-10-30T12:03:39.277 回答
0

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

于 2020-07-03T13:18:28.780 回答