《 空中接口学园 》
>>   杂谈
>>>>  FFMPEG用GPU实现视频编码

--  作者:tom
--  发布时间:2022-09-18 14:16:41
这些年视频的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。

  个人感觉,还是一个非常大的成就。


--  作者:tom
--  发布时间:2022-09-20 19:51:11
这段时间对各种分辨率的视频转换时间记录了一下,大致是:
   1080P:CPU转换的效率为3:1,GPU转换的效率为1:2,效率提升6倍左右;
   DVD:CPU转换的效率为1:2,GPU转换的效率为1:6,效率提升3倍左右;

  看来视频分辨率越高,GPU转换的效果越明显。


目前已经有2条评论    >>> 发表你的见解

Powered by:Old version
Copyright ©2002 - 2019空中接口学园 , 页面执行时间:15.625毫秒