alphamerge, alphaextract (more)

Watch on youtube.com
doc

https://ffmpeg.org/ffmpeg-filters.html#alphamerge, https://ffmpeg.org/ffmpeg-filters.html#alphaextract, https://ffmpeg.org/ffmpeg-filters.html#geq

I will show you a slightly more complicated example shown at the end of the previous video. Since “geq” is relatively powerful, it is unexpectedly easy to obtain interesting effects.

Just shown here is merely variations of the previous video, there should be nothing new information. If you are not interested, skip this video, because this video is a bit longer than other videos.

By the way, in these examples, all are written in “all in one style”, but “geq” is very heavy and slow, so if you really want to do something similar like these, it is better to separate the “geq” part (that is, the “video for alpha” part).

checker board

bg for alpha

1x1 checker board

00:00:40
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='if(eq(mod(X,2),mod(Y,2)),255,0)'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

32x32 checker board

00:00:48
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='if(eq(mod(floor(X/32),2),mod(floor(Y/32),2)),255,0)'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

32x32 checker board

00:00:56
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='lum=if(eq(mod(floor(X/32),2),mod(floor(Y/32),2)),255,0):
cr=128:
cb=128'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

applying `alphamerge’

1x1 checker board

00:01:04
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='if(eq(mod(X,2),mod(Y,2)),255,0)'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

32x32 checker board

00:01:28
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='if(eq(mod(floor(X/32),2),mod(floor(Y/32),2)),255,0)'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

32x32 checker board

00:01:52
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='lum=if(eq(mod(floor(X/32),2),mod(floor(Y/32),2)),255,0):
cr=128:
cb=128'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

gradation

bg for alpha

gradation (1)

00:02:16
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='lum=X*255/W:
cr=128:
cb=128'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

gradation (2)

00:02:24
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='lum=Y*255/H:
cr=128:
cb=128'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

gradation (3)

00:02:32
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='lum=255*(1-sqrt((X-W/2)^2+(Y-H/2)^2)/sqrt((W/2)^2+(H/2)^2)):
cr=128:
cb=128'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

gradation (4)

00:02:40
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0):
cr=128:
cb=128'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

applying `alphamerge’

gradation (1)

00:02:48
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='lum=X*255/W:
cr=128:
cb=128'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

gradation (2)

00:03:12
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='lum=Y*255/H:
cr=128:
cb=128'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

gradation (3)

00:03:36
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='lum=255*(1-sqrt((X-W/2)^2+(Y-H/2)^2)/sqrt((W/2)^2+(H/2)^2)):
cr=128:
cb=128'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

gradation (4)

00:04:00
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0):
cr=128:
cb=128'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave

bg for alpha

wave (horizontal)

00:04:24
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='128+sin(X*(8*PI/W))*127'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (vertical)

00:04:32
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='128+sin(Y*(8*PI/H))*127'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (radial)

00:04:40
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='128+sin(((W/2-X)^2+(H/2-Y)^2)*(8*PI/((W/2)^2+(H/2)^2)))*127'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

applying `alphamerge’

wave (horizontal)

00:04:48
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='128+sin(X*(8*PI/W))*127'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (vertical)

00:05:12
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='128+sin(Y*(8*PI/H))*127'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (radial)

00:05:36
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='128+sin(((W/2-X)^2+(H/2-Y)^2)*(8*PI/((W/2)^2+(H/2)^2)))*127'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

bg for alpha

wave (horizontal)

00:06:00
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='128+sin((X+T*40)*(8*PI/W))*127'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (vertical)

00:06:08
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='128+sin((Y+T*20)*(8*PI/H))*127'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (radial)

00:06:16
#! /bin/sh
ffmpeg -y \
-filter_complex "
color=black:s=992x558:d=8
,format=yuv444p

,geq='128+sin(((W/2-X)^2+(H/2-Y)^2)*((8+T)*PI/((W/2)^2+(H/2)^2))-T*10)*127'

,format=yuv420p
[v]" -map '[v]' -an out.mp4

applying `alphamerge’

wave (horizontal)

00:06:24
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='128+sin((X+T*40)*(8*PI/W))*127'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (vertical)

00:06:48
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='128+sin((Y+T*20)*(8*PI/H))*127'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4

wave (radial)

00:07:12
#! /bin/sh
f1="Pexels_2877_2880.mp4"
f2="Pexels_2880_2877.mp4"

ffmpeg -y -i "${f1}" -i "${f2}" -filter_complex "
color=black:s=992x558:d=24
,format=yuv444p
,geq='128+sin(((W/2-X)^2+(H/2-Y)^2)*((8+T)*PI/((W/2)^2+(H/2)^2))-T*10)*127'
[alpha];

[0:v]scale=992:558,setsar=1[0v];
[1:v]scale=992:558,setsar=1[1v];
[1v][alpha]alphamerge[1v];

[0v][1v]overlay,format=yuv420p
[v]" -map '[v]' -an out.mp4