FFmpeg转换yuv为h264视频流

这段代码展示了如何利用FFmpeg库将YUV格式的原始视频数据编码为H264视频流。首先,初始化并配置输出格式上下文,选择H264编码器,然后读取YUV数据并进行编码,最后将编码后的帧写入输出文件。整个过程包括打开输入文件、分配编码上下文、设置编码参数、编码和写入视频帧、刷新编码器以及关闭文件。
摘要由CSDN通过智能技术生成

[备份代码使用,未优化]


#include "MyEncodeYUV.h"

#include <stdio.h>


#define __STDC_CONSTANT_MACROS


#include <libavutil/opt.h>

#include <libavcodec/avcodec.h>

#include <libavformat/avformat.h>




int flush_encoder(AVFormatContext *fmt_ctx,unsigned int stream_index){

    int ret;

    int got_frame;

    AVPacket enc_pkt;

    if (!(fmt_ctx->streams[stream_index]->codec->codec->capabilities &

          CODEC_CAP_DELAY))

        return 0;

    while (1) {

        enc_pkt.data = NULL;

        enc_pkt.size = 0;

        av_init_packet(&enc_pkt);

        ret = avcodec_encode_video2 (fmt_ctx->streams[stream_index]->codec, &enc_pkt,

                                     NULL, &got_frame);

        av_frame_free(NULL);

        if (ret < 0)

            break;

        if (!got_frame){

            ret=0;

            break;

        }

        printf("Flush Encoder: Succeed to encode 1 frame!\tsize:%5d\n",enc_pkt.size);

        /* mux encoded frame */

        ret = av_write_frame(fmt_ctx, &enc_pkt);

        if (ret < 0)

            break;

    }

    return ret;

}


int ecode_main(char * yuvFilePath,char *outFilePath,int videoWidth,int videoHeight,long num,int videoInfo[])

{

    AVFormatContext* pFormatCtx;

    AVOutputFormat* fmt;

    AVStream* video_st;

    AVCodecContext* pCodecCtx;

    AVCodec* pCodec;

    AVPacket pkt;

    uint8_t* picture_buf;

    AVFrame* pFrame;

    int picture_size;

    in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了悟生死大事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值