音视频入门基础:FLV专题(24)——FFmpeg源码中,获取FLV文件视频信息的实现

一、引言

通过FFmpeg命令可以获取到FLV文件的视频压缩编码格式、色彩格式(像素格式)、分辨率、码率、帧率信息:

而由《音视频入门基础:FLV专题(9)------Script Tag简介》和《音视频入门基础:FLV专题(15)------Video Tag简介》可以知道,FLV文件中名称为"onMetadata"的Script Tag、每个Video Tag的VideoTagHeader、AVCDecoderConfigurationRecord(extradata)都会包含视频信息。

名称为"onMetadata"的Script Tag:

每个Video Tag的VideoTagHeader:

AVCDecoderConfigurationRecord:

可以看到,FLV文件中的上述三个地方都会存在视频信息,有些信息比如:视频压缩编码格式、视频帧率、视频分辨率甚至是重复的。所以FFmpeg到底获取的是哪个地方的视频信息呢,本文为大家揭开谜底。

二、视频压缩编码格式

FLV文件中名称为"onMetadata"的Script Tag、每个Video Tag的VideoTagHeader都包含视频压缩编码格式信息。但是FFmpeg获取FLV文件的视频压缩编码格式,是从Video Tag的VideoTagHeader的CodecID属性中获取的、而忽略onMetadata中的:

FFmpeg源码从Video Tag的VideoTagHeader中获取视频压缩编码格式的内部实现原理可以参考:《音视频入门基础:FLV专题(16)------FFmpeg源码中,解码Video Tag的VideoTagHeader的实现》。

三、视频压缩编码格式的profile

FFmpeg获取FLV文件的视频压缩编码格式的profile,是通过SPS的profile_idc属性获取到的,具体可以参考:《音视频入门基础:H.264专题(17)------FFmpeg源码中,获取H.264视频的profile的实现》:

四、视频的色彩格式

FFmpeg获取FLV文件视频的色彩格式,是通过SPS中的属性chroma_format_idc获取到的,具体可以参考:《音视频入门基础:H.264专题(13)------FFmpeg源码中通过SPS属性获取视频色彩格式的实现》:

五、视频分辨率

FLV文件中名称为"onMetadata"的Script Tag、AVCDecoderConfigurationRecord中的SPS都包含视频分辨率信息。但是FFmpeg获取FLV文件的视频分辨率,是通过SPS中的属性获取的、而忽略onMetadata中的。具体可以参考:《音视频入门基础:H.264专题(12)------FFmpeg源码中通过SPS属性计算视频分辨率的实现》:

六、视频码率

FFmpeg获取FLV文件中的视频码率是通过解析名称为"onMetadata"的Script Tag获取的。具体原理跟获取FLV文件中的音频码率一致,具体可以参考:《音视频入门基础:FLV专题(23)------FFmpeg源码中,获取FLV文件音频信息的实现(下)》。由于FFmpeg源码有bug,所以通过FFmpeg命令显示的视频码率不准确:

相关推荐
RTC实战笔记5 天前
Android 实时音视频接入教程:媒体补充增强信息(SEI)
音视频·媒体·rtc
潜创微科技6 天前
HDMI1.3 无线传输芯片方案 空旷 150 米量产级音视频方案
音视频
VidDown6 天前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
换个昵称都难6 天前
音频格式之WAV
音视频
AI创界者6 天前
PilotTTS 一键整合包(Win/Mac):8G 显存畅跑,实测解锁情绪与副语言的精准控制
人工智能·macos·aigc·音视频
u152109648496 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
VidDown6 天前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频
EasyDSS6 天前
全能音视频平台/私有化音视频系统EasyDSS!直播/点播/会议/集群对讲一站式落地
音视频
Damon_X6 天前
车载音频复习
音视频
源之缘-OFD先行者6 天前
破界渲染:WinForm下的FFmpeg+Vortice极速推流引擎
ffmpeg·winform·推流·h264