gpt4 book ai didi

c++ - 在提供的时间Qt中获取视频帧

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:55 25 4
gpt4 key购买 nike

我想做的是在某个时间(例如 20 秒)获取视频帧。我知道我可以做这样的事情 - 倒回视频并暂停它:

QMediaPlayer* player = new QMediaPlayer;
...
player->play();
player->setPosition(20000);
player->pause();

但是有没有更优雅的解决方案(这对我来说似乎是一个 hack,因为我不需要整个视频,但有时只需要一帧)?

最佳答案

以下步骤可以帮助您从视频文件中捕捉帧。

项目级别

  1. QT += 多媒体

代码级别

  1. 启动QMediaplayer对象(QMediaPlayer(QObject parent, QMediaPlayer::VideoSurface)
  2. 将 QMediaplayer.setVideoOutput 设置为(QAbstractVideoSurface 的子类)
  3. QAbstractVideoSurface 的子类应该重新实现方法 supportedPixelFormats、isFormatSupported、start、present
    4.从present方法我们可以得到每一帧的图像缓冲区
  4. 使用 QMediaplayer 加载视频文件
  5. setMute = true(audio)
  6. 将所需位置(以毫秒为单位)设置到 QMediaplayer 对象
  7. 开始播放方法
  8. present 方法将接收到的数据缓冲区转换为QImage,然后再转换为QPixmap(如果需要)。
  9. 获得像素图后,使用它加载小部件(例如:在 QLabel 中)
  10. 立即暂停视频文件的播放(如果您需要捕获其他帧。其他明智的做法是使用 stop() 而不是 pause())。这可以使用从子类对象 (QAbstractVideoSurface) 到 QMediaPlayer 对象的信号槽来完成
  11. 完成后,调用QAbstractVideoSurface子类的stop方法,然后调用QMediaplayer

可以找到上述示例应用程序 here

(应用程序屏幕截图)

enter image description here

打开视频文件:浏览并选择一个视频文件
Slider : 选择你想要的位置
捕获:捕获图像并在 QLabel 中查看
Save : 保存拍摄的图像

关于c++ - 在提供的时间Qt中获取视频帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38468644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com