当前位置: 首页 > news >正文

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);
        }
    }
}

在这里插入图片描述

相关文章:

  • 服务器磁盘卷组缓存cache设置介绍
  • 深入理解指针(3)(C语言版)
  • 工业如何数字化转型
  • 基于 Swoole 的高性能 RPC 解决方案
  • linux常用指令(9)
  • element-plus中,Loading 加载组件的使用
  • Unity粒子系统
  • 有约束的确定型存贮模型及其MATLAB实现
  • PHP 应用MYSQL 架构SQL 注入跨库查询文件读写权限操作
  • 鸿蒙NEXT开发App相关工具类
  • 简单有效的编辑AI交互 Prompt(提示)
  • ElasticSearch -- 部署完整步骤
  • 关于cmd中出现无法识别某某指令的问题
  • Microi吾码界面设计引擎之基础组件用法大全【内置组件篇·上】
  • 【AI学习】概念了解
  • 5.Excel:从网上获取数据
  • JavaScript 改变 HTML 图像
  • Axure项目实战:智慧城市APP(七)我的、消息(显示与隐藏交互)
  • BlockingQueue遇到活锁问题
  • ORA-00600 [2662]
  • 一涉嫌开设赌场的网上在逃人员在山东威海落网
  • 人民日报整版聚焦:外贸产品拓内销提速增量,多地加快推动内外贸一体化
  • 丹麦外交大臣拉斯穆森将访华
  • 外企聊营商|威能集团:公平环境增“暖”意
  • 新闻1+1丨城市,如何对青年更友好?
  • 国务院办公厅印发《国务院2025年度立法工作计划》