引言
FFmpeg 是一个功能强大的多媒体处理工具,广泛应用于音视频处理领域。然而,它的图片处理能力同样不容忽视。本文将深入探讨 FFmpeg 在图片处理方面的高级技巧和优化方法,帮助您更高效地完成图片处理任务。
一、图片格式转换
1.1 基础转换
1.1.1 JPG 转 PNG
ffmpeg -i input.jpg output.png
1.1.2 PNG 转 JPG
ffmpeg -i input.png output.jpg
1.1.3 BMP 转 WEBP
ffmpeg -i input.bmp output.webp
1.2 批量转换
1.2.1 批量转换 JPG 到 PNG
# 创建一个 Bash 脚本
#!/bin/bash
for file in *.jpg; doffmpeg -i "$file" "${file%.jpg}.png"
done
1.2.2 批量转换 PNG 到 JPG
# 创建一个 Bash 脚本
#!/bin/bash
for file in *.png; doffmpeg -i "$file" "${file%.png}.jpg"
done
二、调整图片质量
2.1 基础转换
2.1.1 设置 JPG 质量
ffmpeg -i input.png -q:v 2 output.jpg
- -q:v 参数用于设置 质量等级,范围是 1(最差)到 31(最好)。
2.1.2 设置 PNG 压缩级别
ffmpeg -i input.jpg -compression_level 9 output.png
- -compression_level 参数用于设置 PNG 压缩级别,范围是 0(最快)到 9(最慢),默认值是 6。
三、图片合成和修改
3.1 添加水印
3.1.1 文字水印
ffmpeg -i input.jpg -vf "drawtext=fontfile=font.ttf: text='Watermark': x=50: y=50: fontcolor=white: fontsize=24" output.jpg
fontfile=font.ttf
: 指定字体文件的位置,font.ttf
是字体文件的名字,需要确保ffmpeg
能够访问到这个文件。text='Watermark'
: 设置要在图片上显示的文本内容,这里是 “Watermark”。x=50: y=50
: 设置文本在图片上的位置,x
和y
分别表示从图片左上角开始的水平和垂直偏移量,单位是像素。fontcolor=white
: 设置文本的颜色,这里是白色。fontsize=24
: 设置文本的字体大小,这里是 24 像素。
3.1.2 图片水印
ffmpeg -i input.jpg -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.jpg
- overlay:叠加滤镜
- W-w-10 和 H-h-10:水印位置,分别表示距离右侧和底部 10 像素
3.2 裁剪和缩放
3.2.1 裁剪图片
ffmpeg -i input.jpg -vf "crop=640:320:0:0" output.jpg
- crop:裁剪滤镜
- 640:320:0:0:裁剪区域的宽度、高度、左上角 x 坐标和 y 坐标
3.2.2 缩放图片
ffmpeg -i input.jpg -vf "scale=640:320" output.jpg
- scale:缩放滤镜
- 64:320:目标宽度和高度
3.3.3 缩放缩放
ffmpeg -i input.jpg -vf "scale=192:-1" output.jpg
ffmpeg -i input.jpg -vf "scale=-1:108" output.jpg
ffmpeg -i input.jpg -vf "scale=-192:108" output.jpg
- scale=192:-1:固定宽度为 192 像素,高度自动计算以保持宽高比。
- scale=-1:108:固定高度为 108 像素,宽度自动计算以保持宽高比。
- scale=-192:108:固定宽度为 192 像素,高度为 108 像素(负值会被视为正值)。
3.3.4 旋转图片
ffmpeg -i input.jpg -vf "transpose=1" output.jpg
- transpose=0:垂直翻转
- transpose=1:顺时针旋转 90 度
- transpose=2:逆时针旋转 90 度
- transpose=3:水平翻转
3.3 合并多张图片
3.3.1 水平拼接
ffmpeg -i 001.jpg -i 002.jpg -filter_complex hstack output.jpg
- -filter_complex hstack:将两张图片水平堆叠在一起。
3.3.2 垂直拼接
ffmpeg -i 001.jpg -i 002.jpg -filter_complex vstack output.jpg
- -filter_complex vstack:将两张图片水平堆叠在一起。
3.3.3 N张图片水平拼接
ffmpeg -i 001.jpg -i 002.jpg -i 003.jpg -filter_complex "[0:v][1:v][2:v]hstack=inputs=3" output.jpg
- -filter_complex "[0:v][1:v][2:v]hstack=inputs=3":将三张图片水平堆叠在一起。
- [0:v]:指代第一个输入文件的视频流(即 001.jpg)。
- [1:v]:指代第二个输入文件的视频流(即 002.jpg)。
- [2:v]:指代第三个输入文件的视频流(即 003.jpg)。
- hstack=inputs=3:水平堆叠滤镜,将三个图像并排显示。
- inputs=3:指定输入的数量为 3。
3.3.4 N张图片垂直拼接
ffmpeg -i 001.jpg -i 002.jpg -i 003.jpg -filter_complex "[0:v][1:v][2:v]vstack=inputs=3" output.jpg
- -filter_complex "[0:v][1:v][2:v]hstack=inputs=3":将三张图片垂直堆叠在一起。
- [0:v]:指代第一个输入文件的视频流(即 001.jpg)。
- [1:v]:指代第二个输入文件的视频流(即 002.jpg)。
- [2:v]:指代第三个输入文件的视频流(即 003.jpg)。
- hstack=inputs=3:垂直堆叠滤镜,将三个图像并排显示。
- inputs=3:指定输入的数量为 3。
总结
通过本文,我们详细介绍了如何使用 FFmpeg 进行图片格式转换、编辑、合成。FFmpeg 的强大功能和灵活性使其成为处理多媒体数据的理想工具。希望这些知识能帮助你在图片处理方面更加得心应手。如果你有任何疑问或想要了解更多进阶技巧,欢迎留言交流!