使用QtAV进行视频缩略

时间:2016-04-03 10:43:13

标签: video qt4 qt5 thumbnails video-thumbnails

我正在使用精彩的[QtAV](https://github.com/wang-bin/QtAV/)包来执行视频解码。我想要实现的是获取视频的缩略图。这是我到目前为止所做的。

bool saveThumb( QString videoFile ) {

    AVDemuxer *demux = new AVDemuxer();
    demux->setSeekUnit( SeekByFrame );
    demux->setSeekType( KeyFrameSeek );

    VideoDecoder *vdec = VideoDecoder::create( VideoDecoderId_FFmpeg );

    demux->setMedia( videoFile );

    qDebug() << "Loading file:" << demux->load();
    qDebug() << "Seeking to 50%" << demux->seek( 0.5 );
    qDebug() << "Reading frame:" << demux->readFrame();

    vdec->setCodecContext( demux->videoCodecContext() );
    vdec->open();

    Packet pkt = demux->packet();
    qDebug() << "Packet valid:" << pkt.isValid();
    qDebug() << "Decoding packet:" << vdec->decode( pkt );

    VideoFrame frame = vdec->frame();
    qDebug() << "Valid frame:" << frame.isValid();
    QImage img = frame.toImage();
    qDebug() << "Valid image:" << ( not img.isNull() );
    bool saved = img.save( videoFile + ".jpg" );

    return saved;
}

我的问题是,frame.isValid()始终返回false,无论我寻找的位置,还是我播放的视频。上面的所有检查都会返回true

我想补充一点,如果我使用AVPlayer并播放视频,视频会正常呈现,但是没有播放音频。

此外,我还可以使用AVPlayer::videoCapture()->capture()

捕获快照

为了记录,我使用Qt4Qt5

尝试了此操作

1 个答案:

答案 0 :(得分:2)

要获取视频缩略图,您可以使用QtAV np.subtract(r_mat, a, out=out, where=row_mask & elem_mask) np.add(r_mat, a, out=out, where=~row_mask & elem_mask) out[row_mask & ~elem_mask] = np.nan out[~row_mask & ~elem_mask] = 0 类,例如:

VideoFrameExtractor