基于FFmpeg的视频播放器之十三:抓图

Posted 草上爬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于FFmpeg的视频播放器之十三:抓图相关的知识,希望对你有一定的参考价值。

抓图的话当然可以用QImage来实现,但是得先把yuv图像转成图像再通过QImage保持,比较麻烦。这里直接通过ffmpeg从视频流中抓取图片,也就是在yuv渲染之前抓取。
这里文件名使用当前时间,因此只需要传入图片保持的路径就行,filePath就是传入的路径

    time_t tt = time(nullptr);
    struct tm *_time = localtime(&tt);
    char szTime[64] = 0;
    strftime(szTime, 32, "%Y%m%d%H%M%S", _time);
    char mediaName[512] = 0;
    sprintf(mediaName, "%s.jpg", szTime);
    std::string mediaPath= filePath + "/" + mediaName;

整个takeSnapshot函数如下所示

void QHSnapshoter::takeSnapshot(AVFrame *frame, std::string filePath)

    AVFrame *avFrame=frame;
    int width=frame->width;
    int height=frame->height;

    time_t tt = time(nullptr);
    struct tm *_time = localtime(&tt);
    char szTime[64] = 0;
    strftime(szTime, 32, "%Y%m%d%H%M%S", _time);
    char mediaName[512] = 0;
    sprintf(mediaName, "%s.jpg", s

以上是关于基于FFmpeg的视频播放器之十三:抓图的主要内容,如果未能解决你的问题,请参考以下文章

基于FFmpeg的视频播放器之十五:录像

基于FFmpeg的视频播放器之十二:seek

基于FFmpeg的视频播放器之十六:完结

基于FFmpeg的视频播放器之十一:倍速播放

基于libVLC的视频播放器之十六:完结

使用java执行ffmpeg命令进行推流操作