• 大小: 21.21MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-29
  • 语言: 其他
  • 标签: ffmpeg  提取帧  

资源简介

最新版本ffmpeg提取任意格式视频帧并保存

资源截图

代码片段和文件信息



#include “stdafx.h“
#include 
#include 
#include 


extern “C“{
#include 

#include 
#include 
#include 
#include 
#include 
#include 

#include 

#include 

#include 
#include 
};
//libavformat 用来处理解析视频文件并将包含在其中的流分离出来, 而libavcodec 则处理原始音频和视频流的解码
using namespace std;

#pragma  comment(lib“avcodec.lib“)
#pragma  comment(lib“avdevice.lib“)
#pragma  comment(lib“avfilter.lib“)
#pragma  comment(lib“avformat.lib“)
#pragma  comment(lib“avutil.lib“)
#pragma  comment(lib“postproc.lib“)
#pragma  comment(lib“swresample.lib“)
#pragma  comment(lib“swscale.lib“)


void SaveBmp(AVCodecContext *CodecContex AVframe *Picture int width int heightint num);

int main(){
char* sourceFile = “F:\\爱在春天 TV版 47.flv“;

AVFormatContext *pInputFormatContext = avformat_alloc_context();//NULL; 
AVCodecContext *pInputCodecContext = NULL; 
AVCodec *pInputCodec = NULL;

//注册库中含有的所有可用的文件格式和编码器,这样当打开一个文件时,它们才能够自动选择相应的文件格式和编码器。
av_register_all();

int ret;
// 打开视频文件
if((ret=avformat_open_input(&pInputFormatContext sourceFile NULL NULL))!=0){
cout<<“ can‘t open file “<     return -1;
}
// 取出文件流信息
if(avformat_find_stream_info(pInputFormatContextNULL)<0){ 
cout<<“ can‘t find suitable codec parameters“< return -1;
}
//用于诊断 //产品中不可用
//dump_format(pInputFormatContext 0 sourceFile false);

//仅仅处理视频流
//只简单处理我们发现的第一个视频流
//  寻找第一个视频流
int videoIndex = -1;
for(int i=0; inb_streams; i++) {
if(pInputFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO){
videoIndex = i;
break;
}

 if(-1 == videoIndex){
 cout<<“ can‘t find video stream !“<  return -1;
 }
 // 得到视频流编码上下文的指针
 pInputCodecContext = pInputFormatContext->streams[videoIndex]->codec; 
 //  寻找视频流的解码器
 pInputCodec = avcodec_find_decoder(pInputCodecContext->codec_id);  

 if(NULL == pInputCodec){
 cout<<“can‘t decode “<  return -1;
 }

 // 通知解码器我们能够处理截断的bit流,bit流帧边界可以在包中
 //视频流中的数据是被分割放入包中的。因为每个视频帧的数据的大小是可变的,
 //那么两帧之间的边界就不一定刚好是包的边界。这里,我们告知解码器我们可以处理bit流。
 if(pInputCodec->capabilities & CODEC_CAP_TRUNCATED){
 pInputCodecContext->flags|=CODEC_FLAG_TRUNCATED;
 }


 //打开解码器
 if(avcodec_open2(pInputCodecContext pInputCodecNULL) != 0) {
 cout<<“decode error“<  return -1;
 }
 int videoHeight;
 int videoWidth;
 videoWidth = pInputCodecContext->width;
 videoHeight = pInputCodecContext->height; 

 AVPacket InPack;
 int len = 0;
 AVframe Outframe;
 int nComplete=0;

 //  加入这句话来纠正某些编码器产生的帧速错误
/* if(pInputCodecContext->frame_rate>1000 && pInputCodecContext->frame_rate_base==1)
 pInputCodecContext->frame_r

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-09-08 14:55  FfmpegTest1\
     目录           0  2013-09-08 14:55  FfmpegTest1\Debug\
     目录           0  2013-09-08 13:56  FfmpegTest1\FfmpegTest1\
     目录           0  2013-09-08 09:30  FfmpegTest1\FfmpegTest1\Debug\
     文件        2612  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\CL.read.1.tlog
     文件         692  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\CL.write.1.tlog
     文件          55  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\FfmpegTest1.lastbuildstate
     文件        1405  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\FfmpegTest1.log
     文件     1179648  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\FfmpegTest1.pch
     文件           0  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\FfmpegTest1.unsuccessfulbuild
     文件        1486  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\cl.command.1.tlog
     文件       11679  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\stdafx.obj
     文件       52224  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\vc100.idb
     文件      126976  2013-09-08 08:55  FfmpegTest1\FfmpegTest1\Debug\vc100.pdb
     文件        7972  2013-09-08 10:15  FfmpegTest1\FfmpegTest1\FfmpegTest1.vcxproj
     文件        1334  2013-09-08 10:15  FfmpegTest1\FfmpegTest1\FfmpegTest1.vcxproj.filters
     文件         143  2013-09-06 15:17  FfmpegTest1\FfmpegTest1\FfmpegTest1.vcxproj.user
     文件        1743  2013-09-06 15:18  FfmpegTest1\FfmpegTest1\ReadMe.txt
     文件    17116160  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\avcodec-55.dll
     文件     1241600  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\avdevice-55.dll
     文件     1988608  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\avfilter-3.dll
     文件     5139968  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\avformat-55.dll
     文件      357888  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\avutil-52.dll
     文件      303104  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\ffmpeg.exe
     文件        5828  2013-09-08 14:46  FfmpegTest1\FfmpegTest1\ffmpegTest.cpp
     文件      527872  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\ffplay.exe
     文件      143360  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\ffprobe.exe
     文件      187392  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\postproc-52.dll
     文件         298  2013-09-06 15:18  FfmpegTest1\FfmpegTest1\stdafx.cpp
     文件         320  2013-09-06 15:18  FfmpegTest1\FfmpegTest1\stdafx.h
     文件      279040  2013-09-06 12:54  FfmpegTest1\FfmpegTest1\swresample-0.dll
............此处省略94个文件信息

评论

共有 条评论