音视频开发(五)——转码2

本文详细介绍了使用ffmpeg进行音视频转码的过程,包括输入初始化、查找音视频流、选择解码器和编码器,特别是视频解码器和音频解码器的配置,以及解码编码的核心步骤。最终目标是将avi文件转换为mp4格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我的大部分学习都来自雷神,没有基础去雷神博客转转,每次都有很多收获。
https://blog.youkuaiyun.com/leixiaohua1020/article/details/42658139

转码,就是将一个不需要的格式转换成为自己需要的格式。

上次研究不带编解码的转码,这次是带编解码的,经过解码后重新编码变换格式。
本次实验把avi转码为mp4。

一、输入初始化

// 1.初始化输入ic

AVFormatContext *ic = avformat_alloc_context();

if(avformat_open_input(&ic, in_file, 0, 0) != 0)
{
    cout << "can not open file : " << in_file << endl;
    return -1;
}
if(avformat_find_stream_info(ic, 0) < 0)
{
    cout << "no stream information" << endl;
    return -1;
}

av_dump_format(ic, 0, in_file, 0);

二、寻找音视频流

这步比较简单,利用for循环遍历就好

// 2.寻找音视频流
unsigned int i;
for(i = 0; i < ic->nb_streams; i++)
{
    if(ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
        vIndex = i;
    else if(ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)
        aIndex = i;
}

三、解码器

寻找并打开解码器

1. 视频解码器

AVCodec *v_dec = avcodec_find_decoder(ic->streams[vIndex]->codecpar->codec_id);

AVCodecContext *vDec = avcodec_alloc_context3(v_dec);
avcodec_parameters_to_context(vDe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值