音视频相关
1.音视频相关
1.一些基本数据格式
- 封装格式:MP4,RMVB,TS,FLV,AVI
- 视频编码数据:H.264,MPEG2,VC-1
- 音频编码数据:AAC,MP3,AC-3
- 视频像素数据:YUV420P,RGB
- 音频采样数据:PCM
2.播放视频文件的流程
3.编码格式及工具
1)封装格式:视频码流和音频码流按照一定的格式存储在一个文件中 分析工具:Elecard Format Analyzer
举例:
MPEG2-TS:
*不含文件头,由数据大小固定(188Byte)的TS Packet构成
FLV格式:
*包含文件头,数据由大小不固定的Tag构成
2)视频编码数据
视频编码作用:将视频像素数据(RGB,YUV等)压缩为视频码流,从而降低视频的数据量。 工具:Elecard Stream Rye
举例:
H.264格式:
*数据由大小不固定的NALU构成
*最常见,1个NALU存储了1帧画面的压缩编码后的数据
*H.264压缩方式特点:
-比较复杂。
-可以将图象数据压缩一百倍以上
3)音频编码数据
音频编码:将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
举例:
AAC格式:
*数据由大小不固定的ADTS构成
*特点
-比较复杂
-音频数据压缩10倍以上
4)视频像素数据
*作用:保存了屏幕上每个像素点的像素值
*特点:视频像素数据体积很大
举例:
*RGB格式
存储每个像素点的RGB信息,BMP文件存储的就是RGB格式的像素数据。
*YUV信息
Y只包含亮度信息,UV包含色度信息,uv各占Y的四分之一
5)音频采样数据:
*保存了音频中每个采样点的值,体积很大, 工具:Adobe Audition
举例:
PCM格式:
*单声道按顺序存储每个采样点的数据
*双声道按照“左右,左右。。”的顺寻存储每个采样点的两个声道的数据。
2.FFmpeg
*背景
使用广泛:
*视频播放器和转码器的内核
特点:
*基于命令行
*开源
命令行工具
1.ffmpeg.exe
用于视频的转码
ffmpeg -i {输入文件路径} -b :v {输出视频码率} {输出文件路径}
举个例子: ffmpeg -i input.avi -b:v 640k output.ts
2.ffplay.exe的使用
用于视频的播放
ffplay [文件路径]
q/esc 退出 p/空格暂停 f 全屏 鼠标点击屏幕:跳转到指定位置
3.视频解码
解码:
*压缩解码数据-> 像素数据
举例:H.264===> "H.264码流-> YUV"
一般解码流程:
封装格式---------->提取视频码流------> 解码
举例:MKV =====> "MKV-> H.264码流_> YUV"
4.类库
avcodec:编解码(最重要)
avformat:封装格式处理
avfilter:滤镜特效处理
avdevice:各种设备的输入输出
avutil:工具库(大部分库都需要这个库的支持)
postproc:后加工
swresample:音频采样数据格式转换
swscale:视频像素数据格式转换
4.1 FFmpeg解码流程
4.1 FFmpeg解码核心数据结构