Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用QtAV进行视频缩略图_Qt_Video_Qt5_Qt4_Thumbnails - Fatal编程技术网

使用QtAV进行视频缩略图

使用QtAV进行视频缩略图,qt,video,qt5,qt4,thumbnails,Qt,Video,Qt5,Qt4,Thumbnails,我正在使用精彩的[QtAV](https://github.com/wang-bin/QtAV/)执行视频解码的软件包。我想要实现的是获取视频的缩略图。以下是我迄今为止所做的工作 bool saveThumb( QString videoFile ) { AVDemuxer *demux = new AVDemuxer(); demux->setSeekUnit( SeekByFrame ); demux->setSeekType( KeyFrameSeek

我正在使用精彩的
[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;
}
bool saveThumb(QString视频文件){
AVDemuxer*demux=新的AVDemuxer();
demux->setSeekUnit(参见KByFrame);
demux->setSeekType(关键帧Seek);
VideoDecoder*vdec=视频解码器::创建(VideoDecodeGrid_FFmpeg);
解复用->设置媒体(视频文件);
qDebug()打开();
数据包pkt=demux->Packet();

qDebug()要获取视频缩略图,只需使用QtAV
VideoFrameExtractor
类,如:

#include "QtAV/VideoFrameExtractor.h"
...

bool saveThumb(const QString& videoFile) {
   auto extractor = new QtAV::VideoFrameExtractor;
   connect(
       extractor,
       &QtAV::VideoFrameExtractor::frameExtracted,
       extractor,
       [this, extractor, videoFile](const QtAV::VideoFrame& frame) {
           const auto& img = frame.toImage();
           auto saved = img.save(videoFile + ".jpg" );
           extractor->deleteLater();
       });
   connect(
       extractor,
       &QtAV::VideoFrameExtractor::error,
       extractor,
       [this, extractor](const QString& errorStr) {
           qDebug() << errorStr;
           extractor->deleteLater();
       });

   extractor->setAsync(true);
   extractor->setSource(videoFile);
   extractor->setPosition(1);
}
#包括“QtAV/VideoFrameExtractor.h”
...
bool saveThumb(const QString和videoFile){
自动提取器=新的QtAV::VideoFrameExtractor;
连接(
提取器,
&QtAV::VideoFrameExtractor::frameExtracted,
提取器,
[此,提取器,视频文件](常量QtAV::视频帧和帧){
const auto&img=frame.toImage();
自动保存=img.save(videoFile+“.jpg”);
提取器->deleteLater();
});
连接(
提取器,
&QtAV::VideoFrameExtractor::错误,
提取器,
[this,extractor](常量QString&errorStr){
qDebug()deleteLater();
});
提取器->设置异步(true);
提取器->设置源(视频文件);
提取器->设置位置(1);
}