← 博客

如何使用 FFmpeg 将图片转换为 JPG、PNG、WebP、GIF(2026 年指南)

完整指南:使用 FFmpeg 在 JPG、PNG、WebP 和 GIF 格式之间转换图片,包括批量转换、质量控制,以及免费的一键替代方案。

3 min read

FFmpeg 不只是处理视频的工具——它同样是强大的图片格式转换利器。无论是将 PNG 截图转换为 JPG、将图片优化为 WebP 格式用于网页,还是从图片序列生成 GIF,FFmpeg 都能在命令行中一键搞定。

当然,如果你不喜欢输入命令,文末还有一个免费的一键解决方案


前提条件:安装 FFmpeg

FFmpeg

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

Windows:ffmpeg.org 下载,解压后将 bin 目录添加到系统 PATH。


基础图片格式转换

PNG 转 JPG

ffmpeg -i input.png -q:v 2 output.jpg
  • -q:v 2 — JPEG 质量(1 = 最佳,31 = 最差),推荐使用 2–5。

JPG 转 PNG

ffmpeg -i input.jpg output.png

PNG 是无损格式,无需指定质量参数。

PNG/JPG 转 WebP

ffmpeg -i input.png -quality 80 output.webp
  • -quality 80 — WebP 质量(0–100),75–85 是质量与体积的良好平衡点。

WebP 转 PNG

ffmpeg -i input.webp output.png

WebP 转 JPG

ffmpeg -i input.webp -q:v 2 output.jpg

BMP 转 PNG

ffmpeg -i input.bmp output.png

TIFF 转 JPG

ffmpeg -i input.tiff -q:v 2 output.jpg

处理 GIF

图片序列转 GIF

将一系列图片(frame001.png、frame002.png……)转换为动态 GIF:

ffmpeg -framerate 10 -i frame%03d.png -vf "scale=480:-1:flags=lanczos" output.gif
  • -framerate 10 — 每秒 10 帧
  • frame%03d.png — 匹配 frame001.png、frame002.png 等文件名
  • scale=480:-1 — 宽度缩放至 480px,高度自动适配
  • flags=lanczos — 高质量缩放算法

视频转 GIF

ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -loop 0 output.gif

GIF 转图片序列

提取 GIF 中的每一帧:

ffmpeg -i input.gif frame%03d.png

GIF 转 MP4

GIF 文件体积庞大——转换为 MP4 可缩小 90% 以上:

ffmpeg -i input.gif -movflags +faststart -pix_fmt yuv420p output.mp4

高级选项

控制 JPEG 质量

ffmpeg -i input.png -q:v 5 output.jpg
-q:v质量文件大小
1最佳最大
2–3非常好较大
5良好中等
10可接受较小
31最差最小

控制 WebP 质量

# 有损 WebP
ffmpeg -i input.png -quality 85 output.webp

# 无损 WebP
ffmpeg -i input.png -lossless 1 output.webp

调整图片尺寸

缩放至指定宽度(保持宽高比):

ffmpeg -i input.png -vf "scale=800:-1" output.png

缩放至指定尺寸:

ffmpeg -i input.png -vf "scale=800:600" output.jpg

更改色彩空间

转换为灰度图:

ffmpeg -i input.png -vf "format=gray" output.png

批量转换

批量将 PNG 转换为 JPG

Linux/macOS:

for f in *.png; do
  ffmpeg -i "$f" -q:v 2 "${f%.png}.jpg"
done

批量将 JPG 转换为 WebP

for f in *.jpg; do
  ffmpeg -i "$f" -quality 80 "${f%.jpg}.webp"
done

Windows(PowerShell):

Get-ChildItem *.png | ForEach-Object {
  ffmpeg -i $_.Name -q:v 2 ($_.BaseName + ".jpg")
}

常见错误与解决方法

“输出文件为空白或全黑” 部分格式需要显式指定像素格式:

ffmpeg -i input.png -pix_fmt rgb24 output.jpg

“GIF 输出颜色很差” GIF 仅支持 256 色。使用调色板可提升质量:

ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -lavfi "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

“无法确定格式” 显式指定格式:

ffmpeg -f image2 -i input.bmp output.png

跳过终端:改用 WaveSpeed Desktop

用 FFmpeg 转换单张图片还算可以。但如果要批量转换,同时控制质量、格式和尺寸?那很快就会变得繁琐。

WaveSpeed Desktop 内置了图片转换器,让这一切轻松无比:

  • 拖放一张或多张图片
  • 选择输出格式(JPG、PNG、WebP、GIF)
  • 点击转换——搞定

无需 FFmpeg,无需终端,无需记忆质量参数。

WaveSpeed Desktop 图片转换器

免费下载 WaveSpeed Desktop: https://github.com/WaveSpeedAI/wavespeed-desktop/releases


常见问题

网页端最佳图片格式是什么? WebP 提供最佳的压缩比与画质平衡。在不需要考虑浏览器兼容性时优先使用 WebP。其他情况下,照片使用 JPEG,带透明通道的图形使用 PNG。

将 JPG 转换为 PNG 能提升画质吗? 不能。与音频类似,JPEG 压缩过程中丢失的信息无法还原。转换后的 PNG 文件只会更大,画质并不会提升。

WebP 比 JPEG 小多少? 在相同视觉质量下,通常小 25–35%。

FFmpeg 能处理相机 RAW 文件吗? FFmpeg 对 RAW 格式的支持有限。如需 RAW 转换,建议使用 ImageMagick 或 darktable 等专用工具。