资源简介
利用ffmpeg库进行视频的解码,将解码获取到的帧进行本地存储为ppm格式的图片文件。ppm格式的图片文件大部分的图片软件都能进行解析。

代码片段和文件信息
#include
extern “C“{
#include “libavcodec/avcodec.h“
#include “libavformat/avformat.h“
#include “libswscale/swscale.h“
}
void saveframe(AVframe* pframe int width int height int iframe)
{
FILE *pFile;
char szFilename[32];
int y;
sprintf(szFilename “frame%d.ppm“ iframe);
pFile = fopen(szFilename “wb“);
if (pFile == NULL)
return;
fprintf(pFile “P6\n%d %d\n255\n“ width height);
for (y = 0; y < height; y++)
fwrite(pframe->data[0] + y*pframe->linesize[0] 1 width * 3 pFile);
fclose(pFile);
}
int main()
{
AVFormatContext *pFormatCtx;
int i videoIndex;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVPacket packet;
int frameFinished;
int numBytes;
uint8_t *buffer;
//char* filename = “nihao.avi“;
char* filename = “cuc_ieschool.flv“;
pFormatCtx = avformat_alloc_context();
av_register_all();
if (avformat_open_input(&pFormatCtx filename NULL 0) != 0)
return -1;
if (avformat_find_stream_info(pFormatCtx NULL) < 0)
return -1;
av_dump_format(pFormatCtx 0 filename 0);
videoIndex = -1;
for (i = 0; i < pFormatCtx->nb_streams; ++i){
if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO){
videoIndex = i;
break;
}
}
if (videoIndex == -1)
{
fprintf(stderr “unsupport codec\n“);
return -1;
}
pCodecCtx = pFormatCtx->streams[videoIndex]->codec;
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if (avcodec_open2(pCodecCtx pCodec NULL) < 0)
return -1;
AVframe *pframeRGB *pframe;
pframe = av_frame_alloc();
pframeRGB = av_frame_alloc();
if (pframe == NULL)
return -1;
numBytes = avpicture_get_size(PIX_FMT_RGB24 pCodecCtx->width pCodecCtx->height);
buffer = (uint8_t *)av_malloc(numBytes * sizeof(uint8_t));
avpicture_fill((AVPicture*)pframeRGB buffer PIX_FMT_RGB24 pCodecCtx->width pCodecCtx->height);
i = 0;
struct SwsContext* img_convert_ctx;
img_convert_ctx = sws_getContext(pCodecCtx->width pCodecCtx->height pCodecCtx->pix_fmt
pCodecCtx->width pCodecCtx->height PIX_FMT_RGB24 SWS_BICUBIC NULL NULL NULL);
while (av_read_frame(pFormatCtx &packet) >= 0){
if (packet.stream_index == videoIndex){
avcodec_decode_video2(pCodecCtx pframe &frameFinished &packet);
if (frameFinished)
{
sws_scale(img_convert_ctx pframe->data pframe->linesize 0 pCodecCtx->height
pframeRGB->data pframeRGB->linesize);
if (++i <= 100)
saveframe(pframeRGB pCodecCtx->width pCodecCtx->height i);
}
}
av_free_packet(&packet);
}
av_free(buffer);
av_free(pframeRGB);
av_free(pframe);
avcodec_close(pCodecCtx);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 933615 2014-01-01 18:46 ffmpeg_get_ppm\cuc_ieschool.flv
文件 4474 2014-11-11 16:32 ffmpeg_get_ppm\ffmpeg01.vcxproj
文件 945 2014-11-11 15:41 ffmpeg_get_ppm\ffmpeg01.vcxproj.filters
文件 1051 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\aix\math.h
文件 33225 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\avisynth\avisynth_c.h
文件 2679 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\avisynth\avisynth_c_25.h
文件 26159 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\avisynth\avxsynth_c.h
文件 1743 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\avisynth\windowsPorts\basicDataTypeConversions.h
文件 2322 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\avisynth\windowsPorts\windows2linux.h
文件 1140 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\float\float.h
文件 872 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\float\limits.h
文件 2477 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\getopt.c
文件 2126 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\msvcrt\snprintf.c
文件 0 2014-11-04 10:02 ffmpeg_get_ppm\include\compat\msvcrt\snprintf.d
文件 1298 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\msvcrt\snprintf.h
文件 6894 2014-11-04 10:02 ffmpeg_get_ppm\include\compat\msvcrt\snprintf.o
文件 3708 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\os2threads.h
文件 118 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\plan9\head
文件 1154 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\plan9\main.c
文件 86 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\plan9\printf
文件 2126 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\snprintf.c
文件 1298 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\snprintf.h
文件 2778 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\strtod.c
文件 0 2014-11-04 10:02 ffmpeg_get_ppm\include\compat\strtod.d
文件 9200 2014-11-04 10:02 ffmpeg_get_ppm\include\compat\strtod.o
文件 1071 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\tms470\math.h
文件 1064 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\va_copy.h
文件 8566 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\w32pthreads.h
文件 3279 2014-08-17 21:33 ffmpeg_get_ppm\include\compat\windows\makedef
文件 176375 2014-11-04 10:14 ffmpeg_get_ppm\include\libavcodec\avcodec.h
............此处省略169个文件信息
- 上一篇:课程设计-机票预定系统
- 下一篇:有限元方法的数学基础.pdf
相关资源
- nginx-rtmp-win32-master.rar
- FFMEPG实现h264解码
- ffmpegh265rtmp.zip
- ffserver(windows下编译32位)
- qt_ffmpeg_mp4_export_and_import.zip
- 最简单的基于FFmpeg的推流器 1.2
- 简单的ffmpeg推流demo
- FFmpeg和SDL,读内存中的视频流,进行
- ffmpeg之pcm转AAC
- ffmpeg-2.8.14.tar.gz
- 利用ffmpeg的filter混音
- vs2010 ffmpeg实时解码h264码流
- ffmpeg 音视频转码代码
- windows上自己编译的最新的ffmpeg库
- Qt基于FFmpeg播放本地 H.264H264文件
- 从ffmpeg中抽取的h264解码器,可用于
- ffplay源代码
- 最简单的基于FFmpeg的推流器以推送R
- DVD文件VOB的生成代码
- FFmpeg 采集摄像头输出rtmp直播流媒体,
- 基于ffmpeg将avi视频转换为mp4视频
- (补充)修改output-example,将H.264AAC帧
- ffmpeg-win64位库
- X264实时编码,FFmpeg实时解码
- FFmpeg API读取视音频文件信息的一个工
- 使用FFmpeg采集摄像头图像和麦克风音
- opencv_ffmpeg249.dll
- FFmpeg-3.1 windows vs2013编译动态库静态库
- 基于FFmpeg4.0.2的AAC编码器
- FFmpeg获取网络摄像头数据解码
评论
共有 条评论