Loading...
Loading...
基于 FFmpeg 的图片处理技能,提供最实用的日常图片处理命令
npx skill4agent add chunpu/ffmpeg-skills ffmpeg-image-processing目标:提供最常用、最实用的 FFmpeg 图片处理命令,按需求频次从高到低排序
# 查看图片属性
ffmpeg -i input.jpg 2>&1# JPG 转 PNG(无损)
ffmpeg -i input.jpg output.png
# PNG 转 JPG(质量 85)
ffmpeg -i input.png -q:v 2 output.jpg
# JPG 转 WEBP(现代格式,文件更小)
ffmpeg -i input.jpg output.webp
# PNG 转 WEBP
ffmpeg -i input.png output.webp
# WEBP 转 JPG
ffmpeg -i input.webp output.jpg
# 任意格式转 BMP
ffmpeg -i input.jpg output.bmp
# 任意格式转 TIFF
ffmpeg -i input.jpg output.tiff# JPG 压缩(质量 85,推荐)
ffmpeg -i input.jpg -q:v 2 output_compressed.jpg
# JPG 压缩(质量 75,更小体积)
ffmpeg -i input.jpg -q:v 3 output_small.jpg
# JPG 压缩(质量 50,最小体积)
ffmpeg -i input.jpg -q:v 5 output_very_small.jpg
# PNG 压缩(无损)
ffmpeg -i input.png -compression_level 9 output_compressed.png
# WEBP 压缩(质量 80)
ffmpeg -i input.jpg -q:v 80 output.webp
# 批量压缩 JPG
for file in *.jpg; do
ffmpeg -i "$file" -q:v 2 "compressed_$file"
done# 调整宽度为 1920,高度按比例
ffmpeg -i input.jpg -vf "scale=1920:-1" output.jpg
# 调整高度为 1080,宽度按比例
ffmpeg -i input.jpg -vf "scale=-1:1080" output.jpg
# 固定尺寸 1280x720(可能变形)
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
# 4K 转 1080p
ffmpeg -i input_4k.jpg -vf "scale=1920:1080" output_1080p.jpg
# 缩略图(宽度 400)
ffmpeg -i input.jpg -vf "scale=400:-1" thumbnail.jpg# 从左上角裁剪 800x600
ffmpeg -i input.jpg -vf "crop=800:600:0:0" output.jpg
# 保留右上角裁剪 800x600
ffmpeg -i input.jpg -vf "crop=800:600:iw-800:0" output.jpg
# 从 (100, 50) 位置裁剪 400x300
ffmpeg -i input.jpg -vf "crop=400:300:100:50" output.jpg
# 裁剪中心区域(800x600)
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# 顺时针旋转 90 度
ffmpeg -i input.jpg -vf "transpose=1" output.jpg
# 逆时针旋转 90 度
ffmpeg -i input.jpg -vf "transpose=2" output.jpg
# 旋转 180 度
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
# 半透明水印(透明度 0.5)
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# 圆形剪切蒙版
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
# HSL 调色(调整色相、饱和度、亮度)
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
# 2x2 网格拼接
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
# 三张图垂直等距分布(间距 20px)
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# 图片序列转视频(image_001.jpg, image_002.jpg...)
ffmpeg -framerate 24 -i image_%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
# 单张图片转视频(循环 10 秒)
ffmpeg -loop 1 -i image.jpg -t 10 -c:v libx264 -pix_fmt yuv420p -r 30 output.mp4
# 图片淡入淡出效果(2秒淡入,2秒淡出)
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# 添加黑色边框(上下左右各 20 像素)
ffmpeg -i input.jpg -vf "pad=w=iw+40:h=ih+40:x=20:y=20:color=black" output.jpg
# 添加白色边框(上下左右各 30 像素)
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
# 画面框移动(向左移动 10 像素,右侧填充黑色)
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# 圆角效果(半径 50 像素)
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# 批量转换为 JPG
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
# 批量调整尺寸(宽度 1920)
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
# 使用 chromakey 去除绿色背景
ffmpeg -i input.jpg -vf "chromakey=0x00FF00:0.1:0.1" -c:v png output.png
# 使用 chromakey 去除蓝色背景
ffmpeg -i input.jpg -vf "chromakey=0x0000FF:0.1:0.1" -c:v png output.png| 参数 | 说明 |
|---|---|
| JPG 高质量 |
| JPG 中等质量 |
| JPG 低质量 |
| PNG 最高压缩 |
| 直接复制流,不重新编码 |
| 滤镜 | 说明 |
|---|---|
| 调整尺寸 |
| 裁剪 |
| 旋转 |
| 翻转 |
| 叠加水印 |
| 添加文字 |
| 黑白 |
| 模糊 |
| 锐化 |
| 调色 |
| HSL 调色 |
| 添加边框 |
| 拼接 |
| 去噪 |
| 强力去噪 |
| 绘制矩形 |
| 绘制圆形 |
| 绘制多边形 |