音视频入门基础: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命令显示的视频码率不准确:

相关推荐
小gpt&16 分钟前
实现qt拖拽显示或者播放
数据库·qt·音视频
EasyCVR3 小时前
ISUP协议视频平台EasyCVR萤石设备视频接入平台银行营业网点安全防范系统解决方案
大数据·人工智能·物联网·安全·音视频·监控视频接入
Black蜡笔小新5 小时前
H.265流媒体播放器EasyPlayer.js网页全终端安防视频流媒体播放器可以播放本地视频吗
javascript·音视频·h.265
菊风 Juphoon5 小时前
菊风视频能力平台开发服务正式入驻华为云云商店,成为华为云联营联运合作伙伴
华为云·音视频
无法雾题啊6 小时前
视频偏黄怎么调色?去黄提亮视频的方法
音视频·视频编解码
内核工匠7 小时前
WebRTC音视频同步原理与实现详解(上)
音视频·webrtc
mo47767 小时前
webrtc音频模块介绍(二) ADM
音视频·webrtc
索迪迈科技8 小时前
渣土车治理新方案:智能化引领安全与环保新时代
人工智能·安全·音视频·视频监控·车载监控·车辆安全
ziqibit11 小时前
linux部署Whisper 视频音频转文字
whisper·音视频
@Crazy Snail12 小时前
C# Winform--ffmpeg图片合成视频以及参数设置
开发语言·ffmpeg·c#