Bootstrap

ubuntu pytorch容器内安装gpu版本的ffmpeg

一、基础镜像和生成容器

     pytorch/pytorch :1.13.1-cuda11.6-cudnn8-devel

生成容器,一定要加NVIDIA_DRIVER_CAPABILITIES=compute,utility,video,graphics,否则侯建无法推流,报错缺少编码之类的。

docker run -it --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video,graphics  --shm-size 8g   -P --name ffmpeg_torch  --env LANG="C.UTF-8"  -v `pwd`:/host pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel

 

二、安装基础的库

     一定要装上,基本都有用,省的后面报各式各样的错

     删除自带的ffmpeg,在conda里

    rm -r  /opt/conda

apt update
apt install libx264-dev libx265-dev  libass-dev  build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev libtool-bin pkg-config libfdk-aac-dev libssl-dev libass-dev libsdl2-dev -y 

三、安装nv-codec-headers

make & make install

 四、安装ffmpeg

./configure  --prefix=/usr/local/ffmpeg --enable-openssl --disable-x86asm --enable-static --enable-shared --enable-ffplay --enable-gpl --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libass --enable-libfreetype --enable-pthreads --enable-cuda --enable-cuda-nvcc --enable-cuvid --enable-nvenc --enable-libnpp --enable-nonfree --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 
  
make & make install

五、修改系统路径文件

vim   .bashrc

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/root/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/root/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/root/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/root/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<


export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig
export PATH=$PATH:/usr/local/ffmpeg/bin/
export LD_LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/ffmpeg/lib

这里面把anconda的路径也加上了

六、还有可能出现的问题

    6.1 镜像提交的时候,没有问题,在镜像保存的时候报错:(可能是之前删除了系统自带的ffmpeg)

        

Error response from daemon: open /var/lib/docker/overlay2merged/opt/conda/bin/ffmpeg: no such file or directory

解决方法:

docker system prune --all
systemctl restart docker

这一步是清除无用的容器和容器,及一部分层,小心,如果镜像没有对应的容器,就会别删掉。

本次就是这样,不小删除所有镜像和容器,然后有重新拉取镜像、安装容器、配置ffmpeg,

docker commit提交容器,docker save保存镜像就没有问题,具体原因未知。

6.2  验证成功

推流测试:

ffmpeg -re -i ${video} -y -an -f  rawvideo -vcodec rawvideo -pix_fmt bgr24  -r 25  -g 25 -b:v  5000k -c:v h264_nvenc  -bufsize  5000k   -pix_fmt yuv420p  -tune ll   -f flv   ${url}

其中video、url是自己的是视频和推流地址。

注意此时:

在容器内容执行 nvidia-smi,并不能显示ffmpeg的进程;但在主机的nvidia-smi命令中可以体现如下:

 

最后一个关于软件的问题,

相关软件放在了自己的百度网盘/software,没有公开 

;