使用帮助
关注公众微信
 读懂通信 LTE学习大使 登陆 搜索

>> 交流与空中接口无关的方方面面
空中接口学园杂谈无限人生 → FFMPEG用GPU实现视频编码
  发表一个新主题  发表一个新投票  回复主题 您是本文的第 1227 个阅读者  浏览上一篇主题  刷新本主题   树形显示文章 浏览下一篇主题
 * 主题: FFMPEG用GPU实现视频编码 保存该页为文件  报告本帖给版主  显示可打印的版本  把本贴打包邮递  把本贴加入论坛收藏夹  发送本页面给朋友  把本贴加入IE收藏夹 
 tom 离线,有人找我吗?
  
  
  等级:LTE学习大使
  文章:4544
  积分:
  注册:2003-06-10
给tom发送一个短消息 把tom加入好友 查看tom的个人资料 搜索tom在无限人生的所有文章 点击这里发送电邮给tom 引用回复这个文章 回复这个文章楼主
发文心情 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。

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

----------------------------------------------

点击查看用户来源及管理<br>发贴IP:*.*.*.* 2022-09-18 14:16:41
  鲜花(0)  鸡蛋(0)
 tom 离线,有人找我吗?
  
  
  等级:LTE学习大使
  文章:4544
  积分:
  注册:2003-06-10
给tom发送一个短消息 把tom加入好友 查看tom的个人资料 搜索tom在无限人生的所有文章 点击这里发送电邮给tom 引用回复这个文章 回复这个文章2
发文心情 
这段时间对各种分辨率的视频转换时间记录了一下,大致是:
   1080P:CPU转换的效率为3:1,GPU转换的效率为1:2,效率提升6倍左右;
   DVD:CPU转换的效率为1:2,GPU转换的效率为1:6,效率提升3倍左右;

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

----------------------------------------------

点击查看用户来源及管理<br>发贴IP:*.*.*.* 2022-09-20 19:51:11

本主题文章数2,分页: [1]

管理选项锁定 | 解锁 | 提升 | 删除 | move | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告

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