ffmpeg实现GPU(硬编码)加速转码

# 项目场景:

提示:ubuntu16将视频流(监控流)数据转码,使用GPU实现加速转码:
例如:将一个路径中的h265编码视频流数据转换为h264编码视频流数据,并输出到另一个路径中


准备工作

确定服务器有GPU

lspci | grep NVIDIA # 查看NVIDIA显卡
ubuntu-drivers devices
先在$HOME目录下创建名为 ffmpeg_sources 的目录(文件夹)

1、依赖库安装:

nasm
汇编编译器,编译某些依赖库的时候需要

cd ~/ffmpeg_sources
curl -O -L http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2
tar xjvf nasm-2.13.02.tar.bz2
cd nasm-2.13.02
./autogen.sh
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install

yasm
汇编编译器,编译某些依赖库的时候需要

cd ~/ffmpeg_sources
curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install

libx264
H.264视频编码器,如果需要输出H.264编码的视频就需要此库,所以可以说是必备

cd ~/ffmpeg_sources
git clone --depth 1 http://git.videolan.org/git/x264
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install

libx265
H.265/HEVC视频编码器。
如果不需要此编码器,可以跳过,并在ffmpeg的configure命令中移除–enable-libx265
此路径下载很慢,条件允许你,可以直接去https://bitbucket.org/multicoreware下载到window上,然后移动到该路径

cd ~/ffmpeg_sources
hg clone https://bitbucket.org/multicoreware/x265_git
cd ~/ffmpeg_sources/x265/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install

libfdk_acc
AAC音频编码器,必备

cd ~/ffmpeg_sources
git clone --depth 1 --branch v0.1.6 https://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

libmp3lame
MP3音频编码器,必备

cd ~/ffmpeg_sources
curl -O -L http://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar xzvf lame-3.100.tar.gz
cd lame-3.100
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
make
make install

libops

OPUS音频编码器
如果不需要此编码器,可以跳过,并在ffmpeg的configure命令中移除–enable-libopus

cd ~/ffmpeg_sources
curl -O -L https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz
tar xzvf opus-1.2.1.tar.gz
cd opus-1.2.1
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

libogg
被libvorbis依赖

cd ~/ffmpeg_sources
curl -O -L http://downloads.xiph.org/releases/ogg/libogg-1.3.3.tar.gz
tar xzvf libogg-1.3.3.tar.gz
cd libogg-1.3.3
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

libvorbis

Vorbis音频编码器
如果不需要此编码器,可以跳过,并在ffmpeg的configure命令中移除–enable-libvorbis

cd ~/ffmpeg_sources
curl -O -L http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
tar xzvf libvorbis-1.3.5.tar.gz
cd libvorbis-1.3.5
./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared
make
make install

libvpx

VP8/VP9视频编/解码器
如果不需要此编/解码器,可以跳过,并在ffmpeg的configure命令中移除–enable-libvpx

cd ~/ffmpeg_sources
git clone --depth 1 https://github.com/webmproject/libvpx.git
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make
make install

2、编译安装ffmpeg 3.3.8

若想安装其他版本的ffmpeg,可以在这个路径       http://ffmpeg.org/releases/      下载,然后移动到虚拟机中,从下面第三行解压执行就行

cd ~/ffmpeg_sources
curl -O -L https://ffmpeg.org/releases/ffmpeg-3.3.8.tar.bz2
tar xjvf ffmpeg-3.3.8.tar.bz2
cd ffmpeg-3.3.8
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \--prefix="$HOME/ffmpeg_build" \--pkg-config-flags="--static" \--extra-cflags="-I$HOME/ffmpeg_build/include" \--extra-ldflags="-L$HOME/ffmpeg_build/lib" \--extra-libs=-lpthread \--extra-libs=-lm \--bindir="$HOME/bin" \--enable-gpl \--enable-libfdk_aac \--enable-libfreetype \--enable-libmp3lame \--enable-libopus \--enable-libvorbis \--enable-libvpx \--enable-libx264 \--enable-libx265 \--enable-nonfree
make
make install
hash -r

验证安装

ffmpeg -h

至此,我们就可以使用ffmpeg转码视频了,但是是cpu进行的软编码方式转码,效率低,占用cpu资源高


实现GPU转码(硬编码):

1、安装cuda

首先确保安装了NVIDIA驱动(显卡驱动)

nvidia-smi
watch -n 10 nvidia-smi   #每10s查看一次

若输出如下,则说明已经安装好了显卡驱动

若输出为

则说明驱动有问题,需要接下来在安装cuda的时候将显卡驱动一起安装(安装cuda的时候就会提醒是否安装显卡驱动,若没有显卡驱动则选则y ,毕竟这种方式安装显卡驱动最便捷)



到CUDA官网下载CUDA安装包 https://developer.nvidia.com/cuda-downloads,选择对应的版本

如:

输入安装命令后将会进入该界面(前面的协议,一直按住enter键跳过即可)

下载执行完毕,安装完毕后,可通过命令查看     nvcc -V
输出类似文本

若未显示,通过    /usr/local/cuda-9.2/bin/nvcc -V   尝试一下,若也没有,则cuda未安装成功,若有上图输出,则说明安装成功,只需要配置cuda环境变量就行
配置方法:

1、  sudo vim ~/.bashrc2、  在文件末尾加入下面两行export  PATH=/usr/local/cuda-10.1/bin:$PATHexport  LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64$LD_LIBRARY_PATH3、   保存退出4、    source ~/.bashrc

2、重新编译安装ffmpeg 3.3.8,使其支持GPU转码

PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \--prefix="$HOME/ffmpeg_build" \--pkg-config-flags="--static" \--extra-cflags="-I$HOME/ffmpeg_build/include -I/usr/local/cuda/include" \--extra-ldflags="-L$HOME/ffmpeg_build/lib -L/usr/local/cuda/lib64" \--extra-libs=-lpthread \--extra-libs=-lm \--bindir="$HOME/bin" \--enable-gpl \--enable-libfdk_aac \--enable-libfreetype \--enable-libmp3lame \--enable-libopus \--enable-libvorbis \--enable-libvpx \--enable-libx264 \--enable-libx265 \--enable-nonfree \--enable-cuda \--enable-cuvid \--enable-nvenc \--enable-libnpp
make
make install
hash -r

安装完成后,输入命令     ffmpeg -hwaccels    即可查看支持的硬件加速方式

命令   ffmpeg -codecs | grep cuvid   查看提供的编码器

事例:将h265编码的视频(我这儿是监控流)数据通过GPU方式转码为h264编码

ffmpeg -y -vsync 0 -hwaccel cuvid -c:v hevc_cuvid -i rtsp://admin:mm852456@192.168.0.209:554/h264/ch1/main/av_stream -c:v h264_nvenc -b:v 1024k -f flv -y rtmp://192.168.0.98:11937/live/h265_1

-hwaccl cuvid         指定使用cuvid硬件加速(vdpau、cuvid)
-c:v hevc_cuvid      解码规则
-i rtsp://admin:mm852456@192.168.0.209:554/h264/ch1/main/av_stream      输入文件(流数据)
-c:v h264_nvenc     编码规则
-f flv                        文件输出类型指定
-y rtmp://192.168.0.98:11937/live/h265_1           输出到哪儿指定路径


ffmpeg转码cpu很高,ffmpeg实现GPU(硬编码)加速转码,解决ffmpeg转码速度慢相关推荐

  1. linux mysql cpu 高,Linux系统中关于Mysql数据库导致CPU很高的问题解决

    Linux系统中关于Mysql数据库导致CPU很高的问题解决 发布时间:2007-11-19 00:01:12来源:红联作者:spworks 服务器环境 Liunx AS4 + PHP5 + Mysq ...

  2. memcached 如果进程占用cpu很高

    memcached 如果进程占用cpu很高 一客户占用到了 25% 把mencache内存大小从32m 改成256m 后 memcached 基本占用cpu 是0 可能分配的内存不够用了  大量的新缓 ...

  3. Mac系统 mds、mds_stores、mdworker 占cpu很高,以及这些进程是干啥的

    忽然发现这个mds.mds_stores.mdworker 占cpu很高,然后就搜索了一下,说是可以使用下面的命令给关掉. sudo mdutil -a -i off 但是关掉之后,有没有啥负面影响呢 ...

  4. vs code1.61.1 任务管理器里出现2个rg进程占用cpu很高电脑运行卡

    环景: win10专业版 vs code v.1.61.1 问题描述: 任务管理器里出现2个rg进程占用cpu很高,电脑卡 解决方案: vs code软件里打开文件->首选项->设置搜se ...

  5. ubuntu nautilus 占用CPU很高

    ubuntu nautilus 占用CPU很高 系统是ubuntu 16.04 不知道从什么时候开始,nautilus无缘无故占用CPU内存很高,导致电脑经常卡. 网上说是Templates文件夹里面 ...

  6. redis进程占用CPU很高-达到100

    问题说明: 监控发现,redis进程占用CPU很高-达到100%.并且会有2个redis进程.如下图: 分析了一下,因为redis在持久化保存的时候,会fork出一个进程来.仔细观察进程号PID,会发 ...

  7. Ubuntu16.04.06 LTS -bash 进程占用cpu很高,中了挖矿病毒

    环景: Ubuntu16.04.06 LTS 问题描述: -bash 进程占用cpu很高,别的进程开启运行过后就被它killed,-bash一直占用50%的CPU,服务器被拉的嗷嗷叫 解决方案: 1. ...

  8. java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

  9. wsappx关不掉_win10的appmodle和wsappx两个进程占的CPU很高,能不能关啊

    都是跟应用商店有关的服务,刚开机后可能大量占用cpu和磁盘.但不知为何目前无法关闭,启动类型无法更改,即使在组策略里禁用商店也没用,等微软出补丁吧. 1.appmodel,win10的Store(应用 ...

  10. 【Windows笔记】-----任务管理器发现 NT Kernel System 进程占用CPU很高

    两个月前win10更新之后就发现系统用起来没以前流畅了,后来也没怎么去优化. 电脑也没装游戏之类的软件,但这两天突然发现电脑管家老显示CPU占用95%以上,内存占用86%以上(总内存12G),情况不对 ...

最新文章

  1. 树莓派视觉小车 -- OpenCV巡线(HSL色彩空间、PID)
  2. OS X 10.11 cocoapods
  3. 脚本大全_抖音文案大全2020励志:抖音最火励志搞笑句子,直接套用上热门
  4. 严重: Dispatcher initialization failed java.lang.RuntimeException
  5. Mac 技术篇-pip下载速度慢解决办法,pip秒速下载,阿里云镜像配置
  6. Python:高阶函数
  7. shared_ptr和new结合使用的几个简单例子
  8. Spring Boot 几条最佳实践!
  9. 在Cloudfoundry上部署RESTful服务
  10. POSIX多线程API函数
  11. 如何把springboot项目部署到tomcat上
  12. Linux下好用的日志库,我使用過的Linux命令之tailf - 跟蹤日志文件/更好的tail -f版本...
  13. jquery on方法原理_jQuery 学习小结
  14. BlackBerry 应用程序开发者指南 第一卷:基础--第8章 本地化应用程序
  15. 小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。你能帮帮她吗?
  16. 网络爬虫——原理简介
  17. 腾讯企鹅辅导 H5 性能极致优化总结
  18. html5考试总结300字,中段考试总结作文300精选集锦
  19. vue-cli cdn方式引入Vue模块
  20. 【Slurm】Slurm使用故障workaround记录

热门文章

  1. Python进行相关分析
  2. 查看版本方法 ,通过IE logo查看,只有这样才知道是什么的产物!
  3. freeSHHd+puttygen搭建Sftp
  4. SosoApi使用手册
  5. 公司与公司保密协议范本
  6. asp.net助学贷款管理系统
  7. navicat produsts注册机出现Generate First a serial
  8. 记 第一次游戏测试实习经历
  9. Java中this的用法总结
  10. 能制作引导系统型U盘的几个软件工具