Skip to content

LauanGuermandi/ffmpeg

 
 

Repository files navigation

FFmpeg Docker image

Docker Stars Docker pulls Travis Build Status Docker Automated build

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.

Ubuntu builds

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)

Recent images:

vaapi 86mb 2018-08-16 snapshot-centos 95mb 2018-08-16 snapshot-alpine 27mb 2018-08-16 4.0-vaapi 86mb 2018-08-15 4.0-ubuntu 94mb 2018-08-16 4.0-scratch 20mb 2018-08-16 4.0-centos 95mb 2018-08-16 3.4-vaapi 84mb 2018-08-15 3.4-scratch 18mb 2018-08-16 3.4-alpine 24mb 2018-08-16 3.4 92mb 2018-08-16 3.3-scratch 17mb 2018-08-04 3.2-scratch 17mb 2018-08-16 3.2-alpine 24mb 2018-08-16 3.0-scratch 17mb 2018-08-16 3.0-centos 94mb 2018-08-16 2.8-scratch 16mb 2018-08-16 2.8 90mb 2018-08-16 
(How the 'recent images' was generated) ``` $ curl --silent https://hub.docker.com/v2/repositories/jrottenberg/ffmpeg/tags/?page_size=500 | jq -cr ".results|sort_by(.name)|reverse[]|.sz=(.full_size/1048576|floor|tostring+\"mb\")|[.name,( (20-(.name|length))*\" \" ),.sz,( (8-(.sz|length))*\" \"),.last_updated[:10]]|@text|gsub(\"[,\\\"\\\]\\\[]\";null)" | grep 2018-08 ```

Please use Github issues to report any bug or missing feature.

Test

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 

Examples

Extract 5s @00:49:42 into a GIF

 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 

Convert 10bits MKV into a 10Bits MP4

 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.

Convert a local GIF into a mp4

Let's assume original.gif is located in the current directory :

 docker run -v $PWD:/temp/ \ jrottenberg/ffmpeg:3.2-scratch -stats \ -i /temp/original.gif \ /temp/original-converted.mp4 

Use hardware acceleration enabled build

Thanks to qmfrederik for the vaapi ubuntu based variant

jrottenberg/ffmpeg:vaapi or jrottenberg/ffmpeg:vaapi-${VERSION}

  • Run the container with the device attached /dev/dri from your host into the container :

docker run --device /dev/dri:/dev/dri -v $(pwd):/mnt jrottenberg/ffmpeg:vaapi [...]

  • Have the Intel drivers up and running on your host. You can run vainfo (part of vainfo package on Ubuntu) to determine whether your graphics card has been recognized correctly.
  • Run ffmpeg with the correct parameters, this is the same as when running ffmpeg natively.

See what's inside the beast

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 

Keep up to date

See Dockerfile-env to update a version

Contribute

# 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.

About

Docker build for FFmpeg on Ubuntu / Alpine / Centos 7 / Scratch

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Dockerfile 99.2%
  • Other 0.8%