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