使用x264压制视频简介

2360阅读 0评论2014-03-20 andrew810810
分类:嵌入式

首先下载安装编码器。x264是一个开源的H264编码器,对于Windows用户,可以直接在下载可执行程序(encoder下的32bit-8bit-depth即可)。对于Linux用户,可以先查查自己的发行版是不是已经预装了x264,或者是不是可以直接安装x264的二进制文件。如果想自己编译,我们可以在VideoLAN上 下载源代码,然后按照相应的说明进行编译。需要注意的是,在Linux上进行编译,最好先预装yasm汇编器(以便x264能直接产生一部分汇编代码,更 好的发挥CPU的性能提高编码速度)。另外,为了能够让x264直接解码各种视频文件(因为x264首先需要解码输入文件,然后才能进行编码),还需要 libswscale/libavformat或者ffmpegsource这两个库中的至少一个。前一个由ffmpeg直接提供,后一个是在 ffmpeg的基础上再进行了一些封装(但也依赖于ffmpeg)。前一个库(也就是lavf)在解码中会输出一些详细信息,方便用户及时发现源视频中是 否有什么问题;后一个库(也就是ffms)并不会输出什么信息,但会提示用户所需的剩余时间。简单来说,各有所长吧,大家可以按需选择,反正功能性方面是 没有什么巨大差别的。

下载或者编译完成以后,大家可以使用“x264 --version”命令查看一下是不是具有lavf和ffms库,我的输出如下。可以看见,这两个库我都有了。

x264 0.120.x
(libswscale 2.1.0)
(libavformat 53.24.2)
(ffmpegsource 2.17.0.0)
built on Jan 29 2012, gcc: 4.4.5
configuration: --bit-depth=8 --chroma-format=all
x264 license: GPL version 2 or later

接下来就是压制视频了。压制视频时x264有以下几个我觉得比较重要的选项:

其他一些也可能用到的选项是:

下面写两个例子:

这里还要特别谈谈隔行扫描视频的转换,也就是诸如1080i这样的视频的转换。貌似x264本身不能很好的进行反交错处理,尤其是在要缩放原始视频 的时候(比如说用1080i压制720p)。这时我们需要使用ffmpeg来解码并进行反交错,然后再调用x264进行编码(前提是ffmpeg编译时必 须打开了--enable-libx264这个选项,也即链接了x264的编码器)。下面给出一个例子:

其中,“-an”指定不输出音频,“-sn”指定不输出字幕,“-r”指定输出帧率(隔行转成逐行通常用29.97),“-s”指定输出分辨 率,“-vf yadif”指定使用yadif进行反交错,“-vcodec libx264”指定用x264进行视频编码,后面的应该都很熟悉了。

最后提醒一句,x264仅仅只是一个视频编码器,编码好视频后,我们还需要提供音频(甚至字幕等),最后再用混流器(如tsmuxer、ffmpeg、mkvmerge等) 混流生成最后的影片。

上一篇:x264使用参数介绍 - 例子
下一篇:psnr和SSIM