Sign inSign up

jrottenberg/ffmpeg

By jrottenberg

•Updated 30 days ago

FFmpeg 2.8 - 3.x - 4.x Copyright (c) 2000-2017 the FFmpeg developers

Image
476

50M+

jrottenberg/ffmpeg repository overview

⁠FFmpeg Docker image

Docker Stars Docker pulls gitlab pipeline status Azure 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.

⁠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)

Format is ffmpeg:MAJOR.MINOR-VARIANT with MAJOR.MINOR in :

  • 2.8
  • 3.0
  • 3.1
  • 3.2
  • 3.3
  • 3.4
  • 4.0
  • 4.1
  • snapshot

and VARIANT in :

  • alpine
  • centos
  • nvidia
  • scratch
  • ubuntu
  • vaapi

Recent images:

snapshot-vaapi      74mb
snapshot-ubuntu     86mb
snapshot-scratch    20mb
snapshot-nvidia     640mb
snapshot-centos     97mb
snapshot-alpine     35mb
4.1-vaapi           73mb
4.1-ubuntu          85mb
4.1-scratch         20mb
4.1-nvidia          640mb
4.1-centos          97mb
4.1-alpine          34mb
4.0-vaapi           73mb
4.0-ubuntu          83mb
4.0-scratch         20mb
4.0-nvidia          639mb
4.0-centos          97mb
4.0-alpine          34mb
3.4-vaapi           71mb
3.4-ubuntu          83mb
3.4-scratch         18mb
3.4-nvidia          637mb
3.4-centos          97mb
3.4-alpine          32mb
3.4                 83mb
3.3-vaapi           71mb
3.3-ubuntu          83mb
3.3-scratch         18mb
3.3-nvidia          637mb
3.3-centos          96mb
3.3-alpine          31mb
3.3                 82mb
3.2-vaapi           83mb
3.2-ubuntu          83mb
3.2-scratch         18mb
3.2-nvidia          623mb
3.2-centos          96mb
3.2-alpine          32mb
3.1-vaapi           83mb
3.1-ubuntu          82mb
3.1-scratch         17mb
3.1-nvidia          623mb
3.1-centos          96mb
3.1-alpine          32mb
3.1                 81mb
3.0-ubuntu          82mb
3.0-scratch         17mb
3.0-nvidia          623mb
3.0-centos          96mb
3.0-alpine          31mb
2.8-vaapi           82mb
2.8-ubuntu          81mb
2.8-scratch         17mb
2.8-nvidia          622mb
2.8-centos          95mb
2.8-alpine          30mb
⁠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)"

# If you want to compare the one you have locally
$ docker images | grep ffmpeg | sort | awk '{print $1 ":" $2 "\t" $7 $8}'

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-libwebp --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-libwebp
    --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):$(pwd) -w $(pwd) 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 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):$(pwd) -w $(pwd)\
        jrottenberg/ffmpeg:3.2-scratch -stats \
        -i original.gif \
        original-converted.mp4
⁠Use hardware acceleration enabled build

Thanks to qmfrederik⁠ for the vaapi ubuntu based variant⁠

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

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

docker run --device /dev/dri:/dev/dri -v $(pwd):$(pwd) -w $(pwd) 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⁠.
⁠Use nvidia hardware acceleration enabled build

Thanks to ShaulMyplay⁠ for the nvidia based variant⁠

Supports nvenc only on all ffmpeg versions, and hardware decoding and scaling on ffmpeg >= 4.0

Hardware encoding only example: docker run --runtime=nvidia jrottenberg/ffmpeg:2.8-nvidia -i INPUT -c:v nvenc_h264 -preset hq OUTPUT Full hardware acceleration example: docker run --runtime=nvidia jrottenberg/ffmpeg:4.1-nvidia -hwaccel cuvid -c:v h264_cuvid -i INPUT -vf scale_npp=-1:720 -c:v h264_nvenc -preset slow OUTPUT

⁠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 CI
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.

Tag summary

Content type

Image

Digest

sha256:509dbdd62…

Size

636.9 MB

Last updated

30 days ago

docker pull jrottenberg/ffmpeg:8-nvidia