ffmpeg学习——基本的解码流程

本文介绍了FFmpeg的基本解码流程,包括打开输入流、设置解码器、读取包并获取帧数据以及解码步骤。通过示例代码展示了如何读取视频帧并保存为BGR24格式,注意该过程会导致图片上下翻转。
摘要由CSDN通过智能技术生成

由于工作需要,所以基本了解了一下视频的解码流程。

参考教程为:

1、王纲的《跟我一起学FFmpeg》系列

2、雷霄骅雷神的博客

原理部分暂时没有整理,后期可以补充一下知识。

ffmepg的api使用方面

1、打开一个输入流

2、设置解码器

3、读取每一个包,并获取到一帧的数据

4、交给解码器解码

下面的代码就是,读取一个视频或者文件,将其中的一帧图片保存为BGR24格式的文件,该文件加上BMP文件头即可使用图片浏览器打开。需要注意的是,这样会将图片上下翻转。所以图片会倒着显示。

 

 

#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libswscale/swscale.h>
#include <libavutil/file.h>
#include <libavutil/imgutils.h>

#include <stdio.h>

#define myprintf(x) printf(x)

unsigned char *filecontent;
unsigned char *content; 

static int parse_cmd(int argc, char * argv[])
{
	int ret = 0;
	if (argc < 2)
		return -1;
	return ret;
}

static void show_help()
{
	printf("Input error!\n");
	printf("Usage: ./decodec-and-display-ffmpeg <filepath/file>\n");
}



void add_header()
{
	filecontent     = (unsigned char*) malloc (0x5eec36);
	content         = filecontent + 0x36;
	FILE *file = fopen("./1920*1080.bmp", "rb");
	if (file < 0)
	{
		myprintf("file can not open!\n");
		return;
	}
	printf("1920*1080.bmp open success!\n");
	
	fread(filecontent, 1, 0x36, file);
	printf("finish reading 1920*1080.bmp header!\n");
	fclose(file);
	
	file = fopen("./fpsave.bgr24", "rb");
	fread(content, 1, 0x5eec00, file);
	myprintf("finish reading ./fpsave.bgr24!\n");
	fclose(file);
	
	file = fopen("./fpsave-bgr24.bmp", "wb+");
	fwrite(filecontent, 1, 0x5eec36, file);
	fclose(file);
	myprintf("Add header finish!\n");
}

int main(int argc, char *argv[])
{

	int  ret, got_picture;
	int  i, videoindex 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值