คุณมีภาพ PNG 500 ภาพที่ต้องแปลงเป็น WebP สำหรับเว็บไซต์ FFmpeg เป็นที่รู้จักในฐานะเครื่องมือวิดีโอ แต่จัดการภาพได้ดีเช่นกัน
ทำไมต้องใช้ FFmpeg สำหรับภาพ?
FFmpeg น่าจะติดตั้งอยู่แล้วถ้าคุณทำงานกับวิดีโอ สำหรับ RAW (CR2, NEF, ARW) ใช้ darktable หรือ RawTherapee
ติดตั้ง FFmpeg
# macOS
brew install ffmpeg
# Ubuntu / Debian
sudo apt install ffmpeg
# Windows (Chocolatey)
choco install ffmpegffmpeg -versionโครงสร้างพื้นฐาน
ทุกคำสั่งแปลงแบบกลุ่มมีโครงสร้างเดียวกัน: shell loop (Linux/macOS) หรือ for loop (Windows) เขียนผลลัพธ์ไปยังโฟลเดอร์แยกเสมอ
แปลง PNG ทั้งหมดเป็น 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 | คุณภาพ | การใช้งานทั่วไป |
|---|---|---|
| 1-2 | เกือบไม่มีการสูญเสีย | พิมพ์ เก็บถาวร |
| 3-5 | คุณภาพสูง | ถ่ายภาพเว็บ |
| 6-10 | คุณภาพปานกลาง | ตัวอย่างภาพ |
| 11+ | คุณภาพต่ำ | หลีกเลี่ยง |
แปลง JPG ทั้งหมดเป็น 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 ให้ไฟล์เล็กกว่า JPG ที่เทียบเท่า 25–35% โดยทั่วไป สำหรับภาพถ่าย 80–85 เป็นช่วงที่เหมาะสม
แปลงเป็น PNG
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" "output/${f%.*}.png"
doneแปลงรูปแบบผสม
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"
doneเปลี่ยนขนาดและแปลงในขั้นตอนเดียว
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"
doneประมวลผลโฟลเดอร์ย่อยแบบวนซ้ำ
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"
doneการประมวลผลแบบขนานเพื่อความเร็ว
mkdir -p output
ls *.png | xargs -P 4 -I {} sh -c 'ffmpeg -i "$1" -q:v 3 "output/${1%.png}.jpg"' _ {}บนเครื่อง 8 คอร์พร้อม SSD การประมวลผลแบบขนานมักลดเวลาแปลง 3–5 เท่า
ตัวบ่งชี้ความคืบหน้า
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"
doneการจัดการข้อผิดพลาด
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
doneอ้างอิงคำสั่ง
| การแปลง | คำสั่ง (Linux/macOS) | หมายเหตุ |
|---|---|---|
| PNG ทั้งหมด → JPG | for f in *.png | do ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg |
| JPG ทั้งหมด → WebP | for f in *.jpg | do ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp |
| JPG ทั้งหมด → PNG | for f in *.jpg | do ffmpeg -i "$f" output/${f%.jpg}.png |
| ทั้งหมด → WebP ไม่มีการสูญเสีย | for f in *.png | do ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp |
| เปลี่ยนขนาด + แปลง | for f in *.jpg | do ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg |
เมื่อ FFmpeg ไม่ใช่เครื่องมือที่เหมาะสม
รูปแบบ RAW ของกล้อง — รองรับจำกัด ใช้ darktable หรือ RawTherapee
การเข้ารหัส AVIF — ทำได้แต่ช้ามากหากไม่มีการเร่งด้วยฮาร์ดแวร์
แค่ไม่กี่ไฟล์? FastConvert เร็วกว่า — ไม่ต้องติดตั้ง
คำถามที่พบบ่อย
สรุป
การแปลงภาพจำนวนมากด้วย FFmpeg ขึ้นอยู่กับ shell loop ง่ายๆ ทดสอบกับ batch เล็กๆ เสมอก่อนประมวลผลไลบรารีทั้งหมด
ต้องการแปลงภาพโดยไม่ใช้บรรทัดคำสั่ง? FastConvert — ฟรี ไม่ต้องลงทะเบียน
