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

FFmpeg中根据枚举获取名称的相关函数总结,例如av_get_sample_fmt_name和avcodec_get_name等

目录

一、音频类

二、视频 / 像素格式类

三、Codec / Media 类型(avcodec)

四、错误码 / 状态(调试必用)

五、AVFormat / IO / Seek 相关

六、Log / Level / DTS 之类

七、完整对照速查表

八、Qt / C++ 友好封装

九、一个“打印流信息”的一行版

十、一句话总结


觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。

由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。

在FFmpeg库中,处理枚举类型并获取它们的名称是一个常见的需求,尤其是在调试或显示信息时。FFmpeg提供了多种函数来实现这一功能,这些函数通常位于libavutillibavcodec库中。以下是一些常用的函数,它们可以帮助你根据枚举获取名称。

结论先说:

FFmpeg 几乎所有核心 enum 都有官方get_name函数

但名字不统一(有av_*/avcodec_*/avutil_*

下面按模块整理,表格为主,实战优先


一、音频类

枚举

获取名称函数

返回内容

示例

AVSampleFormat

av_get_sample_fmt_name()

"s16","fltp"

av_get_sample_fmt_name(AV_SAMPLE_FMT_S16)

AVChannelLayout

av_channel_layout_describe()

"stereo","5.1"

av_channel_layout_describe(&ch)

AVChannel

av_get_channel_name()

"FL","FR"

av_get_channel_name(AV_CHAN_FRONT_LEFT)

AVChannelOrder

av_channel_order_name()

"native","wave"

FFmpeg ≥ 5.1

AVSampleRate(无 enum)

自己QString::number()

音频三件套(Qt 调试神器):

qDebug("fmt=%s ch=%s rate=%d", av_get_sample_fmt_name(fmt), av_channel_layout_describe(&layout), rate);

二、视频 / 像素格式类

枚举

获取名称函数

返回内容

示例

AVPixelFormat

av_get_pix_fmt_name()

"yuv420p","rgb24"

AVColorSpace

av_color_space_name()

"bt709","bt2020"

FFmpeg ≥ 6

AVColorPrimaries

av_color_primaries_name()

"bt709"

AVColorTransferCharacteristic

av_color_transfer_name()

"srgb","pq"

AVColorRange

av_color_range_name()

"mpeg","jpeg"

AVFieldOrder

av_frame_get_side_data()+ enum

"top_bottom"

少直接用


三、Codec / Media 类型(avcodec)

枚举

函数

返回

AVCodecID

avcodec_get_name()

"aac","h264"

AVMediaType

av_get_media_type_string()

"audio","video"

AVProfile

avcodec_profile_name()

"High","Main"

打印流信息(替代 av_dump_format 的轻量版):

qDebug("[%s] codec=%s profile=%s", av_get_media_type_string(st->codecpar->codec_type), avcodec_get_name(st->codecpar->codec_id), avcodec_profile_name(st->codecpar->codec_id, st->codecpar->profile));

四、错误码 / 状态(调试必用)

类型

函数

说明

int ret

av_strerror()

转字符串(不是 enum)

AVERROR_EOF

av_strerror()

"End of file"

AVERROR(EAGAIN)

"Resource temporarily unavailable"

标准写法:

char err[128]; av_strerror(ret, err, sizeof err); qDebug("ff err: %s", err);

五、AVFormat / IO / Seek 相关

枚举

函数

返回

AVFMT_*flags

无统一函数

自己fmt_ctx->iformat->name

AVIOContextprotocol

fmt_ctx->iformat->name

"rtsp","mp4"

seek flags

AVSEEK_FLAG_BACKWARD手写

协议名:

fmt_ctx->iformat->name // "mov,mp4,m4a,3gp"

六、Log / Level / DTS 之类

枚举

函数

AVLogLevel

无(自己 switch)

AVDiscard

AVOptionType

av_opt_type_name()(FFmpeg ≥ 6)


七、完整对照速查表

你看到的 enum

正确 API

AVCodecID id

avcodec_get_name(id)

AVMediaType t

av_get_media_type_string(t)

AVSampleFormat f

av_get_sample_fmt_name(f)

AVPixelFormat p

av_get_pix_fmt_name(p)

AVChannelLayout c

av_channel_layout_describe()

int err

av_strerror()

AVProfile p

avcodec_profile_name()


八、Qt / C++ 友好封装

inline QString ff_codec(const AVCodecParameters *p) { return avcodec_get_name(p->codec_id); } inline QString ff_fmt(AVSampleFormat f) { return av_get_sample_fmt_name(f); } inline QString ff_pix(AVPixelFormat f) { return av_get_pix_fmt_name(f) ? : "unknown"; } inline QString ff_err(int r) { char b[256]; av_strerror(r, b, sizeof b); return b; }

九、一个“打印流信息”的一行版

void dump(AVStream *s) { qDebug("type=%s codec=%s fmt=%s ch=%d rate=%d", av_get_media_type_string(s->codecpar->codec_type), avcodec_get_name(s->codecpar->codec_id), av_get_sample_fmt_name((AVSampleFormat)s->codecpar->format), s->codecpar->ch_layout.nb_channels, s->codecpar->sample_rate); }

十、一句话总结

FFmpeg 的命名规则:

av_xxx_name()→ avutil / format

avcodec_xxx_name()→ codec

av_xxx_describe()→ channel / layout

错误一律av_strerror()

http://www.jsqmd.com/news/1368668/

相关文章:

  • 3个技巧让Windows窗口管理效率翻倍:FancyZones深度指南
  • 日记于8月10日
  • 如何在macOS上快速启用OBS虚拟摄像头:新手完整指南
  • 短剧、虚拟制片行业缺口扩大,拆解梵映、好影两大线上影视后期机构教学适配度差异 - 生活动态圈
  • OpenScan隐私优先文档扫描:如何在3分钟内实现本地化文档数字化管理
  • 【单片机毕业设计推荐】基于 STM32 单片机的智能饮水设备控制系统设计与实现,基于 STM32 与 ESP‑01S 的物联网饮水监控系统设计(012106)
  • 如何精通DevOps Interview Guide中的数据仓库运维:Snowflake与Redshift实战指南
  • Pock:5个高效技巧彻底改造你的MacBook Touch Bar体验
  • 为什么你的RAG回答忽好忽坏?问题通常出在这5个地方
  • 2026年常州市万华机房设备有限公司:江苏源头工厂防静电与网络地板实力观察 - 优企名品
  • 从js闭包谈到作用域、作用域链、执行上下文、内存管理
  • 5分钟快速上手:RuoYi-Vue权限管理系统的完整部署指南 [特殊字符]
  • 快消行业常用的管理软件有哪些?从进销存到BI一文明白
  • 2026三明卫生间漏水避坑指南 - 房屋修缮
  • 小白程序员必看:收藏这份AI大模型学习指南,轻松入门大模型时代!
  • 如何安全合规地处理微信数据:从开源项目下架看技术合规的重要性
  • 如何用Rust构建跨平台Android去预装应用工具:Universal Android Debloater完整指南
  • Tendermint-rs核心组件解析:Light Client如何保障区块链数据安全?
  • 深入理解DeferredTexturing核心技术:延迟纹理与传统延迟渲染的差异对比
  • Comedy核心概念解析:Actor、集群与远程通信的实战指南
  • SRE工作手册中文版:Google站点可靠性工程终极实践指南
  • 如何用OpenCore Legacy Patcher快速修复老旧Mac网络问题:5步完整指南
  • 【比赛总结】20260810 杂题训练
  • Awesome Open Hardware平台对比:Hackaday.io vs Instructables哪个更适合你?
  • 2026南平卫生间漏水避坑指南 - 房屋修缮
  • 第6篇_Python高级语法与标准库精髓:从会用到达精通
  • Heroku-buildpack-static深度解析:从入门到精通的静态网站部署终极指南
  • 3步实现企业级权限管理系统:RuoYi-Vue快速开发框架实战指南
  • rowGrid.js常见问题解答:解决图片加载、尺寸适配与浏览器兼容难题
  • through高级技巧:掌握autoDestroy选项与流生命周期管理的终极指南