All Projects → jrottenberg → Ffmpeg

jrottenberg / Ffmpeg

Licence: apache-2.0
Docker build for FFmpeg on Ubuntu / Alpine / Centos 7 / Scratch

Projects that are alternatives of or similar to Ffmpeg

Dockerfiles
Phalcon Dockerfiles used for internal purposes.
Stars: ✭ 145 (-82.49%)
Mutual labels:  ubuntu, centos, alpine
Robox
The tools needed to robotically create/configure/provision a large number of operating systems, for a variety of hypervisors, using packer.
Stars: ✭ 303 (-63.41%)
Mutual labels:  ubuntu, centos, alpine
Atilo
Linux installer for termux
Stars: ✭ 629 (-24.03%)
Mutual labels:  ubuntu, centos, alpine
Vagrant Box Templates
Stars: ✭ 100 (-87.92%)
Mutual labels:  ubuntu, centos, alpine
docker-base
Just enough to get process supervision and startup mechanisms
Stars: ✭ 25 (-96.98%)
Mutual labels:  ubuntu, alpine, centos
Wordpress Nginx
WordPress specific Nginx configuration templates and best practices!
Stars: ✭ 332 (-59.9%)
Mutual labels:  ubuntu, centos
Ansible Role Apache
Ansible Role - Apache 2.x.
Stars: ✭ 341 (-58.82%)
Mutual labels:  ubuntu, centos
Vidcutter
Been busy guys, will be reviewing and integrating pull requests shortly. Thanks to all contributors! LATEST RELEASE: 6.0.0 - flatpak @ https://flathub.org/apps/details/com.ozmartians.VidCutter - snap @ https://snapcraft.io/vidcutter - see https://github.com/ozmartian/vidcutter/releases for more details...
Stars: ✭ 775 (-6.4%)
Mutual labels:  ffmpeg, ubuntu
Openvpn Install
Set up your own OpenVPN server on Debian, Ubuntu, Fedora, CentOS or Arch Linux.
Stars: ✭ 7,142 (+762.56%)
Mutual labels:  ubuntu, centos
darknet.py
darknet.py is a network application with no dependencies other than Python and Tor, useful to anonymize the traffic of linux servers and workstations.
Stars: ✭ 71 (-91.43%)
Mutual labels:  ubuntu, centos
Iredmail
Full-featured, open source mail server solution for mainstream Linux/BSD distributions.
Stars: ✭ 343 (-58.57%)
Mutual labels:  ubuntu, centos
Ansible Role Security
Ansible Role - Security
Stars: ✭ 398 (-51.93%)
Mutual labels:  ubuntu, centos
Endoflife.date
Informative site with EoL dates of everything
Stars: ✭ 296 (-64.25%)
Mutual labels:  ubuntu, alpine
Ansible Role Firewall
Ansible Role - iptables Firewall configuration.
Stars: ✭ 343 (-58.57%)
Mutual labels:  ubuntu, centos
docker python-opencv-ffmpeg
Dockerfile containing FFmpeg, OpenCV4 and Python2/3, based on Ubuntu LTS
Stars: ✭ 38 (-95.41%)
Mutual labels:  ffmpeg, ubuntu
Bento
Packer templates for building minimal Vagrant baseboxes for multiple platforms
Stars: ✭ 3,779 (+356.4%)
Mutual labels:  ubuntu, centos
Sentora Core
Sentora is a web hosting control panel written in PHP for *NIX
Stars: ✭ 545 (-34.18%)
Mutual labels:  ubuntu, centos
Packer Boxes
Jeff Geerling's Packer build configurations for Vagrant boxes.
Stars: ✭ 495 (-40.22%)
Mutual labels:  ubuntu, centos
Open Build Service
Build and distribute Linux packages from sources in an automatic, consistent and reproducible way #obs
Stars: ✭ 599 (-27.66%)
Mutual labels:  ubuntu, centos
ISPC-PHPCompiler
Compile and manage multiple PHP versions easily!
Stars: ✭ 35 (-95.77%)
Mutual labels:  ubuntu, centos

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

There are different builds available:

  • alpine based images ffmpeg:<version>-alpine38 or ffmpeg:<version>-alpine312 (the ffmpeg:<version>-alpine builds are not updated any more)
    • alpine based scratch images ffmpeg:<version>-scratch38 or ffmpeg:<version>-scratch312 (experimental image containing only FFmpeg and libraries, the ffmpeg:<version>-alpine builds are not updated any more)
  • centos based images ffmpeg:<version>-centos7 or ffmpeg:<version>-centos8
  • ubuntu based images ffmpeg:<version>-ubuntu1804 or ffmpeg:<version>-ubuntu2004 (the default, you can also use ffmpeg:<version>-ubuntu as an alias)
    • ubuntu based nvidia images ffmpeg:<version>-nvidia1804
    • ubuntu based vaapi images ffmpeg:<version>-vaapi1804 or ffmpeg:<version>-vaapi2004

<version> can be one of the following:

  • 3.2
  • 3.3
  • 3.4
  • 4.0
  • 4.1
  • 4.2
  • 4.3
  • snapshot

Not all combinations are supported and older versions will fade out over time. See the table below for the currently supported combinations.

Version alpine38 alpine312 centos7 centos8 nvidia1804 scratch38 scratch312 ubuntu1804 ubuntu2004 vaapi1804 vaapi2004
3.2 ✔️ ✔️ ✔️ ✔️ ✔️
3.3 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
3.4 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
4.0 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
4.1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
4.2 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
4.3 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
snapshot ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Generate list of recent images

You can use the following command to generate a list of current images:

$ 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, use the following command:

$ 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 N-98740-ga72d529 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --enable-vaapi --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
  libavutil      56. 58.100 / 56. 58.100
  libavcodec     58.100.100 / 58.100.100
  libavformat    58. 51.100 / 58. 51.100
  libavdevice    58. 11.101 / 58. 11.101
  libavfilter     7. 87.100 /  7. 87.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100

  configuration:
    --disable-debug
    --disable-doc
    --disable-ffplay
    --enable-shared
    --enable-avresample
    --enable-libopencore-amrnb
    --enable-libopencore-amrwb
    --enable-gpl
    --enable-libass
    --enable-fontconfig
    --enable-libfreetype
    --enable-libvidstab
    --enable-libmp3lame
    --enable-libopus
    --enable-libtheora
    --enable-libvorbis
    --enable-libvpx
    --enable-libwebp
    --enable-libxcb
    --enable-libx265
    --enable-libxvid
    --enable-libx264
    --enable-nonfree
    --enable-openssl
    --enable-libfdk_aac
    --enable-postproc
    --enable-small
    --enable-version3
    --enable-libbluray
    --enable-libzmq
    --extra-libs=-ldl
    --prefix=/opt/ffmpeg
    --enable-libopenjpeg
    --enable-libkvazaar
    --enable-libaom
    --extra-libs=-lpthread
    --enable-libsrt
    --enable-libaribb24
    --enable-vaapi
    --extra-cflags=-I/opt/ffmpeg/include
    --extra-ldflags=-L/opt/ffmpeg/lib

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 ZeroMQ to toggle filter value on-fly

Let's start some process continuously writing some radio music, and listen it:

 docker run --rm -d -v $(pwd):$(pwd) -w $(pwd) -p 11235:11235 \
        --name radio-writer jrottenberg/ffmpeg \
        -i http://radio.casse-tete.solutions/salut-radio-64.mp3 \
        -filter_complex '[0:a][email protected]=1,azmq=bind_address=tcp\\\://0.0.0.0\\\:11235[out]' \
        -map '[out]' ./salut-radio.mp3

 ffplay ./salut-radio.mp3

Now, just toggle its volume on-fly, and hear how it changes:

 docker run --rm --network=host --entrypoint sh jrottenberg/ffmpeg -c \
        'echo "[email protected] volume 2" | zmqsend -b tcp://127.0.0.1:11235'

Send a stream over SRT

Let's send video.mp4 to srt-listener on port 9000 over SRT protocol.

docker run -v $(pwd):$(pwd) jrottenberg/ffmpeg \
       -re -i $(pwd)/video.mp4 -acodec copy -vcodec copy -f mpegts srt://srt-listener:9000?pkt_size=1316

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].