FFMPEG用GPU实现视频编码 这些年视频的H.265编码逐渐普及,手机以及PC都可以支持H.265播放,有些机顶盒也把支持H.265作为一项卖点。 相对于H.264,H.265的编码效率更高,文件更加精简。不过,我们手头大量的视频都不是采用H.265来编码的,需要进行转换。 开始我用VLC来转换,后来发现VLC是调用FFMPEG来转换的,就直接用FFMPEG来转换了。 FFMPEG是基于Linux的开源软件,我对Linux还是很熟悉的,干脆就在一台Ubuntu主机上安装了FFMPEG,开始转换。 一开始采用的是基于CPU的转换,有两个问题: 第一个问题是时间太长,能做到1:1就已经很好了,通常都要耗费3、4倍的时间,感觉耗不起。 第二个问题是开销太大,CPU占用率接近100%,风扇狂转,热风狂出,这样下去感觉CPU很难撑住。 于是,就想到了基于GPU的转换。 我这台Ubuntu主机是Intel的CPU,GPU支持视频的编码和转换。 花了好几天,网上也查阅各种资料,了解到有很多途径可以驱动和使用GPU,最后选择了VAAPI,并找到权威的参考点:http://trac.ffmpeg.org/wiki/Hardware/VAAPI 根据Intel的GPU,找到 https://github.com/intel/media-driver,按以下三步: 1. Build and install LibVA (https://github.com/intel/libva) 2. Build and install GmmLib(https://github.com/intel/gmmlib) 3. Build and install Intel(R) Media Driver for VAAPI (https://github.com/intel/media-driver) 动了一些小脑筋,比如提示No VA display found for device /dev/dri/renderD128,就用sudo去运行ffmpeg,最终实现了GPU的视频的编码和转换。 效果非常明显:CPU的利用率降低到25%,转换效率提升到5:1以上,也就是耗时1/5。 个人感觉,还是一个非常大的成就。 |