音频的裸数据格式就是脉冲编码调制(Pulse Code Modulation,PCM)数据
量化格式(sampleFormat):指记录声音的动态范围,它以位(Bit)为单位
采样率(sampleRate):记录声音时每秒的采样个数,它用赫兹(Hz)来表示。
声道数(channel)
数据格式
主要是为了在降低带宽负担的同时为视频腾出更多带宽空间
MP3
AAC
OGG
低码率,高音质
兼容性不好
适用于语音聊天
像素(Pixel):图像显示的基本单元
每英寸像素(PPI):理论上屏幕 PPI 越高,屏幕就越精细,画质相对就更出色
颜色表示:R、G、B 也被称为 “基色分量”。它们的取值分别从 0 到 255,一共256个等级(256时2的8次方)。所以任何颜色都可以 R、G、B 三个值的组合来表示
YUV:主要是因为RGB信号不利于压缩;我们可以把更多带宽留给黑—白信号(被称作“亮度”),将稍少的带宽留给彩色信号(被称作“色度”);其中 “Y” 表示明亮度(Lumina nce 或 Luma),也就是灰阶值;而 “U” 和 “V” 表示的则是色度(Chrominance 或 Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
静态压缩:图片空间上的冗余,相同像素
视频由一些列图片组成,每一张称之为帧
冗余信息
时间冗余
帧间编码
运动补偿
运动表示
运动估计
空间冗余
编码
帧率(FPS):每秒多少帧画面
IPB帧
I帧
P帧
B帧
双向预测帧,依赖:
前面I帧或P帧
后面的P帧
IDR帧
H264采用多帧预测,P帧可能参考I帧之前的帧
IDR之后的帧,只会参考IDR帧之后的帧
DTS和PTS
DTS解码时间
PTS播放时间
没有B帧的情况下,DTS=PTS
有B帧的情况下,DTS就与PTS不一样
GOP
查看支持的文件格式
第一列支持的编解码器
第二列格式名称
第三列描述
查看支持的编解码器
查看支持的编码器
查看支持的编码器
查看支持的滤镜
查看不同模块支持的参数
由文件切片和目录文件组成
EXTM3U 必须包含的标签,用于标识m3u8文件
EXT-X-VERSION 指示版本
EXT-X-TARGETDURATION 列表中最常分片时长
EXT-X-MEDIA-SEQUENCE 当前应该播放的分片序号
EXTINF 列表中每个分片的时长
EXT-X-ENDLIST 表明列表文件不再更新
按时长切分
segment :切片
segment_time:切片时长
按时间点切分
从5,10,17 秒处分割成4片
ffconcat格式索引
segment_list_type:指定分片索引类型
segment_list:指定索引文件名
索引文件内容如下
CSV格式索引
视频截取
ss
:起始时间
t
:截取时长
从mp4中抽取AAC
提取视频
vcodec
:指定编解码器
NvidiaGPU
https://developer.nvidia.com/zh-cn/blog/nvidia-ffmpeg-transcoding-guide/
使用硬件解码器h264_cuvid
和 h264_nvenc
硬件编码器
RTMP
drawtext 滤镜,冒号分隔参数
fontsize 字体大小
fontfile 字体文件
text 水印文本
x,y 位置
AVFormat
封装格式处理模块
AVCodec
编解码模块
AVFilter
音频、视频、字幕滤镜
语法规则
相同线性链,用逗号分隔
不同线性链,用分号分隔
中括号,为结果命名
swscale
视频图像转换计算模块
分辨率
像素格式
swresample
libavutil
libavutil是一个实用库,用于辅助多媒体编程。如字符串函数、随机数函数
libavdevice
从输入设备音视频采集,渲染到音视频输出设备
libpostproc
后期处理
av_register_all
注册编解码器
注册封装格式
注册网络协议
数据包/数据帧(AVPacket/AVFrame)
av_packet_alloc/av_frame_alloc(分配数据包/分配数据帧)
av_packet_free/av_frame_alloc(释放数据包内存/释放数据帧内存)
注册模块->打开输出上下文->增加流->写文件头->循环写入数据包->写入文件结尾数据
注册模块->打开输入上下文->查找音视频流信息->循环读取视频包->关闭输入上下文
注册模块->查找解码器->分配解码器上下文->打开解码器->发送数据包->循环读取完,解码后的数据帧->释放解码器上下文
编码跟解码类似