FFMPEG脚本自动调整图片尺寸和质量
当你需要管理大量图片,特别是为了网页使用或存储优化时,批量处理图片可以极大地节省时间。这个脚本利用 ffmpeg
,一个强大的多媒体框架,自动调整目录中图片的尺寸和质量。本教程将指导你如何使用这个脚本。
一、前提条件
- 确保你的系统已安装
ffmpeg
。它支持Windows、macOS和Linux。访问 ffmpeg官网 下载并安装。 - 基本的批处理脚本和命令行操作知识。
二、Windows bat
@echo off
setlocal enabledelayedexpansion
:: 设置默认值
set DEFAULT_MAX_WIDTH=1280
set DEFAULT_MAX_HEIGHT=720
set DEFAULT_QUALITY_SCALE=2
:: 检查参数,若未提供,则使用默认值
if "%~1"=="" (
set MAX_WIDTH=%DEFAULT_MAX_WIDTH%
) else (
set MAX_WIDTH=%1
)
if "%~2"=="" (
set MAX_HEIGHT=%DEFAULT_MAX_HEIGHT%
) else (
set MAX_HEIGHT=%2
)
if "%~3"=="" (
set QUALITY_SCALE=%DEFAULT_QUALITY_SCALE%
) else (
set QUALITY_SCALE=%3
)
:: 创建temp文件夹
if not exist "temp" mkdir temp
:: 对当前目录下的所有图片文件进行处理
for %%f in (*.jpg *.jpeg *.png) do (
echo Processing and possibly overwriting: %%f
:: 适用于大多数图片格式的质量和尺寸调整命令,自动覆盖输出目录中的同名文件
ffmpeg -i "%%f" -vf "scale='min(%MAX_WIDTH%\,iw):-1',scale='trunc(oh*a/2)*2:min(%MAX_HEIGHT%\,ih)'" -qscale:v %QUALITY_SCALE% "temp/%%f" -y
)
echo Done.
使用说明
- 将脚本保存为
.bat
文件,例如resizeImages.bat
。 - 在包含图片的目录中按住
Shift
+鼠标右键
打开终端PowerShell / cmd
。 - 执行脚本,可选地指定最大宽度、最大高度和质量比例值。例如:
resizeImages.bat 1920 1080 2
这个命令将图片尺寸调整为最大宽度1920像素,最大高度1080像素,质量比例为2。
如果未指定参数,直接双击运行该bat,则会使用默认值最大宽度1280,最大高度720,质量比例为2进行
三、Linux / Mac
#!/bin/bash
# 设置默认值
DEFAULT_MAX_WIDTH=1280
DEFAULT_MAX_HEIGHT=720
DEFAULT_QUALITY_SCALE=2
# 检查参数,若未提供,则使用默认值
MAX_WIDTH=${1:-$DEFAULT_MAX_WIDTH}
MAX_HEIGHT=${2:-$DEFAULT_MAX_HEIGHT}
QUALITY_SCALE=${3:-$DEFAULT_QUALITY_SCALE}
# 创建temp文件夹
if [ ! -d "temp" ]; then
mkdir temp
fi
# 处理当前目录下的所有图片
for f in *.jpg *.jpeg *.png; do
echo "Processing and possibly overwriting: $f"
ffmpeg -i "$f" -vf "scale='min($MAX_WIDTH,iw):-1',scale='trunc(oh*a/2)*2:min($MAX_HEIGHT,ih)'" -q:v $QUALITY_SCALE "temp/$f"
done
echo "Done."
使用说明
- 将上述脚本保存为文件,例如
resizeImages.sh
。 - 打开终端,并使用
cd
命令导航到包含图片和脚本的目录。 - 确保脚本具有可执行权限。可以通过在终端执行以下命令来赋予权限:
chmod +x resizeImages.sh
- 使用脚本时,可以指定最大宽度、最大高度和质量比例作为参数。如果不指定,脚本将使用默认值。运行脚本的命令如下:
./resizeImages.sh 1920 1080 2
执行后:
这会将当前目录下所有的 .jpg
、.jpeg
和 .png
文件调整至最大1920像素宽、1080像素高,质量比例为2,并将处理后的图片保存在 temp
文件夹中。
PS:实际上是因为本子尺寸太大,要放在私有网盘中发现加载问题太慢(云服务器带宽鸡肋)所以才....