我正在使用精彩的[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()
为了记录,我使用Qt4
和Qt5
答案 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