引入头文件
//核心库
#include "avcodec.h"
//封装格式处理库
#include "avformat.h"
//工具库
#include "imgutils.h"
功能实现
+(void)ffmpegVideoEncode:(NSString *)filePath outFilePath:(NSString *)outFilePath{
//第一步:注册组件-编码器、解码器等
av_register_all();
//第二步:初始化封装格式上下文->视频编码->处理为视频压缩数据格式
AVFormatContext *avformat_context = avformat_alloc_context();
//注意事项:FFmpeg程序推测出文件类型->视频压缩数据格式类型
const char *coutFilePath = [outFilePath UTF8String];
//得到视频压缩数据格式类型(h264、h265、mpeg2等...)
AVOutputFormat *avoutput_format = av_guess_format(NULL, coutFilePath, NULL);
//指定类型
avformat_context->oformat = avoutput_format;
//第三步:打开输出文件
//参数一:输出流
//参数二:输出文件
//参数三:权限-输出到文件中
if (avio_open(&avformat_context->pb, coutFilePath, AVIO_FLAG_WRITE)<0) {
NSLog(@"打开输出文件失败");
return;
}
//第四步:创建输出码流->创建了一块内存空间->并不知道他是什么类型流->希望他是视频流
AVStream *av_video_stream = avformat_new_stream(avformat_context, NULL);
//第五步:查找视频编码器
//1、获取编码器上下文
AVCodecContext *avcodec_context = av_video_stream->codec;
//设置编码器上下文参数-必须设置-必不可少
//目标:设置为是一个视频编码器上下文-指定的视频编码器
//上下文种类:视频解码器、视频编码器、音频解码器、音频编码器
//2.1 设置视频编码器ID
avcodec_context->codec_id = avoutput_format->video_codec;
//2.2 设置编码器类型->视频编码器
// 视频编码器- AVMEDIA_TYPE_VIDEO
// 音频编码器- AVMEDIA_TYPE_AUDIO
avcodec_context->codec_type = AVMEDIA_TYPE_VIDEO;
//2.3 设置读取像素数据格式->编码的是像素数据格式->视频像素数据格式->YUV420P(YUV444P等...)
//注意:这个类型是根据解码的时候指定的解码的视频像素数据格式类型
avcodec_context->pix_fmt = AV_PIX_FMT_YUV420P;
//2.4 设置视频宽高->视频尺寸
avcodec_context->width = 640;
avcodec_context->height = 352;