关闭

[置顶] ffmpeg中将每帧视频图像保存为图片的方法

标签: c++ffmpegvideo
1751人阅读 评论(0) 收藏 举报
分类:
bool  FrameDump::saveBMP(const char* filename){
<span style="white-space:pre">	</span>bool ret = save_pic(in_frm, AV_PIX_FMT_BGR24, AV_CODEC_ID_BMP, filename, dst_width, dst_height);
<span style="white-space:pre">	</span>return ret;
}
bool  FrameDump::saveJPG(const char* filename){
<span style="white-space:pre">	</span>bool ret = save_pic(in_frm, AV_PIX_FMT_YUVJ420P, AV_CODEC_ID_MJPEG, filename, dst_width, dst_height);
<span style="white-space:pre">	</span>return ret;
}
bool  FrameDump::savePNG(const char* filename){
<span style="white-space:pre">	</span>bool ret = save_pic(in_frm, AV_PIX_FMT_RGBA, AV_CODEC_ID_PNG, filename, dst_width, dst_height) ;
<span style="white-space:pre">	</span>return ret;
}
bool  FrameDump::save_pic(AVFrame *frm, AVPixelFormat pfmt, AVCodecID cid, const char* filename, int width, int height){
	AVFrame* m_frm = change_frm_fmt(in_frm, (AVPixelFormat)in_frm->format, pfmt, width, height);
	if (m_frm == NULL)
		return false;
	int outbuf_size = 900000;
	uint8_t * outbuf = (uint8_t*)malloc(outbuf_size);
	int got_pkt = 0;


	/*uint8_t *Pbuffer;
	int numBytes;
	AVFrame *pFrameRGB;
	pFrameRGB = av_frame_alloc();
	numBytes = avpicture_get_size(pfmt, dst_width, dst_height);
	Pbuffer = (uint8_t *)av_malloc(numBytes * sizeof(uint8_t));


	avpicture_fill((AVPicture*)pFrameRGB, Pbuffer, AV_PIX_FMT_RGBA, dst_width, dst_height);
	struct SwsContext* img_convert_ctx;
	img_convert_ctx = sws_getContext(in_frm->width, in_frm->height, (AVPixelFormat)in_frm->format,
		dst_width, dst_height, AV_PIX_FMT_RGBA, SWS_BICUBIC, NULL, NULL, NULL);
	sws_scale(img_convert_ctx, in_frm->data, in_frm->linesize, 0, in_frm->height,
		pFrameRGB->data, pFrameRGB->linesize);*/




	FILE* pf;
	pf = fopen(filename, "wb");
	if (pf == NULL)
		return false;
	AVPacket pkt;
	AVCodec *pCodecRGB24;
	AVCodecContext *ctx = NULL;
	pCodecRGB24 = avcodec_find_encoder(cid);
	if (!pCodecRGB24)
		return false;
	ctx = avcodec_alloc_context3(pCodecRGB24);
	ctx->bit_rate = 3000000;
	ctx->width = dst_width;
	ctx->height = dst_height;
	AVRational rate;
	rate.num = 1;
	rate.den = 25;
	ctx->time_base = rate;
	ctx->gop_size = 10;
	ctx->max_b_frames = 0;
	ctx->thread_count = 1;
	ctx->pix_fmt = pfmt;


	int ret = avcodec_open2(ctx, pCodecRGB24, NULL);
	if (ret < 0)
		return false;


	int size = ctx->width * ctx->height;
	av_init_packet(&pkt);
	static int got_packet_ptr = 0;
	pkt.size = outbuf_size;
	pkt.data = outbuf;
	got_pkt = avcodec_encode_video2(ctx, &pkt, m_frm, &got_packet_ptr);
	m_frm->pts++;
	if (got_pkt == 0)
	{
		fwrite(pkt.data, 1, pkt.size, pf);
	}
	else{
		return false;
	}
	fclose(pf);
	return true;
}



   
1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

ffmpeg将视频帧转换为jpg格式的图像

  • 2014-11-12 11:10
  • 3.04MB
  • 下载

ffmpeg封装H264成MP4、AVI视频格式,及提取出png、jpg格式图片

  • 2017-08-15 22:17
  • 19.75MB
  • 下载

ffmpeg(7):将h264编码的视频流保存为BMP或者JPEG图片

一般我们知道播放视频流的时候是有截图功能的。 所以我想是否可以将视频流保存为BMP或者JPEG 参考: 1.最简单的基于FFMPEG的图像编码器(YUV编码为JPEG) http://...
  • oldmtn
  • oldmtn
  • 2015-07-03 16:09
  • 14683

用FFmpeg从视频截取任意一帧图片的解决办法~

From: http://www.cnblogs.com/yao/archive/2006/01/17/318772.html   在我的另一篇日志中,说到利用FFmpeg从视频截图的命令,那...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2014-09-26 13:50
  • 5779

FFmpeg解码视频保存为一帧帧jpg图片

  • 2017-10-02 18:04
  • 40.42MB
  • 下载

ffmpeg视频关键帧提取保存为图片

本程序基于ffmpeg官方例子demuxing_decoding.c文件来改写的,可以将mp4文件分离成未编码的视频裸流和音频裸流,另外增加了提取mp4关键帧,并保存为jpg格式图片的部分代码。
  • jw20082009jw
  • jw20082009jw
  • 2016-12-25 12:39
  • 2985

ffmpeg (七):将h264编码的视频流保存为BMP或者JPEG图片

转自:http://blog.csdn.net/oldmtn/article/details/46742555 一般我们知道播放视频流的时候是有截图功能的。 所以我想是否可以将视频流保存为...
  • u010164190
  • u010164190
  • 2016-10-09 22:29
  • 1361

ffmpeg 例子 实现视频截图 保存为bmp文件

  • 2015-06-03 21:36
  • 36.09MB
  • 下载

最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)

伴随着毕业论文的完成,这两天终于腾出了空闲,又有时间搞搞FFMPEG的研究了。想着之前一直搞的都是FFMPEG解码方面的工作,很少涉及到FFMPEG编码方面的东西,于是打算研究一下FFMPEG的编码。...
  • leixiaohua1020
  • leixiaohua1020
  • 2014-05-09 00:25
  • 33254

利用ffmpeg截取视频图像并保存为ppm和jpg图片格式

直接贴出代码:
  • rootusers
  • rootusers
  • 2014-11-12 09:25
  • 26236
    个人资料
    • 访问:5291次
    • 积分:124
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类