FFmpeg with NVIDIA/CUDA GPU-enabled inside an Anaconda 3 environment with optional Jupyter Notebooks
10K+
Provides an NVIDIA GPU-enabled container with FFmpeg pre-installed on an Anaconda container xychelsea/ffmpeg-nvidia:latest, and optional Jupyter Notebooks container xychelsea/ffmpeg:latest-jupyter.
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure FATE across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.
Anaconda is an open data science platform based on Python 3. This container allows you to create custom Anaconda environments through the conda command with a lightweight version of Anaconda (Miniconda) and the conda-forge repository in the /usr/local/anaconda directory. The default user, anaconda runs a Tini shell /usr/bin/tini, and comes preloaded with the conda command in the environment $PATH. An additional flavor of this container provides Jupyter Notebooks tags.
Two flavors provide an NVIDIA GPU-enabled container with TensorFlow pre-installed through Anaconda.
The base container, based on the xychelsea/anaconda3:latest-gpu from the Anaconda 3 container stack (xychelsea/anaconda3:latest) running Tini shell. For the container with a /usr/bin/tini entry point, use:
docker pull xychelsea/ffmpeg-nvidia:latest
With Jupyter Notebooks server pre-installed, pull with:
docker pull xychelsea/ffmpeg-nvidia:latest-jupyter
To run the containers with the generic Docker application or NVIDIA enabled Docker, use the docker run command with a bound volume directory workspace attached at mount point /home/anaconda/workspace.
docker run --gpus all --rm -it
-v workspace:/home/anaconda/workspace \
xychelsea/ffmpeg-nvidia:latest /bin/bash
With Jupyter Notebooks server pre-installed, run with:
docker run --gpus all --rm -it -d
-v workspace:/home/anaconda/workspace \
-p 8888:8888 \
xychelsea/deepfacelab:latest-jupyter
Once inside the container, as the default user anaconda, you can use the compiler to transcode using hardware acceleration.
First, however, enter nvidia-smi to see whether the container can see your NVIDIA devices. Second, check to ensure that directory of ffmpeg is /usr/local/ffmpeg-nvidia by entering which ffmpeg into a shell. Lastly, ensure that the compiled version of ffmpeg has access to both the hardware encoder and decoder using ffmpeg -codecs | grep -e cuvid and ffmpeg -codecs | grep -e nvenc respectively.
In this example, we transcode an H.264/MPEG-4 AVC video file input.mp4 into an H.265/MPEG-4 HEVC video file output.mp4 using the cuvid decoder and nvenc encoder (see the NVIDIA Transcoding Guide for more details on hardware decoding and encoding)
ffmpeg \
-vsync 0 \
-hwaccel cuvid \
-c:v h264_cuvid \
-i input.mp4 \
-c:v hevc_nvenc \
-cq:v 4 \
output.mp4
To build either the GPU-enabled container, use the ffmpeg-docker GitHub repository.
git clone git://github.com/xychelsea/ffmpeg-docker.git
docker build -t ffmpeg-nvidia:latest -f Dockerfile .
With Jupyter Notebooks server pre-installed, build with:
docker build -t ffmpeg-nvidia:latest-jupyter -f Dockerfile.jupyter .
The default compiler configuration file uses the following flags:
./configure
--prefix=/usr/local/ffmpeg-nvidia \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64 \
--toolchain=hardened \
--enable-gpl \
--disable-stripping \
--enable-avresample --disable-filter=resample \
--enable-cuvid \
--enable-gnutls \
--enable-ladspa \
--enable-libaom \
--enable-libass \
--enable-libbluray \
--enable-libbs2b \
--enable-libcaca \
--enable-libcdio \
--enable-libcodec2 \
--enable-libfdk-aac \
--enable-libflite \
--enable-libfontconfig \
--enable-libfreetype \
--enable-libfribidi \
--enable-libgme \
--enable-libgsm \
--enable-libjack \
--enable-libmp3lame \
--enable-libmysofa \
--enable-libnpp \
--enable-libopenjpeg \
--enable-libopenmpt \
--enable-libopus \
--enable-libpulse \
--enable-librsvg \
--enable-librubberband \
--enable-libshine \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libssh \
--enable-libtheora \
--enable-libtwolame \
--enable-libvorbis \
--enable-libvidstab \
--enable-libvpx \
--enable-libwebp \
--enable-libx265 \
--enable-libxml2 \
--enable-libxvid \
--enable-libzmq \
--enable-libzvbi \
--enable-lv2 \
--enable-nvenc \
--enable-nonfree \
--enable-omx \
--enable-openal \
--enable-opencl \
--enable-opengl \
--enable-sdl2
Content type
Image
Digest
Size
5.8 GB
Last updated
about 5 years ago
docker pull xychelsea/ffmpeg-nvidia