컴파일해서 실행하기

도커에서 GPU를 이용하여 동영상 변환을 하려고 할 경우이다.

내 환경에 맞게 도커 컨테이너를 만든다.

sudo docker run -it --name encoder --restart always --gpus all --add-host rcc.work:192.168.126.37 debian

기본 설치를 한다.

echo 'Acquire::http::Proxy "http://rcc.work:3142";' > /etc/apt/apt.conf
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 
apt-get -y update && apt-get -y upgrade
apt-get -y install dialog git build-essential

컴파일 하기 전 필요한 다른 패키지를 설치한다. 더 줄일려고 했는데 일단 여기에서 멈추었다.

apt-get -y install yasm pkg-config nasm libx264-dev libx265-dev libnuma-dev  libpostproc-dev libass-dev fontconfig libavcodec-dev libavformat-dev software-properties-common

git에서 필요한 것들을 다운 받는다.

#https://docs.nvidia.com/video-technologies/video-codec-sdk/12.0/ffmpeg-with-nvidia-gpu/index.html
cd ~
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers && make install && cd ~
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
cd ffmpeg

GPU를 이용하는 과정에서 파일이 없다는 오류가 생긴다. 필요한 파일이 포함된 폴더를 전체를 복사해 준다. 이렇게 해도 큰 문제는 없는 것 같다.

sudo docker cp /usr/local/cuda/. encoder:/usr/local/cuda
sudo docker cp /usr/lib/x86_64-linux-gnu/. encoder:/usr/lib/x86_64-linux-gnu
sudo docker cp /etc/alternatives/. encoder:/etc/alternatives

필요한 설치 환경에 다음을 추가하여 준다.

echo 'CUDA_HOME=/usr/local/cuda' >> ~/.bashrc
echo 'PATH=${CUDA_HOME}/bin:${PATH}' >> ~/.bashrc

CUDA_HOME=/usr/local/cuda
export PATH=${CUDA_HOME}/bin:${PATH}

echo '/usr/local/lib' >> /etc/ld.so.conf
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64' >> ~/.bashrc

컴파일 하고 설치한다.

./configure --enable-nonfree --enable-cuda --enable-cuvid --enable-nvenc --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared --enable-gpl --enable-libx264 --enable-libx265 --enable-libass --enable-fontconfig

make -j 6

make install