| name | ffmpeg-glitch-distortion-effects |
| description | Complete glitch art, datamosh, and video distortion effects system. PROACTIVELY activate for: (1) Datamosh/pixel bleeding effects, (2) VHS/analog glitch simulation, (3) Digital corruption effects, (4) Displacement mapping, (5) Wave/ripple distortions, (6) Pixelation and mosaic effects, (7) Chromatic aberration, (8) Scan line effects, (9) Time-based distortions (echo, trails), (10) Lens distortion and barrel effects. Provides: minterpolate for datamosh, displacement filter, geq pixel manipulation, noise and artifacts, rgbashift/chromashift for color separation, lagfun for trails, tmix for frame blending, tblend for frame difference effects. |
CRITICAL GUIDELINES
Windows File Path Requirements
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
Quick Reference
| Effect | Command |
|---|
| Datamosh | -vf "minterpolate='mi_mode=mci:mc_mode=aobmc:me_mode=bidir'" |
| Chromatic aberration | -vf "rgbashift=rh=-5:bh=5" |
| VHS noise | -vf "noise=c0s=20:c0f=t,eq=saturation=1.2" |
| Pixelate | -vf "scale=iw/10:ih/10,scale=iw*10:ih*10:flags=neighbor" |
| Wave distortion | -vf "displace=..." with displacement map |
| Echo/trails | -vf "lagfun=decay=0.95" |
| Scan lines | -vf "drawgrid=w=iw:h=2:t=1:c=black@0.5" |
When to Use This Skill
Use for creative distortion effects:
- Music video glitch aesthetics
- Datamosh/pixel bleeding art
- VHS/analog video simulation
- Digital corruption and artifacts
- Psychedelic and experimental video
- Horror/unsettling visual effects
FFmpeg Glitch & Distortion Effects (2025)
Complete guide to datamosh, glitch art, VHS effects, displacement, and creative video distortion with FFmpeg.
Datamosh Effects
Datamosh creates the "pixel bleeding" effect by manipulating motion compensation.
Basic Datamosh with minterpolate
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1'" \
-c:v libx264 -crf 18 datamosh.mp4
Intense Datamosh
ffmpeg -i input.mp4 \
-vf "minterpolate='fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:me=epzs:vsbmc=1:scd=none'" \
-c:v libx264 -crf 18 heavy_datamosh.mp4
Datamosh with Frame Manipulation
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc',\
tblend=all_mode=difference:all_opacity=0.5" \
datamosh_blend.mp4
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc',lagfun=decay=0.9" \
datamosh_trails.mp4
Controlled Datamosh (Specific Sections)
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc':enable='between(t,5,10)'" \
controlled_datamosh.mp4
Chromatic Aberration
Color channel separation for that "broken lens" look.
rgbashift Filter
ffmpeg -i input.mp4 \
-vf "rgbashift=rh=-5:bh=5" \
chromatic.mp4
ffmpeg -i input.mp4 \
-vf "rgbashift=rv=-3:bv=3" \
chromatic_v.mp4
ffmpeg -i input.mp4 \
-vf "rgbashift=rh=-4:rv=-2:bh=4:bv=2" \
chromatic_both.mp4
Animated Chromatic Aberration
ffmpeg -i input.mp4 \
-vf "rgbashift=rh='5*sin(t*3)':bh='-5*sin(t*3)'" \
pulsing_chromatic.mp4
ffmpeg -i input.mp4 \
-vf "rgbashift=rh='-t*2':bh='t*2'" \
increasing_chromatic.mp4
chromashift Filter (Chroma Only)
ffmpeg -i input.mp4 \
-vf "chromashift=cbh=5:crh=-5" \
chroma_shift.mp4
VHS/Analog Effects
Complete VHS Simulation
ffmpeg -i input.mp4 \
-vf "\
noise=c0s=15:c0f=t:c1s=10:c1f=t,\
eq=saturation=1.4:contrast=1.1:brightness=-0.02,\
chromashift=cbh=3:crh=-3,\
rgbashift=rh=2:bh=-2,\
unsharp=3:3:-0.5,\
drawgrid=w=iw:h=2:t=1:c=black@0.3,\
curves=preset=vintage" \
-c:v libx264 -crf 20 vhs_effect.mp4
VHS Components Breakdown
ffmpeg -i input.mp4 \
-vf "noise=c0s=20:c0f=t:c1s=15:c1f=t" \
vhs_noise.mp4
ffmpeg -i input.mp4 \
-vf "chromashift=cbh=4:cbv=2:crh=-3:crv=1" \
vhs_color_bleed.mp4
ffmpeg -i input.mp4 \
-vf "drawgrid=w=iw:h=2:t=1:c=black@0.4" \
vhs_scanlines.mp4
ffmpeg -i input.mp4 \
-vf "crop=iw:ih-20:0:'20*random(1)',pad=iw:ih+20:0:10" \
vhs_tracking.mp4
ffmpeg -i input.mp4 \
-vf "eq=saturation=1.5:contrast=1.1,curves=preset=vintage" \
vhs_colors.mp4
VHS Static/Snow
ffmpeg -f lavfi -i "nullsrc=s=1920x1080:d=10" \
-vf "noise=c0s=100:c0f=a+t,format=gray" \
-c:v libx264 -t 10 static.mp4
ffmpeg -i input.mp4 -i static.mp4 \
-filter_complex "[0:v][1:v]blend=all_mode=screen:all_opacity=0.1" \
vhs_static.mp4
Pixelation & Mosaic
Basic Pixelation
ffmpeg -i input.mp4 \
-vf "scale=iw/10:ih/10,scale=iw*10:ih*10:flags=neighbor" \
pixelated.mp4
ffmpeg -i input.mp4 \
-vf "scale=iw/20:ih/20,scale=iw*20:ih*20:flags=neighbor" \
heavy_pixel.mp4
Animated Pixelation
ffmpeg -i input.mp4 \
-vf "scale='iw/max(1,t*2)':'ih/max(1,t*2)',scale=iw:ih:flags=neighbor" \
animated_pixel.mp4
Mosaic/Censoring Effect
ffmpeg -i input.mp4 \
-filter_complex "\
[0:v]crop=200:200:300:200[face];\
[face]scale=iw/10:ih/10,scale=iw*10:ih*10:flags=neighbor[blurred];\
[0:v][blurred]overlay=300:200" \
mosaic_region.mp4
Wave & Ripple Distortion
Displacement Map
ffmpeg -f lavfi -i "gradients=s=1920x1080:c0=black:c1=white:x0=0:y0=540:x1=1920:y1=540" \
-vframes 1 displacement_h.png
ffmpeg -i input.mp4 -i displacement_h.png \
-filter_complex "[0:v][1:v]displace=edge=wrap" \
wave_h.mp4
Animated Wave with geq
ffmpeg -i input.mp4 \
-vf "geq=lum='lum(X+10*sin(Y/20+T*5),Y)':cb='cb(X+10*sin(Y/20+T*5),Y)':cr='cr(X+10*sin(Y/20+T*5),Y)'" \
wave_animated.mp4
ffmpeg -i input.mp4 \
-vf "geq=lum='lum(X,Y+10*sin(X/20+T*5))':cb='cb(X,Y+10*sin(X/20+T*5))':cr='cr(X,Y+10*sin(X/20+T*5))'" \
wave_v.mp4
ffmpeg -i input.mp4 \
-vf "geq=lum='lum(X+5*sin(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/10-T*5),Y+5*cos(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/10-T*5))':cb='cb(X,Y)':cr='cr(X,Y)'" \
ripple.mp4
lenscorrection (Barrel/Pincushion)
ffmpeg -i input.mp4 \
-vf "lenscorrection=cx=0.5:cy=0.5:k1=0.5:k2=0.5" \
barrel.mp4
ffmpeg -i input.mp4 \
-vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.3:k2=-0.3" \
pincushion.mp4
Echo & Trails (lagfun)
Basic Trails
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.95" \
trails.mp4
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.98" \
heavy_trails.mp4
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.85" \
light_trails.mp4
Trails with Color
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.95,hue=h=t*10" \
color_trails.mp4
ffmpeg -i input.mp4 \
-vf "negate,lagfun=decay=0.95,negate" \
inverted_trails.mp4
Frame Blending (tmix, tblend)
tmix (Temporal Mix)
ffmpeg -i input.mp4 \
-vf "tmix=frames=5:weights='1 1 1 1 1'" \
motion_blur.mp4
ffmpeg -i input.mp4 \
-vf "tmix=frames=10:weights='1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1'" \
echo.mp4
ffmpeg -i input.mp4 \
-vf "tmix=frames=3:weights='1 0.5 0.25'" \
ghosting.mp4
tblend (Frame Difference)
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=difference" \
frame_diff.mp4
Creative tblend Effects
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=difference128,eq=brightness=0.1:contrast=2" \
neon_edges.mp4
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=phoenix" \
psychedelic.mp4
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=heat" \
burn_effect.mp4
Digital Corruption
Random Artifacts
ffmpeg -i input.mp4 \
-vf "\
noise=c0s=30:c0f=a+t:c1s=20:c1f=a+t,\
rgbashift=rh='5*random(1)':bh='-5*random(1)'" \
digital_glitch.mp4
Compression Artifact Simulation
ffmpeg -i input.mp4 \
-c:v libx264 -crf 51 -preset ultrafast \
temp_compressed.mp4
ffmpeg -i temp_compressed.mp4 \
-c:v libx264 -crf 18 \
artifacts.mp4
for i in {1..5}; do
ffmpeg -y -i input.mp4 -c:v libx264 -crf 40 temp.mp4
mv temp.mp4 input.mp4
done
Bit Manipulation (geq)
ffmpeg -i input.mp4 \
-vf "geq=lum='floor(lum(X,Y)/32)*32':cb='floor(cb(X,Y)/32)*32':cr='floor(cr(X,Y)/32)*32'" \
bit_crush.mp4
ffmpeg -i input.mp4 \
-vf "geq=lum='bitxor(lum(X,Y),X+Y)':cb='cb(X,Y)':cr='cr(X,Y)'" \
xor_pattern.mp4
Scan Lines & CRT Effects
Scan Lines
ffmpeg -i input.mp4 \
-vf "drawgrid=w=iw:h=2:t=1:c=black@0.5" \
scanlines.mp4
ffmpeg -i input.mp4 \
-vf "drawgrid=w=iw:h=4:t=2:c=black@0.7" \
heavy_scanlines.mp4
ffmpeg -i input.mp4 \
-vf "drawgrid=w=3:h=ih:t=1:c=black@0.3" \
rgb_scanlines.mp4
CRT Simulation
ffmpeg -i input.mp4 \
-vf "\
gblur=sigma=0.5,\
drawgrid=w=iw:h=2:t=1:c=black@0.4,\
vignette=PI/4,\
eq=saturation=1.2:contrast=1.1,\
lenscorrection=k1=0.1:k2=0.1,\
noise=c0s=5:c0f=t" \
crt_effect.mp4
Interlacing Effects
ffmpeg -i input.mp4 \
-vf "interlace=scan=tff,fieldorder=bff" \
interlaced.mp4
ffmpeg -i input.mp4 \
-vf "tinterlace=merge" \
comb_effect.mp4
Mirror & Kaleidoscope
Mirror Effects
ffmpeg -i input.mp4 \
-vf "crop=iw/2:ih:0:0,split[a][b];[b]hflip[b];[a][b]hstack" \
mirror_h.mp4
ffmpeg -i input.mp4 \
-vf "crop=iw:ih/2:0:0,split[a][b];[b]vflip[b];[a][b]vstack" \
mirror_v.mp4
ffmpeg -i input.mp4 \
-vf "\
crop=iw/2:ih/2:0:0,split=4[a][b][c][d];\
[b]hflip[b];[c]vflip[c];[d]hflip,vflip[d];\
[a][b]hstack[top];[c][d]hstack[bottom];\
[top][bottom]vstack" \
quad_mirror.mp4
Combined Glitch Presets
Music Video Glitch
ffmpeg -i input.mp4 \
-vf "\
minterpolate='mi_mode=mci:mc_mode=aobmc':enable='lt(mod(t,2),0.2)',\
rgbashift=rh='3*sin(t*10)':bh='-3*sin(t*10)',\
lagfun=decay=0.9:enable='gt(mod(t,3),2.5)',\
noise=c0s=10:c0f=t:enable='lt(mod(t,5),0.3)'" \
-c:v libx264 -crf 18 music_glitch.mp4
Horror Glitch
ffmpeg -i input.mp4 \
-vf "\
eq=brightness=-0.1:contrast=1.2:saturation=0.7,\
chromashift=cbh='5*random(1)':crh='-3*random(1)',\
noise=c0s=15:c0f=a+t,\
tblend=all_mode=difference:all_opacity=0.1:enable='lt(mod(t,3),0.1)',\
drawgrid=w=iw:h=2:t=1:c=black@0.5" \
horror_glitch.mp4
Cyberpunk Glitch
ffmpeg -i input.mp4 \
-vf "\
eq=saturation=1.5:contrast=1.3,\
colorbalance=rs=0.2:bs=0.2,\
rgbashift=rh='-3':bh='3',\
drawgrid=w=iw:h=3:t=1:c=black@0.3,\
unsharp=5:5:1.5" \
cyberpunk.mp4
Analog TV Signal Loss
ffmpeg -i input.mp4 \
-vf "\
noise=c0s=50:c0f=t:enable='lt(mod(t,10),0.5)',\
chromashift=cbh='10*random(1)':enable='lt(mod(t,10),0.5)',\
eq=brightness='-0.3*lt(mod(t,10),0.5)'" \
signal_loss.mp4
Performance Tips
- geq is CPU-intensive - Use sparingly or on short clips
- minterpolate is slow - Consider reducing resolution first
- lagfun accumulates - May need periodic "reset" cuts
- Test on short clips before processing full videos
- Hardware encoding - Use NVENC/QSV for final encode after effects
ffmpeg -i input.mp4 \
-vf "your_glitch_filters" \
-c:v rawvideo -f nut - | \
ffmpeg -i - \
-c:v h264_nvenc -preset p4 -cq 20 \
output.mp4
This guide covers FFmpeg glitch and distortion effects. For color grading see ffmpeg-color-grading-chromakey, for transitions see ffmpeg-transitions-effects.