概述
ffmpeg实现GPU(硬编码)加速转码
# 项目场景:
提示:ubuntu16将视频流(监控流)数据转码,使用GPU实现加速转码:
例如:将一个路径中的h265编码视频流数据转换为h264编码视频流数据,并输出到另一个路径中
准备工作
确定服务器有GPUlspci | 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 ~/.bashrc
2、 在文件末尾加入下面两行
export PATH=/usr/local/cuda-10.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64$LD_LIBRARY_PATH
3、 保存退出
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转码速度慢ffmpeg实现GPU(硬编码)加速转码实现GPU转码(硬编码):的全部内容,希望文章能够帮你解决ffmpeg转码cpu很高,ffmpeg实现GPU(硬编码)加速转码,解决ffmpeg转码速度慢ffmpeg实现GPU(硬编码)加速转码实现GPU转码(硬编码):所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复