Skip to content

Batch Resize Images on Windows

Batch resize images on Windows with FFmpeg scale loops, consistent max-width rules, and GetCompress folder presets. Scale dozens of PNG and JPEG files locally.

By Petr Samokhin

The sprint handoff folder holds 48 PNG mockups at 2880 px wide. Opening each file in Paint to set the same width takes an hour you do not have. Batch resize images once with a fixed max edge, then compress or convert in a second pass if needed.

When batch resize pays off

Single-file tools break down when filenames differ but display requirements do not.

SignalBatch approach
Same max width for every heroOne FFmpeg loop or preset
Mixed PNG and JPEG in one folderSeparate commands or unified app
Weekly design exportsFolder monitoring plus saved preset
One-off screenshotPhotos is enough

Batch resize changes pixel dimensions only. It does not replace thoughtful format choice. See how to compress images on Windows for JPEG vs PNG vs WebP after scaling.

Organize source folders

Copy sources into an originals subfolder before batch work. Never overwrite masters when a client asks for a larger revision next week.

  1. Create originals\ and out\ beside your working folder.
  2. Move or copy files to process into originals\.
  3. Run batch commands writing only to out\.
  4. Spot-check three files: one photo, one UI screenshot, one image with text.

Remove Thumbs.db and stray files from the batch directory when commands use wildcards. Quote paths that contain spaces in PowerShell.

Document the target width in README or ticket comments so QA knows what to expect in the handoff zip.

Sort files by orientation when your preset uses different max edges for portrait social assets vs landscape heroes. Two quick subfolders (portrait\ and landscape\) prevent accidental stretching when batch commands assume one max width for the entire set.

Batch resize with FFmpeg

Install FFmpeg with winget, then scale every JPEG in originals:

winget install --id Gyan.FFmpeg -e
cd originals
mkdir ..\out
Get-ChildItem *.jpg | ForEach-Object {
  ffmpeg -i $_.Name -vf scale=1920:-2 "..\out\$($_.Name)"
}

Batch PNG the same way:

Get-ChildItem *.png | ForEach-Object {
  ffmpeg -i $_.Name -vf scale=1920:-2 "..\out\$($_.Name)"
}

FFmpeg is flexible but command-heavy. It does not preview results or remember presets without scripts.

For pixel-width fundamentals, see resize image pixels on Windows .

Consistent width across formats

Use one max edge (for example 1920 px) for heroes unless the CMS documents different sizes per template.

Asset typeWidth hint
Blog hero1920 px max edge
Inline figure1200 to 1600 px
Email banner600 to 800 px
Icon stripMatch design spec exactly

After batch resize, run lossless PNG pass with oxipng or convert heroes to WebP. PNG to WebP on Windows covers web delivery after dimensions are correct.

Read lossy vs lossless compression when you choose whether batch output stays PNG or moves to JPEG.

Online batch resize services receive every file you upload. For NDA mockups and unreleased campaigns, keep the folder on disk. See are online file compressors safe on Windows for what upload actually means.

Quality after resize

Re-encode JPEG with quality control after scale:

Get-ChildItem ..\out\*.jpg | ForEach-Object {
  ffmpeg -i $_.FullName -q:v 3 "..\out\$($_.BaseName)-opt.jpg"
}

Avoid re-saving the same JPEG at lower quality repeatedly. Export once from resized sources.

Compare total folder size before and after in File Explorer properties. A 60% drop is common when sources were 3x display width.

Log the FFmpeg scale filter you used in the ticket or commit message. Future you will forget whether the sprint used 1920 px or 1600 px unless the number is written down somewhere searchable.

Using GetCompress

GetCompress handles mixed image folders on Windows without upload. Useful when handoff directories contain PNG, JPEG, and WebP every sprint.

  • Drop the whole folder and set max width, output format, and quality in one panel.
  • Save presets (for example “handoff 1920px JPEG”) instead of maintaining PowerShell scripts per project.
  • Preview edge cases before you batch fifty UI screenshots.
  • Batch resize images on Windows and convert format in the same job when the CMS expects WebP.
  • Enable folder monitoring to resize new exports automatically when design tools write to a shared directory.

GetCompress does not replace FFmpeg in a minimal CI script. It pays off when non-developers run the same resize every week without touching the command line. Pair with batch compress and convert on Windows when the handoff also needs format changes.

Spot-check one portrait and one landscape file after the first batch run before you send the zip to stakeholders.

When filenames include @2x or @3x suffixes from design tools, strip or normalize names in the output folder so CMS imports do not create duplicate media entries with confusing titles.

Buy GetCompress now for local media compression with reusable presets and no media upload.