赞
踩
参考文档
这篇文章不是在docker内的
编译过程写的非常详细了,亲测可以使用
注意ffmpeg版本要3.x, 我用4.3 4.2都没有成功
yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel
这里省略掉可
选择合适的版本,我选择的是
nvidia/cuda:10.2-cudnn7-devel-centos7
带devel
字样的 ,里面才有nvcc -V
命令
10.2
是cuda
版本
具体如何下载源码包,可以到最上面的参考文档博客中找
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内
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。