FFmpeg视频编码

引入头文件

//核心库
#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;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值