介绍在FFmpeg环境下使用libx264进行H.264(AVC)软编码的操作,H.265(HEVC)的编码操作使用的是libx265,但是参数基本类似。
FFmpeg软编码H.264与H.265
当前网络中常见的视频编码格式要数H.264最为火热,支持H.264的封装格式有很多,如FLV、MP4、HLS(M3U8)、MKV、TS等格式
FFmpeg本身并不支持H.264的编码器,而是由第三方模块对其进行支持,例如x264和OpenH264。使用x264进行H.264编码时,所支持的像素格式主要包含yuv420p、yuvj420p、yuv422p、yuvh422p、yuv444p、yuvj444p、nv12、nv16、nv21.
- x264编码参数
- H.264编码举例
- 编码器预设参数设置preset.ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo.随着所设置参数的不同,所编写出来的清晰度也会有所不同,设置相关的预设参数之后,有很多参数也会被设置所影响。
- H.264编码优化参数tune.使用tune参数调优H.264编码时,可以包含如下几个场景:film,animation,grain,stillimage,psnr,ssim,fastecode,zerolatency。在使用FFmpeg与x264进行H264直播编码并进行推流时,只用tune参数的zerolatency将会提升效率,因为其降低了因编码导致的延迟。
- H.264的Profile与level设置。x264编码器支持Baseline,Extented,Main,High,High10,High422,High444共7种profile参数设置。
- 控制场景切换关键帧插入参数sc_threshold。在FFmpeg中,通过命令行的-g参数设置以帧数间隔为GOP的长度,但是当遇到场景切换时,例如从一个画面突然变成另外一个画面时,会强行插入一个关键帧,这时GOP的间隔将会重新开始,为了避免这种情况的产生,可以通过使用sc_thre