Search code examples
videoffmpegtransparencymp4webm

Convert mp4 to webm with transparency?


I know how to convert mp4 to webm with ffmpeg:

ffmpeg -y -i me939371029.mp4 -r 30  out3.webm

But I'd like to use webm transparency. That guide uses Blender, but Blender's a desktop tool that's not easily automated and only outputs PNGs that must be converted to video. I'd like a command line app that accepts video in, a color, and a video out. E.g.:

some-app -i video.mp4 -transparent ff0000 -o video.webm

I'd be surprised if something like this wasn't already in ffmpeg, but I can't seem to find it.


Solution

  • Assuming the color to be keyed out is 00ff00, use

    ffmpeg -i input.mp4 -c:v libvpx -vf "colorkey=0x00ff00:0.1:0.1,format=yuva420p" out.webm
    

    In colorkey=0x00ff00:0.1:0.1

    Parts are seperated by :. The first part is the key color. The color

    0x00ff00

    is green.

    the 2nd is similarity

    0.01 matches only the exact key color, while 1.0 matches everything.

    and the 3rd is blend percentage

    0.0 makes pixels either fully transparent, or not transparent at all.

    Higher values result in semi-transparent pixels, with a higher transparency the more similar the pixels color is to the key color.

    See the ffmpeg colorkey documentation


    Resolving auto_alt_ref error

    When you run into an error saying: Transparency encoding with auto_alt_ref does not work Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

    You can disable auto_alt_ref by adding the parameter -auto-alt-ref 0