环境搭建 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内
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要在Linux环境下搭建Docker,可以按照以下步骤进行操作: 1. 安装依赖包,使用以下命令安装所需的依赖包: ``` sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ``` 2. 设置阿里云镜像源,使用以下命令添加阿里云的镜像源: ``` sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` 3. 安装Docker-CE,执行以下命令重建yum缓存,并安装docker-ce: ``` sudo yum install docker-ce ``` 4. 启动Docker-CE,使用以下命令启动Docker服务并设置开机自启动: ``` sudo systemctl enable docker sudo systemctl start docker ``` 5. [可选]为Docker建立用户组,可执行以下步骤: 5.1 建立Docker用户组 5.2 添加当前用户到Docker组 6. 配置镜像加速器,可按照自己的需要配置加速器: ``` sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://your-mirror.example.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker ``` 7. 安装本地仓库,可以按照以下步骤进行操作: 7.1 下载docker registry私有镜像 ``` docker pull docker.io/registry ``` 7.2 修改配置文件 ``` vim /etc/sysconfig/docker ``` 8. 启动本地仓库,执行以下命令启动本地仓库容器: ``` docker run -d -p 5000:5000 --restart=always --name registry registry:2 ``` 9. 修改配置文件,将以下内容添加到docker配置文件中: ``` vim /etc/sysconfig/docker OPTIONS='--insecure-registry your-registry.example.com:5000' ``` 10. 修改防火墙规则,确保外部可以访问Docker的端口: ``` firewall-cmd --zone=public --add-port=5000/tcp --permanent firewall-cmd --reload ``` 以上是在Linux环境下搭建Docker的步骤,你可以根据需要选择执行其中的步骤来完成Docker的安装和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux docker 环境搭建](https://blog.csdn.net/qq_38951990/article/details/120831117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值