ffmpeg-cuda-docker
ffmpeg-cuda-docker copied to clipboard
use nvenc/nvdec with docker 19.x
NVIDIA accelerated ffmpeg with docker 19.x
Inspired by https://github.com/dl-container-registry/ffmpeg
Features
NVENCODE (nvenc) and NVDECODE (formerly CUVID) are packaged in the NVIDIA Video Codec SDK.
Hardware Accelerated Encoders:
List options of an encoder using ffmpeg -h encoder=XXXX
-
h264_nvenc
,nvenc
,nvenc_h264
-
nvenc_hevc
,hevc_nvenc
Hardware Accelerated Decoders:
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
Hardware Accelerated Filters:
List options of a filter using ffmpeg -h filter=XXXX
-
hwupload_cuda
-
scale_cuda
-
scale_npp
-
thumnail_cuda
Build
docker build -t ffmpeg .
Usage
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
Resources
- FFmpeg hardware acceleration guide with examples
- Static FFmpeg build on Ubuntu 16.04 guide
- Using FFmpeg with GNU parallel
- Listing NVENC and NPP capabilities of FFmpeg
- Encoding HEVC using FFmpeg with NVENC
- FFmpeg cheatsheet
- [FFmpeg-static build scripts](https://github.com/zimbatm/ffmpeg-static