Docker에서 FFmpeg로 인코딩하기

4k 동영상은 집에서 영상을 볼 때 사용하는 pc로는 재생이 불가능하다. 그래서 FHD 로 해상도를 낮추어야 한다. 샤나인코더를 보통 사용했는데 인코딩하는 시간이 재생 시간보다 더 걸리는 문제가 있다. 그냥 밤새 실행해도 되지만, 직접 인코딩을 해서 이 문제를 해결해 보고자 하였다.

여기서 안내하고 있는 Docker 컨테이너를 받았다.

정말 몇 시간 동안 오류 메세지를 해결하기 위하여 노력했다. 정말 우연하게 해결한 방법은 H.264가 아닌 H.265를 이용하는 것이었다. 사실 GPU를 이용하지 않으면 좀 더 변환이 빠르다. 그럼에도 불구하고 GPU를 이용하면 좋은 점은 1개의 쓰레드만 사용하므로 CPU가 여유로워 진다. cuda 보다는 cuvid를 이용하면 조금 더 빠른 결과를 보여주는 것 같다. 다음과 같이 하면 4K 영상을 FHD로 변환할 수 있다. 파일이 여러 개를 변환 시킬 것이므로 쉘 스크립트를 이용해서 작업을 처리했다.

FILES=`ls *.mkv`
for FILE in ${FILES}
do
	OUTPUT=`echo ${FILE} | sed 's/mkv/mod.mkv/g'`
	sudo docker run --rm -v $(pwd):$(pwd) -w $(pwd) --runtime=nvidia jrottenberg/ffmpeg:4.1-nvidia -hwaccel cuvid -i ${FILE} -c:v hevc_nvenc -vf scale=1920:1080 -ac 2 -y ${OUTPUT}
done