tar -cf cuda1.tar /usr/local/cuda
sudo docker rm -f encoder
sudo docker run -itd --name encoder --restart always --gpus all --add-host rcc.work:192.168.126.37 ubuntu
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 '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 apt-utils
apt-get -y install dialog
git build-essential
#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
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 libfaac-dev
echo '/usr/local/lib' >> /etc/ld.so.conf
echo 'cd /root/' >> ~/.bashrc
echo 'CUDA_HOME=/usr/local/cuda' >> ~/.bashrc
echo 'PATH=${CUDA_HOME}/bin:${PATH}' >> ~/.bashrc
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 --enable-libfribidi --enable-libfontconfig --enable-libfdk-aac
make -j 6 && make install
mkdir /usr/local/cuda
mkdir
#!/bin/bash
INPUT_MOV='gun.mp4'
INPUT_SUB='English.srt'
INPUT_SUB='gun.srt'
OUTPUT_MOV='gun2.mkv'
CPU='libx264'
GPU='hevc_nvenc'
ffmpeg \
-hwaccel_output_format cuda \
-i ${INPUT_MOV} -c:v ${GPU} \
-vf "subtitles=${INPUT_SUB}:force_style='FontName=Malgun Gothic,FontSize=24',scale=hd720" \
-c:a aac -b:a 192k -ac 2 -y -f matroska \
${OUTPUT_MOV}
sshpass -p 1 sftp -P 20536 byun1114@office.work << EOF
cd TMP
put ${OUTPUT_MOV}
EOF
Category: FFmpeg
-
FFMpeg in Docker
-
영화 감상용으로 변환하기
내가 영화를 주로 보는 환경은 출퇴근 시간이다. 집중력이 높을 때가 아니다. 그렇게 집중해서 볼 수 있는 영화도 아니다. 그래서 20분 간격으로 끊어서 보기로 했다. 자막도 hard 하게 직접 영상에 입혀서 보기로 했다.
자막은 SRT 포맷으로 변환해 준다. H.265를 굳이 사용해야 할 이유가 없어 H.264를 선택했다.
#!/bin/bash cd INPUT INPUT_MOV=`ls *.m*` INPUT_SUB=`ls *.srt` CPU='libx264' #GPU='hevc_nvenc' GPU='h264_nvenc' echo MOVIE: ${INPUT_MOV} echo SUBTITLE: ${INPUT_SUB} echo "" OUTPUT_MOV=${INPUT_MOV/.mp4/} echo OUTPUT: ${OUTPUT_MOV} cd /root ffmpeg \ -hwaccel_output_format cuda \ -i INPUT/${INPUT_MOV} -c:v ${GPU} \ -vf "subtitles=INPUT/${INPUT_SUB}:charenc=UTF-8:force_style='FontName=Roboto,FontSize=20',scale=-1:720" \ -c:a aac -b:a 128k -ac 2 -y -f matroska \ -f segment \ -reset_timestamps 1 \ -segment_time 1200 \ OUTPUT/${OUTPUT_MOV}_%1d.mp4
-
컴파일해서 실행하기
도커에서 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
-
동영상 가로, 세로 크기
다른 방법이 있을지도 모르지만, 일단 당장 써먹을 수 있는 방법.
ffprobe The_Grapes_Of_Wrath_1940.mp4 -show_entries stream=width,height -v error -select_streams v:0 -of default=nw=1 | grep width | sed 's/width=//g'