Inspired by https://github.com/dl-container-registry/ffmpeg
NVENCODE (nvenc) and NVDECODE (formerly CUVID) are packaged in the NVIDIA Video Codec SDK.
List options of an encoder using ffmpeg -h encoder=XXXX
h264_nvenc
,nvenc
,nvenc_h264
nvenc_hevc
,hevc_nvenc
List options of a decoder using ffmpeg -h decoder=XXXX
h264_cuvid
hevc_cuvid
mjpeg_cuvid
mpeg1_cuvid
mpeg2_cuvid
mpeg4_cuvid
vc1_cuvid
vp8_cuvid
vp9_cuvid
List options of a filter using ffmpeg -h filter=XXXX
hwupload_cuda
scale_cuda
scale_npp
thumnail_cuda
docker build -t ffmpeg .
Run the container mounting the current directory to /workspace
processing
input.mp4
to output.mp4
without any hardware acceleration
docker run --rm -it \
--volume $PWD:/workspace \
ffmpeg -i input.mp4 output.avi
docker run --rm -it --gpus all \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video \
--volume $PWD:/workspace \
ffmpeg \
-hwaccel_device 0 \
-hwaccel cuvid \
-c:v h264_cuvid \
-i input.mp4 \
-c:v hevc_nvenc
out.mkv
Get a shell prompt inside the container, useful for debugging:
docker run --rm -it --gpus all \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video \
--volume $PWD:/workspace \
--entrypoint bash
ffmpeg