基于QT+FFMPEG的音视频开发(五)——转码2
我的大部分学习都来自雷神,没有基础去雷神博客转转,每次都有很多收获。
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