Upgrading stacks is a big deal, and we make sure to be careful with the versions we choose to offer to maximize compatability, as well as to bring the latest and greatest features offered by the FFmpeg team.

However, with the release of v5.0.0 ("Lorentz"), it was hard to say no. With a number of new filters, muxers, decoders and encoders, there's plenty of new toys to play around with. Say goodbye to many of the old encode/decode APIs as well, as they've been superceded by an N:M based API.

You can find the changelog on the FFmpeg website, and below you can see which formats, codecs and filters Transloadit has gained and lost support for.

You can convert from these formats:

  • aax
  • ace
  • argo_brp
  • binka
  • bitpacked
  • cri_pipe
  • dash
  • gem_pipe
  • imf
  • ipu
  • jack
  • kmsgrab
  • luodat
  • mca
  • mcc
  • mods
  • moflex
  • msp
  • pgx_pipe
  • photocd_pipe
  • scd
  • sga
  • simbiosis_imx
  • svs
  • xbm_pipe

You can convert to these formats:

  • alp
  • amv
  • apm
  • argo_asf
  • ttml
  • wsaud

You can convert from and to these formats:

  • argo_cvg
  • avs3
  • obu

You can convert to these codecs:

  • adpcm_argo
  • adpcm_ima_alp
  • adpcm_ima_amv
  • adpcm_ima_apm
  • adpcm_ima_ws
  • bitpacked
  • cfhd
  • exr
  • pfm
  • rpza
  • smc
  • speedhq
  • ttml

You can convert from these codecs:

  • adpcm_ima_acorn
  • adpcm_ima_moflex
  • argo
  • cri
  • fastaudio
  • gem
  • ipu
  • mobiclip
  • msnsiren
  • msp2
  • pcm_sga
  • pgx
  • photocd
  • sga
  • simbiosis_imx

You can use these filters:

  • acrusher
  • adecorrelate
  • adenorm
  • adynamicequalizer
  • adynamicsmooth
  • aemphasis
  • aeval
  • aexciter
  • afade
  • afftfilt
  • afreqshift
  • afwtdn
  • agate
  • alatency
  • alimiter
  • anequalizer
  • anlmf
  • aperms
  • aphaseshift
  • apsyclip
  • arnndn
  • aspectralstats
  • asubboost
  • asubcut
  • asupercut
  • asuperpass
  • asuperstop
  • atilt
  • avectorscope
  • bbox
  • bilateral
  • blackdetect
  • blend
  • chromanr
  • colorcontrast
  • colorcorrect
  • colorize
  • colortemperature
  • convolution
  • curves
  • datascope
  • deband
  • deblock
  • despill
  • doubleweave
  • epx
  • estdif
  • exposure
  • fade
  • fftdnoiz
  • fftfilt
  • frei0r
  • grayworld
  • guided
  • haldclut
  • hsvhold
  • hsvkey
  • huesaturation
  • identity
  • kirsch
  • lagfun
  • latency
  • lenscorrection
  • limitdiff
  • limiter
  • lut
  • lut1d
  • lut2
  • lut3d
  • lutrgb
  • lutyuv
  • maskedclamp
  • maskedmax
  • maskedmerge
  • maskedmin
  • maskedthreshold
  • maskfun
  • mix
  • monochrome
  • morpho
  • msad
  • negate
  • nnedi
  • perms
  • phase
  • pixscope
  • prewitt
  • pseudocolor
  • psnr
  • readeia608
  • roberts
  • scharr
  • shear
  • shufflepixels
  • sidechaingate
  • sobel
  • sofalizer
  • speechnorm
  • ssim
  • stereotools
  • super2xsai
  • swaprect
  • tblend
  • threshold
  • tlut2
  • tmedian
  • tmidequalizer
  • tmix
  • varblur
  • vif
  • w3fdif
  • weave
  • xcorrelate
  • xmedian
  • zscale

You can’t convert to these formats:

  • caca
  • singlejpeg

You can’t use these filters:

  • avgblur
  • remap
  • uspp

Trying a new filter

Lets take a look at an FFmpeg filter, which you can use as a starting point for your explorations.

Here's a small Template that uses the colorkey filter to remove a green screen from a video stream. We use the similarity and blend parameters to also tweak how sensitive our chroma key is, to try and remove as much of the green background as possible. We also have to convert our file to webm, since this supports transparent video streams.

{
  ":original": {
    "robot": "/upload/handle"
  },
  "remove_green_screen": {
    "use": ":original",
    "robot": "/video/encode",
    "result": true,
    "ffmpeg_stack": "v5.0.0",
    "preset": "empty",
    "ffmpeg": {
      "vf": "colorkey=0x00FF00:similarity=0.2:blend=0.3",
      "c": "copy",
      "c:v": "vp9",
      "f": "webm"
    }
  },
  "exported": {
    "use": ["remove_green_screen", ":original"],
    "robot": "/s3/store",
    "credentials": "YOUR_AWS_CREDENTIALS",
    "url_prefix": "https://demos.transloadit.com/"
  }
}

As you can see, it's simple to directly use FFmpeg commands from within a transcoding step. Following the same steps, you can extend the capabilties of any of our FFmpeg powered Robots to suit your needs.

Results

Below are the results from the Template that we made.

:original
remove_green_screen

Wrapping up

Of course, this is only a small piece of the larger FFmpeg pie 🥧 I hope that you can use this Template as a baseline for your own deep-dive into the FFmpeg gold-mine, as there's plenty to discover.

As always, if you run into any issues when upgrading to the new stack, please report it to us on Intercom. We'll be quick to squash any bugs that you may come across.