提示:ubuntu16将视频流(监控流)数据转码,使用GPU实现加速转码:
例如:将一个路径中的h265编码视频流数据转换为h264编码视频流数据,并输出到另一个路径中
lspci | grep NVIDIA # 查看NVIDIA显卡
ubuntu-drivers devices
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
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资源高
nvidia-smi
watch -n 10 nvidia-smi #每10s查看一次
若输出如下,则说明已经安装好了显卡驱动
若输出为
则说明驱动有问题,需要接下来在安装cuda的时候将显卡驱动一起安装(安装cuda的时候就会提醒是否安装显卡驱动,若没有显卡驱动则选则y ,毕竟这种方式安装显卡驱动最便捷)
如:
输入安装命令后将会进入该界面(前面的协议,一直按住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
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:[email protected]:554/h264/ch1/main/av_stream 输入文件(流数据)
-c:v h264_nvenc 编码规则
-f flv 文件输出类型指定
-y rtmp://192.168.0.98:11937/live/h265_1 输出到哪儿指定路径