环境搭建 Docker内FFmpeg GPU加速

参考文档
这篇文章不是在docker内的
编译过程写的非常详细了,亲测可以使用
注意ffmpeg版本要3.x, 我用4.3 4.2都没有成功

0.安装依赖
yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel

1. 首先宿主机要有显卡驱动

这里省略掉可

2. 再 安装nvidia-docker

3. 再下载 nvidia的基础镜像

选择合适的版本,我选择的是
nvidia/cuda:10.2-cudnn7-devel-centos7
devel字样的 ,里面才有nvcc -V命令
10.2cuda版本

4. 编写Dockerfile

具体如何下载源码包,可以到最上面的参考文档博客中找
https://www.jianshu.com/p/59da3d350488

或者我的分享连接
链接: https://pan.baidu.com/s/1bDxEWuJvD9Mlj79zHHbWFA 密码: f4an

FROM nvidia/cuda:10.2-cudnn7-devel-centos7

MAINTAINER tenten  "vtenten@163.com"

WORKDIR /work

RUN mkdir ffmpeg_source

# 更换yum源
COPY ./docker_env/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
RUN yum makecache && yum install -y  autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel zip unzip

# 编译 nasm-2.13.02
ADD ./ffmpeg_souRUN cd ffmpeg_source/nasm-2.13.02 && ./autogen.sh && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" && make && make install

# 设置bin目录 lib
ENV PATH="/root/bin:${PATH}"
ENV LD_LIBRARY_PATH="/root/ffmpeg_build/lib"
ENV PKG_CONFIG_PATH="/root/ffmpeg_build/lib/pkgconfig"

# 编译 yasm-1.3.0
ADD ./ffmpeg_source/yasm-1.3.0.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/yasm-1.3.0 && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" && make && make install

# 编译 x264
ADD ./ffmpeg_source/x264.tar.gz  ./ffmpeg_source/rce/nasm-2.13.02.tar.bz2 ./ffmpeg_source/
RUN cd ffmpeg_source/x264  && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" --enable-static && make && make install

# 编译 libfdk_acc
ADD ./ffmpeg_source/fdk-aac.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/fdk-aac && autoreconf -fiv && ./configure --prefix="/root/ffmpeg_build" --disable-sharedi && make && make install

# 编译 libmp3lame
ADD ./ffmpeg_source/lame-3.100.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/lame-3.100 && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" --disable-shared --enable-nasm && make && make install

# 编译 nv-codec-headers
ADD ./ffmpeg_source/nv-codec-headers.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/nv-codec-headers && make PREFIX="/root/ffmpeg_build" BINDDIR="/root/bin" && make install PREFIX="/root/ffmpeg_build" BINDDIR="/root/bin"

# 编译 ffmpeg
ADD ./ffmpeg_source/ffmpeg-3.3.8.tar.bz2  ./ffmpeg_source/
RUN cd ffmpeg_source/ffmpeg-3.3.8 && ./configure --prefix="/root/ffmpeg_build" --pkg-config-flags="--static"  \
    --extra-cflags="-I/root/ffmpeg_build/include -I/usr/local/cuda/include" \
    --extra-ldflags="-L/root/ffmpeg_build/lib -L/usr/local/cuda/lib64"  \
    --extra-libs=-lpthread  --extra-libs=-lm  --bindir="/root/bin" \
    --enable-gpl  --enable-libfdk_aac  --enable-libmp3lame  --enable-libx264  --enable-nonfree \
    --enable-cuda \
    --enable-cuvid \
    --enable-nvenc \
    --enable-libnpp \
    && make && make install && hash -r

测试

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i 1.mp4 -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y out.mp4

错误信息

使用测试命令,可能会报如下错误
Cannot load libnvcuvid.so.1
Cannot load libnvidia-encode.so.1
因为docker容器内没有这两个文件,经过我查找发现,在宿主机中有,我们需要拷贝今容器内,然后再作一个软连接。

ubuntu 系统

# 在这些目录下查找上述文件
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

centos系统

# 在下面这个目录里
/lib64/nvidia

找到这两个文件,我们发现,他们其实是软连接
我们ll命令文件,找到原始文件,
libnvcuvid.so.440.100
libnvidia-encode.so.440.100
后面的尾号可能不一样,它是显卡驱动版本号,
我们把这个拷贝到docker中,然后软连接

# 宿主机
/usr/lib/x86_64-linux-gnu/libnvcuvid.so.440.100
/usr/lib/x86_64-linux-gnu/libnvidia-encode.so.440.100

# 拷贝到docker这里
/lib64/libnvcuvid.so.440.100
/lib64/libnvidia-encode.so.440.100


# docker内软连接
ln -s /lib64/libnvcuvid.so.440.100 /lib64/libnvcuvid.so.1
ln -s /lib64/libnvidia-encode.so.440.100 /lib64/libnvidia-encode.so.1

# 然后上面的操作,也最好写在dockerfile内
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值