先给出在命令行需要输入的命令:
ffmpeg -s cif -i E:\foreman_cif\foreman_cif.yuv -vcodec libx264 -level 40 -profile baseline -me_method epzs -qp 23 -i_qfactor 1.0 -g 12 -refs 1 -frames 50 -r 25 output.264
参数说明:
-s 指定YUV序列的分辨率,此处为cif(352*288)。
-i 指定输入的YUV的绝对路径。
-vcodec 指定编码器。
-profile 指定编码器使用的profile,可以是baseline,main等。此处设置为baseline,所以编码后的视频只包含I帧和P帧。
-level 指定编码器使用的level,这是设置为40对应level 4.0。
-me_method epzs 指定运动估计使用的搜索算法为EPZS(默认)。其他支持的搜索算法可以通过下面命令查找。
ffmpeg -h full | find /i "motion estimation"
-qp 设定恒定QP编码中,QP的值,范围是(from -1 to INT_MAX)。注意,这里的qp指定的是P帧的QP,而I帧和B帧的QP会进一步通过-i_qfactor 和-b_qfactor 推算。此外,在H264标准中是没有帧的概念的,但是在部分编码过程中将一整帧作为一个Slice不使用Slice group,则可以等同的理解为一帧。
-i_qfactor 为了使视频的所有帧(I帧和P帧)
-g 设置GOP大小。通过JM解码可以看到I帧实际上是IDR帧,具体为什么默认插入IDR帧以及如何取消IDR帧还不了解。
-refs 指定参考帧的数目,H.264支持多帧参考,其默认值为1。
-frames 指定需要编码的帧数。
-r 指定编码帧率。
小技巧:
当ffmpeg配置好libx264之后,可以通过 ffmpeg -h full 查询所有的帮助信息,然而想要在全部的帮助中找到想要的信息无意大海捞针。
在Ubuntu系统下,可以通过grep命令查找所需变量名称。 在Windows下面同样可以通过find命令完成,使用方法如下
ffmpeg -h full | find /i "-qp"
其中-i 选项是忽略大小写。