Masz 500 zrzutów ekranu PNG do konwersji na WebP dla swojej strony. Albo folder eksportów TIFF z Lightrooma, które muszą stać się JPG. FFmpeg jest znany głównie jako narzędzie wideo, ale równie dobrze radzi sobie z obrazami — a ponieważ działa z linii poleceń, jednym poleceniem przetwarza dowolną liczbę plików.
Dlaczego FFmpeg do obrazów?
FFmpeg jest prawdopodobnie już zainstalowany, jeśli pracujesz z wideo. Obsługuje szeroką gamę formatów i naturalnie integruje się ze skryptami shell i pipeline'ami CI. Dla formatów RAW (CR2, NEF, ARW) lepiej użyć darktable lub RawTherapee — wsparcie RAW w FFmpeg jest ograniczone.
Instalacja FFmpeg
# macOS
brew install ffmpeg
# Ubuntu / Debian
sudo apt install ffmpeg
# Windows (Chocolatey)
choco install ffmpegffmpeg -versionPodstawowa struktura polecenia
Każde polecenie masowej konwersji ma tę samą strukturę: pętla shell (Linux/macOS) lub pętla for (Windows). Kluczowa zasada: nigdy nie nadpisuj plików źródłowych — zawsze pisz wyniki do oddzielnego katalogu.
Masowa konwersja PNG do JPG
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -q:v 2 "output/${f%.png}.jpg"
donemkdir output
for %f in (*.png) do ffmpeg -i "%f" -q:v 2 "output/%~nf.jpg"New-Item -ItemType Directory -Force output
Get-ChildItem *.png | ForEach-Object {
ffmpeg -i $_.FullName -q:v 2 "output/$($_.BaseName).jpg"
}| -q:v | Jakość | Typowe zastosowanie |
|---|---|---|
| 1–2 | Niemal bezstratna | Druk, archiwizacja |
| 3–5 | Wysoka jakość | Fotografia web |
| 6–10 | Średnia jakość | Podglądy, miniatury |
| 11+ | Niska jakość | Unikać |
Masowa konwersja JPG do WebP
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -quality 85 "output/${f%.*}.webp"
donemkdir -p output
for f in *.png; do
ffmpeg -i "$f" -lossless 1 "output/${f%.png}.webp"
doneWebP daje pliki typowo o 25–35 % mniejsze niż równoważny JPG. Dla fotografii, zakres 80–85 to optimum. Dla logotypów i grafik z tekstem użyj bezstratnego WebP.
Konwersja do PNG
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" "output/${f%.*}.png"
doneKonwersja mieszanych formatów
mkdir -p output
for f in *.jpg *.jpeg *.png *.webp *.tiff *.bmp; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -q:v 3 "output/${f%.*}.jpg"
doneZmiana rozmiaru i konwersja w jednym przejściu
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 "output/${f%.png}.jpg"
donemkdir -p output
for f in *.jpg; do
ffmpeg -i "$f" -vf "crop='min(iw,ih)':'min(iw,ih)',scale=200:200" \
"output/${f%.jpg}_thumb.jpg"
doneRekurencyjne przetwarzanie podkatalogów
find . -name "*.png" -not -path "./output*" | while read f; do
output="output/${f#./}"
mkdir -p "$(dirname "$output")"
ffmpeg -i "$f" -q:v 3 "${output%.png}.jpg"
donePrzetwarzanie równoległe dla przyspieszenia
mkdir -p output
ls *.png | xargs -P 4 -I {} sh -c 'ffmpeg -i "$1" -q:v 3 "output/${1%.png}.jpg"' _ {}Na maszynie z 8 rdzeniami i dyskiem SSD przetwarzanie równoległe typowo skraca czas konwersji 3–5-krotnie.
Wskaźnik postępu
total=$(ls *.png | wc -l)
count=0
mkdir -p output
for f in *.png; do
count=$((count + 1))
echo "[$count/$total] $f"
ffmpeg -loglevel quiet -i "$f" -q:v 3 "output/${f%.png}.jpg"
doneObsługa błędów
mkdir -p output
error_log="errors.txt"
> "$error_log"
for f in *.jpg *.jpeg *.png *.webp; do
[ -f "$f" ] || continue
if ffmpeg -loglevel error -i "$f" -quality 85 "output/${f%.*}.webp" 2>>"$error_log"; then
echo "✓ $f"
else
echo "✗ $f"
fi
doneSpis poleceń
| Konwersja | Polecenie (Linux/macOS) | Uwagi |
|---|---|---|
| Wszystkie PNG → JPG | for f in *.png | do ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg |
| Wszystkie JPG → WebP | for f in *.jpg | do ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp |
| Wszystkie JPG → PNG | for f in *.jpg | do ffmpeg -i "$f" output/${f%.jpg}.png |
| Wszystkie → WebP bezstratnie | for f in *.png | do ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp |
| Zmiana rozmiaru + konwersja | for f in *.jpg | do ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg |
Kiedy FFmpeg nie jest właściwym narzędziem
Formaty RAW (CR2, NEF, ARW) — ograniczone wsparcie. Użyj darktable lub RawTherapee.
Kodowanie AVIF — możliwe przez -c:v libaom-av1, ale bardzo wolne bez akceleracji sprzętowej. libavif lub Squoosh CLI są szybsze.
Profile kolorów ICC — FFmpeg nie zawsze je zachowuje. Dla pracy krytycznej kolorystycznie ImageMagick jest bardziej niezawodny.
Tylko kilka plików? Narzędzie online jak FastConvert jest szybsze — bez instalacji.
Najczęściej zadawane pytania
Podsumowanie
Masowa konwersja obrazów przez FFmpeg sprowadza się do prostej pętli shell. Zawsze testuj na małej partii przed przetworzeniem całej biblioteki.
Konwertować obrazy bez wiersza poleceń? FastConvert — bezpłatnie, bez rejestracji.
