编解码是 FFmpeg 的核心能力,通过 libavcodec
实现音视频的压缩与还原。
视频编码算法
音频编码算法
主流编解码器对比:
编码标准 | 核心算法特点 | 适用场景 |
---|---|---|
H.264 | 多参考帧、1/4像素运动估计 | 通用视频、直播 |
H.265 | 编码树单元(CTU)、并行处理 | 4K/8K 高分辨率 |
VP9 | 动态分辨率切换 | Web 流媒体 |
AV1 | 多符号熵编码 | 开源替代方案 |
优化实时传输的延迟与兼容性:
-tune zerolatency
禁用 B 帧并缩小 GOP,减少直播缓冲(如 RTMP 推流)ffmpeg -i rtmp://input -c copy -f hls output.m3u8 # RTMP 转 HLS(无需重编码)
通过 libavfilter
实现实时音视频处理:
scale
)、裁剪(crop
)、旋转(rotate
)yadif
)、降噪(hqdn3d
)、水印叠加(overlay
)ffmpeg -i input.mp4 -vf "scale=1280:720, transpose=1" output.mp4 # 缩放 + 旋转
libswresample
实现采样率/声道转换(如 5.1→立体声)loudnorm
)、淡入淡出(afade
)提升大规模处理效率:
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
-threads 8
拆分任务至多核 CPU-slices 4
分割帧为独立编码区ffmpeg
:转码/剪辑(-i
、-ss
、-c copy
)ffprobe
:分析媒体信息(-show_streams
)ffplay
:测试播放(支持实时滤镜预览)ffmpeg -i video.mp4 -vn -c:a copy audio.aac # 提取音频
ffmpeg -i input.mp4 -t 10 -s 640x360 clip.mp4 # 10秒剪辑+分辨率调整
avformat_open_input
)avcodec_send_packet
)avfilter_graph_create
)AVFormatContext *fmt_ctx = NULL;
avformat_open_input(&fmt_ctx, "input.mp4", NULL, NULL); // 打开文件
avformat_find_stream_info(fmt_ctx, NULL); // 获取流信息
-crf
、-preset
)v360
滤镜)amix
)、响度标准化FFmpeg 的算法体系以编解码为基石,延伸至流媒体、滤镜、硬件加速等场景。学习路径需:
libavcodec
、libavfilter
),使其成为音视频开发的核心基础设施。对算法原理(如 DCT、运动估计)的深入理解,是优化处理质量与效率的关键。