You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg新API中能否获取coded_width?(不使用废弃API)

新版FFmpeg获取coded_width/coded_height的正确方式

当然可以!在新版FFmpeg API中,完全不需要依赖已废弃的streams[videoStreamIndex]->codec来获取编码后的宽高(coded_width/coded_height),下面是标准且可靠的做法:

直接从AVCodecParameters获取

新版API里,每个AVStream结构体的codecpar字段就是专门用来存储流编码参数的AVCodecParameters,它的coded_width和coded_height与旧版废弃API中的对应参数完全一致,不存在所谓的“差异”。

示例代码:

// 假设你已经获取到了格式上下文format_ctx和视频流索引videoStreamIndex
AVStream *video_stream = format_ctx->streams[videoStreamIndex];
int coded_width = video_stream->codecpar->coded_width;
int coded_height = video_stream->codecpar->coded_height;

可能的误区:别混淆coded宽高和显示宽高

你提到担心AVCodecParameters的参数和coded_width有差异,大概率是混淆了两个概念:

  • coded_width/coded_height:编码帧的实际存储尺寸,可能包含为了编码对齐添加的黑边(比如H.264要求宽高是16的倍数)
  • width/height:视频的显示尺寸,也就是实际内容的可视尺寸

旧版API中,这些参数也同时存在于streams[...]->codec里,新版只是把它们迁移到了codecpar中,定义完全没变。

解码器初始化后的参数同步

如果你后续需要打开解码器,解码器对应的AVCodecContext里也会同步这些参数——你可以通过avcodec_parameters_to_context把codecpar的参数复制到解码器上下文,此时解码器上下文的coded_width/coded_height和流层面的参数是完全一致的:

AVCodec *codec = avcodec_find_decoder(video_stream->codecpar->codec_id);
AVCodecContext *decoder_ctx = avcodec_alloc_context3(codec);
// 把流参数复制到解码器上下文
avcodec_parameters_to_context(decoder_ctx, video_stream->codecpar);
avcodec_open2(decoder_ctx, codec, NULL);

// 这里的coded_width和video_stream->codecpar->coded_width完全相同
int decoder_coded_w = decoder_ctx->coded_width;

总结一下:完全可以放心使用AVCodecParameters来获取coded_width和coded_height,这是FFmpeg官方推荐的新版做法,和旧版废弃API的结果完全一致,不存在参数差异的问题。

内容的提问来源于stack exchange,提问作者Vltber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:16:59