This project prepares a minimalist Docker image with FFmpeg. It compiles FFmpeg from sources following instructions from the Compilation Guide.
You can install the latest build of this image by running docker pull jrottenberg/ffmpeg
.
This image can be used as a base for an encoding farm.
You can use jrottenberg/ffmpeg or jrottenberg/ffmpeg:3.3 to get the latest build based on ubuntu.
Note : I've made ubuntu the default after 3.1
You'll find centos based image using ffmpeg:X.Y-centos
or ffmpeg:centos
to get the latest.
alpine images ffmpeg:X.Y-alpine
to get the latest.
scratch images ffmpeg:X.Y-scratch
to get the latest. (Scratch is an experimental image containing only FFmpeg and libraries)
For information :
centos-3.3 centos 28221bb909aa About an hour ago 264MB
ubuntu-3.3 ubuntu d6b632a4fe7f 3 seconds ago 221MB
alpine-3.3 alpine 725234fc4162 40 minutes ago 65.6MB
scratch-3.3 scratch 34724534bb88 15 minutes ago 48.6MB
Please use Github issues to report any bug or missing feature.
ffmpeg version 3.3.4 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib --extra-libs=-ldl --prefix=/opt/ffmpeg
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
configuration:
--disable-debug
--disable-doc
--disable-ffplay
--enable-shared
--enable-avresample
--enable-libopencore-amrnb
--enable-libopencore-amrwb
--enable-gpl
--enable-libass
--enable-libfreetype
--enable-libvidstab
--enable-libmp3lame
--enable-libopenjpeg
--enable-libopus
--enable-libtheora
--enable-libvorbis
--enable-libvpx
--enable-libx265
--enable-libxvid
--enable-libx264
--enable-nonfree
--enable-openssl
--enable-libfdk_aac
--enable-postproc
--enable-small
--enable-version3
--extra-cflags=-I/opt/ffmpeg/include
--extra-ldflags=-L/opt/ffmpeg/lib
--extra-libs=-ldl
--prefix=/opt/ffmpeg
Capture output from the container to the host running the command
docker run jrottenberg/ffmpeg \
-i http://url/to/media.mp4 \
-stats \
$ffmpeg_options - > out.mp4
docker run jrottenberg/ffmpeg -stats \
-i http://archive.org/download/thethreeagesbusterkeaton/Buster.Keaton.The.Three.Ages.ogv \
-loop 0 \
-final_delay 500 -c:v gif -f gif -ss 00:49:42 -t 5 - > trow_ball.gif
docker run -v $PWD:/tmp jrottenberg/ffmpeg:3.4-scratch \
-stats \
-i http://www.jell.yfish.us/media/jellyfish-20-mbps-hd-hevc-10bit.mkv \
-c:v libx265 -pix_fmt yuv420p10 \
-t 5 -f mp4 /tmp/test.mp4
The image has been compiled with X265 Multilib. Use the pixel format switch to change the number of bits per pixel by suffixing it with 10 for 10bits or 12 for 12bits.
docker run -it --entrypoint='bash' jrottenberg/ffmpeg
for i in ogg amr vorbis theora mp3lame opus vpx xvid fdk x264 x265;do echo $i; find /usr/local/ -name *$i*;done
See Dockerfile-env to update a version
- FFMPEG_VERSION: GNU Lesser General Public License (LGPL) version 2.1
- OGG_VERSION: BSD-style license
- OPENCOREAMR_VERSION: Apache License
- VORBIS_VERSION: BSD-style license
- THEORA_VERSION: BSD-style license
- LAME_VERSION: GNU Lesser General Public License (LGPL) version 2.1
- OPUS_VERSION: BSD-style license
- VPX_VERSION: BSD-style license
- XVID_VERSION: GNU General Public Licence (GPL) version 2
- FDKAAC_VERSION: Liberal but not a license of patented technologies
- FREETYPE_VERSION: GNU General Public License (GPL) version 2
- LIBVIDSTAB_VERSION: GNU General Public License (GPL) version 2
- LIBFRIDIBI_VERSION: GNU General Public License (GPL) version 2
- X264_VERSION: GNU General Public License (GPL) version 2
- X265_VERSION:GNU General Public License (GPL) version 2
# Add / fix stuff
${EDITOR} templates/
# Generates the Dockerfile for all variants
./update.py
# Test a specific variant
docker build -t my-build docker-images/VERSION/
# Make sure all variants pass before Travis does
find ffmpeg/ -name Dockerfile | xargs dirname | parallel --no-notice -j 4 --results logs docker build -t {} {}
Commit the templates files THEN all the generated Dockerfile for a merge request. So it's easier to review the template change.