ffmpeg转码cpu很高,ffmpeg实现GPU(硬编码)加速转码,解决ffmpeg转码速度慢
ffmpeg实现GPU(硬编码)加速转码
# 项目场景:
提示:ubuntu16将视频流(监控流)数据转码,使用GPU实现加速转码:
例如:将一个路径中的h265编码视频流数据转换为h264编码视频流数据,并输出到另一个路径中
准备工作
确定服务器有GPU
lspci | grep NVIDIA # 查看NVIDIA显卡
ubuntu-drivers devices
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转码速度慢相关推荐
- linux mysql cpu 高,Linux系统中关于Mysql数据库导致CPU很高的问题解决
Linux系统中关于Mysql数据库导致CPU很高的问题解决 发布时间:2007-11-19 00:01:12来源:红联作者:spworks 服务器环境 Liunx AS4 + PHP5 + Mysq ...
- memcached 如果进程占用cpu很高
memcached 如果进程占用cpu很高 一客户占用到了 25% 把mencache内存大小从32m 改成256m 后 memcached 基本占用cpu 是0 可能分配的内存不够用了 大量的新缓 ...
- Mac系统 mds、mds_stores、mdworker 占cpu很高,以及这些进程是干啥的
忽然发现这个mds.mds_stores.mdworker 占cpu很高,然后就搜索了一下,说是可以使用下面的命令给关掉. sudo mdutil -a -i off 但是关掉之后,有没有啥负面影响呢 ...
- vs code1.61.1 任务管理器里出现2个rg进程占用cpu很高电脑运行卡
环景: win10专业版 vs code v.1.61.1 问题描述: 任务管理器里出现2个rg进程占用cpu很高,电脑卡 解决方案: vs code软件里打开文件->首选项->设置搜se ...
- ubuntu nautilus 占用CPU很高
ubuntu nautilus 占用CPU很高 系统是ubuntu 16.04 不知道从什么时候开始,nautilus无缘无故占用CPU内存很高,导致电脑经常卡. 网上说是Templates文件夹里面 ...
- redis进程占用CPU很高-达到100
问题说明: 监控发现,redis进程占用CPU很高-达到100%.并且会有2个redis进程.如下图: 分析了一下,因为redis在持久化保存的时候,会fork出一个进程来.仔细观察进程号PID,会发 ...
- Ubuntu16.04.06 LTS -bash 进程占用cpu很高,中了挖矿病毒
环景: Ubuntu16.04.06 LTS 问题描述: -bash 进程占用cpu很高,别的进程开启运行过后就被它killed,-bash一直占用50%的CPU,服务器被拉的嗷嗷叫 解决方案: 1. ...
- java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决
我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...
- wsappx关不掉_win10的appmodle和wsappx两个进程占的CPU很高,能不能关啊
都是跟应用商店有关的服务,刚开机后可能大量占用cpu和磁盘.但不知为何目前无法关闭,启动类型无法更改,即使在组策略里禁用商店也没用,等微软出补丁吧. 1.appmodel,win10的Store(应用 ...
- 【Windows笔记】-----任务管理器发现 NT Kernel System 进程占用CPU很高
两个月前win10更新之后就发现系统用起来没以前流畅了,后来也没怎么去优化. 电脑也没装游戏之类的软件,但这两天突然发现电脑管家老显示CPU占用95%以上,内存占用86%以上(总内存12G),情况不对 ...
最新文章
- 树莓派视觉小车 -- OpenCV巡线(HSL色彩空间、PID)
- OS X 10.11 cocoapods
- 脚本大全_抖音文案大全2020励志:抖音最火励志搞笑句子,直接套用上热门
- 严重: Dispatcher initialization failed java.lang.RuntimeException
- Mac 技术篇-pip下载速度慢解决办法,pip秒速下载,阿里云镜像配置
- Python:高阶函数
- shared_ptr和new结合使用的几个简单例子
- Spring Boot 几条最佳实践!
- 在Cloudfoundry上部署RESTful服务
- POSIX多线程API函数
- 如何把springboot项目部署到tomcat上
- Linux下好用的日志库,我使用過的Linux命令之tailf - 跟蹤日志文件/更好的tail -f版本...
- jquery on方法原理_jQuery 学习小结
- BlackBerry 应用程序开发者指南 第一卷:基础--第8章 本地化应用程序
- 小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。你能帮帮她吗?
- 网络爬虫——原理简介
- 腾讯企鹅辅导 H5 性能极致优化总结
- html5考试总结300字,中段考试总结作文300精选集锦
- vue-cli cdn方式引入Vue模块
- 【Slurm】Slurm使用故障workaround记录