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-gpl --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-gpl
--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 -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
${EDITOR} Dockerfile-env
./update.py # generates the Dockerfile
docker build -t my-build VERSION/path/
# 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 env file THEN all the generated Dockerfile for a merge request. So it's easier to find the template change.