| name | ffmpeg-image-processing |
| description | 基于 FFmpeg 的图片处理技能,提供最实用的日常图片处理命令 |
| license | MIT |
| user-invocable | true |
| tags | ["ffmpeg","image","processing","conversion","compression"] |
FFmpeg 图片处理技能 · 实用场景示例
目标:提供最常用、最实用的 FFmpeg 图片处理命令,按需求频次从高到低排序
图片属性查看
ffmpeg -i input.jpg 2>&1
图片格式转换(最常用)
ffmpeg -i input.jpg output.png
ffmpeg -i input.png -q:v 2 output.jpg
ffmpeg -i input.jpg output.webp
ffmpeg -i input.png output.webp
ffmpeg -i input.webp output.jpg
ffmpeg -i input.jpg output.bmp
ffmpeg -i input.jpg output.tiff
图片压缩
ffmpeg -i input.jpg -q:v 2 output_compressed.jpg
ffmpeg -i input.jpg -q:v 3 output_small.jpg
ffmpeg -i input.jpg -q:v 5 output_very_small.jpg
ffmpeg -i input.png -compression_level 9 output_compressed.png
ffmpeg -i input.jpg -q:v 80 output.webp
for file in *.jpg; do
ffmpeg -i "$file" -q:v 2 "compressed_$file"
done
图片尺寸调整
ffmpeg -i input.jpg -vf "scale=1920:-1" output.jpg
ffmpeg -i input.jpg -vf "scale=-1:1080" output.jpg
ffmpeg -i input.jpg -vf "scale=1280:720" output.jpg
ffmpeg -i input.jpg -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.jpg
ffmpeg -i input_4k.jpg -vf "scale=1920:1080" output_1080p.jpg
ffmpeg -i input.jpg -vf "scale=400:-1" thumbnail.jpg
图片裁剪
ffmpeg -i input.jpg -vf "crop=800:600:0:0" output.jpg
ffmpeg -i input.jpg -vf "crop=800:600:iw-800:0" output.jpg
ffmpeg -i input.jpg -vf "crop=400:300:100:50" output.jpg
ffmpeg -i input.jpg -vf "crop=800:600" output.jpg
ffmpeg -i input.jpg -vf "crop=w=min(iw\,ih):h=min(iw\,ih)" output_square.jpg
图片旋转与翻转
ffmpeg -i input.jpg -vf "transpose=1" output.jpg
ffmpeg -i input.jpg -vf "transpose=2" output.jpg
ffmpeg -i input.jpg -vf "transpose=1,transpose=1" output.jpg
ffmpeg -i input.jpg -vf "hflip" output.jpg
ffmpeg -i input.jpg -vf "vflip" output.jpg
图片添加水印
ffmpeg -i input.jpg -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.jpg
ffmpeg -i input.jpg -i logo.png -filter_complex "overlay=10:10" output.jpg
ffmpeg -i input.jpg -i logo.png -filter_complex "[1:v]format=rgba,colorchannelmixer=aa=0.5[wm];[0:v][wm]overlay=W-w-10:H-h-10" output.jpg
ffmpeg -i input.jpg -i logo.png -filter_complex "overlay=(W-w)/2:(H-h)/2" output.jpg
ffmpeg -i input.jpg -vf "drawtext=text='Your Name':x=10:y=10:fontsize=36:fontcolor=white" output.jpg
ffmpeg -i input.jpg -vf "drawtext=text='Your Name':x=10:y=10:fontsize=36:fontcolor=white@0.5" output.jpg
ffmpeg -i input.jpg -vf "drawtext=text='Your Name':x=10:y=10:fontsize=36:fontcolor=white:borderw=3:bordercolor=black" output.jpg
ffmpeg -i input.jpg -vf "drawtext=text='Your Name':x=12:y=12:fontsize=36:fontcolor=black,drawtext=text='Your Name':x=10:y=10:fontsize=36:fontcolor=white" output.jpg
6.1 剪切蒙版与形状
ffmpeg -i input.jpg -vf "format=rgba,geq=r='r(X,Y)':g='g(X,Y)':b='b(X,Y)':a='if(gt(pow((X-W/2)/(W/2),2)+pow((Y-H/2)/(H/2),2),1),0,255)'" output.png
ffmpeg -i input.jpg -vf "drawbox=x=100:y=100:w=200:h=150:color=red:t=5" output.jpg
ffmpeg -i input.jpg -vf "drawcircle=x=300:y=200:r=50:color=blue" output.jpg
ffmpeg -i input.jpg -vf "drawbox=x=100:y=195:w=150:h=10:color=red:t=fill,drawpolygon=x=250:y=200:230:y=180:230:y=220:color=red" output.jpg
图片特效
ffmpeg -i input.jpg -vf "format=gray" output.jpg
ffmpeg -i input.jpg -vf "colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3,eq=gamma=0.8:contrast=1.2" output.jpg
ffmpeg -i input.jpg -vf "boxblur=5:1" output.jpg
ffmpeg -i input.jpg -vf "unsharp=5:5:1.5" output.jpg
ffmpeg -i input.jpg -vf "convolution='-2 -1 0:-1 1 1:0 1 2'" output.jpg
ffmpeg -i input.jpg -vf "edgedetect=mode=canny" output.jpg
ffmpeg -i input.jpg -vf "curves=preset=negative" output.jpg
ffmpeg -i input.jpg -vf "curves=preset=strong_contrast" output.jpg
ffmpeg -i input.jpg -vf "eq=brightness=0.1:contrast=1.2:saturation=1.3" output.jpg
ffmpeg -i input.jpg -vf "eq=gamma=1.2" output.jpg
ffmpeg -i input.jpg -vf "hue=h=10:s=1.2:b=0.1" output.jpg
画质修复
ffmpeg -i input.jpg -vf "hqdn3d=1.5:1.5:6:6" output.jpg
ffmpeg -i input.jpg -vf "nlmeans=s=5:p=3" output.jpg
ffmpeg -i input.jpg -vf "hqdn3d=2:2:8:8,unsharp=3:3:-1.5:3:3:1.5" output.jpg
图片拼接
ffmpeg -i input1.jpg -i input2.jpg -filter_complex "hstack" output.jpg
ffmpeg -i input1.jpg -i input2.jpg -filter_complex "vstack" output.jpg
ffmpeg -i input1.jpg -i input2.jpg -i input3.jpg -filter_complex "[0:v][1:v][2:v]hstack=inputs=3" output.jpg
ffmpeg -i input1.jpg -i input2.jpg -i input3.jpg -i input4.jpg -filter_complex "[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack" output.jpg
ffmpeg -i input1.jpg -i input2.jpg -i input3.jpg -filter_complex "[0:v]pad=iw:ih+20[top];[top][1:v]vstack[mid];[mid]pad=iw:ih+20[mid2];[mid2][2:v]vstack" output.jpg
图片序列转视频
ffmpeg -framerate 24 -i image_%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
ffmpeg -loop 1 -i image.jpg -t 10 -c:v libx264 -pix_fmt yuv420p -r 30 output.mp4
ffmpeg -loop 1 -i image.jpg -t 10 -vf "fade=in:0:60,fade=out:240:60" -c:v libx264 -pix_fmt yuv420p output.mp4
图片添加边框
ffmpeg -i input.jpg -vf "pad=w=iw+40:h=ih+40:x=20:y=20:color=black" output.jpg
ffmpeg -i input.jpg -vf "pad=w=iw+60:h=ih+60:x=30:y=30:color=white" output.jpg
ffmpeg -i input.jpg -vf "pad=w=iw+40:h=ih+40:x=20:y=20:color=red" output.jpg
ffmpeg -i input.jpg -vf "pad=w=iw+10:h=ih:x=10:y=0:color=black,crop=iw-10:ih:10:0" output.jpg
图片圆角
ffmpeg -i input.jpg -vf "format=rgba,geq=r='X/W*r(X,Y)':g='X/W*g(X,Y)':b='X/W*b(X,Y)':a='if(gt(abs(X-W/2),W/2-50)*gt(abs(Y-H/2),H/2-50),0,255)'" output.png
ffmpeg -i input.jpg -f lavfi -i color=c=black:s=200x200,format=gray,geq=lum='128+127*cos(2*PI*((X/W-0.5)^2+(Y/H-0.5)^2)^0.5)' -filter_complex "[1:v]scale=iw:ih[mask];[0:v][mask]alphamerge" output.png
图片批量处理
for file in *.png *.webp *.bmp; do
if [ -f "$file" ]; then
ffmpeg -i "$file" -q:v 2 "${file%.*}.jpg"
fi
done
for file in *.jpg; do
ffmpeg -i "$file" -q:v 2 "compressed_$file"
done
for file in *.jpg; do
ffmpeg -i "$file" -vf "scale=1920:-1" "resized_$file"
done
for file in *.jpg; do
ffmpeg -i "$file" -i logo.png -filter_complex "overlay=W-w-10:H-h-10" "watermarked_$file"
done
图片信息查看
ffmpeg -i input.jpg
```bash
ffmpeg -i input.jpg -vf "chromakey=0x00FF00:0.1:0.1" -c:v png output.png
ffmpeg -i input.jpg -vf "chromakey=0x0000FF:0.1:0.1" -c:v png output.png
参数速查表
常用图片编码参数
| 参数 | 说明 |
|---|
-q:v 2 | JPG 高质量 |
-q:v 3 | JPG 中等质量 |
-q:v 5 | JPG 低质量 |
-compression_level 9 | PNG 最高压缩 |
-c:v copy | 直接复制流,不重新编码 |
常用图片滤镜参数
| 滤镜 | 说明 |
|---|
scale=w:h | 调整尺寸 |
crop=w:h:x:y | 裁剪 |
transpose=1/2 | 旋转 |
hflip/vflip | 翻转 |
overlay=x:y | 叠加水印 |
drawtext | 添加文字 |
format=gray | 黑白 |
boxblur=5:1 | 模糊 |
unsharp=5:5:1.5 | 锐化 |
eq=brightness=x:contrast=y | 调色 |
hue=h:s:b | HSL 调色 |
pad=w:h:x:y:color=c | 添加边框 |
hstack/vstack | 拼接 |
hqdn3d | 去噪 |
nlmeans | 强力去噪 |
drawbox | 绘制矩形 |
drawcircle | 绘制圆形 |
drawpolygon | 绘制多边形 |