欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > FFmpeg学习:AVStream AVCodecParameters

FFmpeg学习:AVStream AVCodecParameters

2025/3/31 0:51:01 来源:https://blog.csdn.net/qq_41460537/article/details/146543904  浏览:    关键词:FFmpeg学习:AVStream AVCodecParameters

1.AVStream

ffmpeg中用来描述媒体流(音频流,视频流,字幕流)的结构体,一个媒体流文件中通常包含多个流(如视频流+音频流)
属于AVFormatContext的一部分,存在于AVFormatContext::streams

2.AVStream常用字段

字段名类型说明
indexint当前流的索引(在 streams 数组中的下标)
codecparAVCodecParameters*编解码参数(重要!包括宽高、采样率等)
time_baseAVRational时间基准,PTS/DTS单位
start_timeint64_t流的起始时间戳
durationint64_t流的总时长(以 time_base 为单位)
nb_framesint64_t总帧数(某些格式可能为0)
avg_frame_rateAVRational平均帧率(视频流特有)
r_frame_rateAVRational实际帧率
metadataAVDictionary*当前流的元数据

3.AVCodecParameters

FFmpeg中的核心结构体之一,在新版本的FFmpeg中取代了AVCodecContext的一部分作用,用于描述一个媒体流的编解码参数,如视频的宽高/采样率/编码格式等。

4.AVCodecParameters常用字段

字段名类型说明
codec_typeenum AVMediaType媒体类型(视频、音频、字幕等)
codec_idenum AVCodecID编码器 ID(如 H264, AAC, MP3)
formatint像素/采样格式(音频/视频不同)
bit_rateint64_t比特率(单位:bps)
widthint视频宽度(仅视频)
heightint视频高度(仅视频)
sample_rateint音频采样率(仅音频)
channelsint音频声道数(仅音频)
channel_layoutuint64_t声道布局(如立体声、5.1等)
profileint编码器 profile(如 baseline, main)
levelint编码器 level

5.常用方法:拷贝参数

avcodec_parameters_copy(out_stream->codecpar, in_stream->codecpar);

直接复制流参数,在做转码/封装时使用

6.打印示例

//AVStream
inline void printAVStreamCase(const char* input) {AVFormatContext* fmt_ctx = nullptr;avformat_open_input(&fmt_ctx, input, nullptr, nullptr);if(!fmt_ctx) {fprintf(stderr, "open file failed");return ;}int video_stream_index = 1;for(unsigned int i = 0; i < fmt_ctx->nb_streams; i++) {AVStream *stream = fmt_ctx->streams[i];AVCodecParameters *codecpar = stream->codecpar;if(codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {printf("Video stream: index=%d, width=%d, height=%d\n",stream->index, codecpar->width, codecpar->height);} else if (codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {printf("Audio stream: index=%d, sample_rate=%d",stream->index, codecpar->sample_rate);}}
}

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词