วิธีเพิ่มคุณภาพวิดีโอด้วย FFmpeg: ขยาย, ลดสัญญาณรบกวน, ป้องกันภาพสั่น

INEZA Felin-Michel

INEZA Felin-Michel

10 April 2026

วิธีเพิ่มคุณภาพวิดีโอด้วย FFmpeg: ขยาย, ลดสัญญาณรบกวน, ป้องกันภาพสั่น

Apidog สำหรับองค์กร

ติดตั้งภายในองค์กร

SSO & RBAC

รองรับ SOC 2

สำรวจ Apidog Enterprise

สรุปสั้นๆ (TL;DR)

FFmpeg อัปสเกลวิดีโอด้วย -vf "scale=1920:1080:flags=lanczos" — Lanczos เป็นอัลกอริทึมการปรับขนาดที่ดีที่สุดสำหรับการอัปสเกล สำหรับการลดสัญญาณรบกวน (denoising) hqdn3d ช่วยลดเกรนในขณะที่ยังคงรักษารายละเอียดขอบไว้ สำหรับการทำให้ภาพนิ่ง (stabilization) vidstab จัดการกับการสั่นของกล้องผ่านกระบวนการสองขั้นตอน สามารถรวมทั้งสามเข้าด้วยกันในชุดฟิลเตอร์เดียวสำหรับกระบวนการเพิ่มคุณภาพ

บทนำ

การเพิ่มคุณภาพวิดีโอด้วย FFmpeg เป็นมากกว่าการเปลี่ยนความละเอียด การปรับปรุงคุณภาพอย่างแท้จริงคือการรวมการอัปสเกลความละเอียดเข้ากับการลดสัญญาณรบกวนอย่างชาญฉลาด และการทำให้ภาพนิ่ง (ถ้ามี) แต่ละขั้นตอนจะแก้ไขปัญหาคุณภาพที่แตกต่างกัน: ฟุตเทจที่เบลอหรือเป็นพิกเซล, เฟรมที่เป็นเกรนหรือมีสัญญาณรบกวน และการเคลื่อนไหวของกล้องที่สั่นไหว

คู่มือนี้จะครอบคลุมแต่ละเทคนิคอย่างอิสระและแสดงวิธีการรวมเข้าด้วยกัน

ปุ่ม

อัลกอริทึมการปรับขนาด (Scaling algorithms)

อัลกอริทึมการปรับขนาดเป็นตัวกำหนดว่า FFmpeg จะเติมพิกเซลใหม่เมื่อทำการอัปสเกลอย่างไร การเลือกอัลกอริทึมมีผลกระทบที่เห็นได้ชัดต่อคุณภาพของผลลัพธ์

อัลกอริทึม ความเร็ว คุณภาพ ดีที่สุดสำหรับ
neighbor เร็วที่สุด ต่ำที่สุด ภาพพิกเซลอาร์ต
bilinear เร็ว ต่ำ งานที่เน้นความเร็วเป็นหลัก
bicubic ปานกลาง ดี การดาวน์สเกลทั่วไป
lanczos ช้ากว่า ดีที่สุด การอัปสเกล

อัปสเกลเป็น 1080p ด้วย Lanczos:

ffmpeg -i input_720p.mp4 -vf "scale=1920:1080:flags=lanczos" -c:v libx264 -crf 20 output_1080p.mp4

รักษาสัดส่วนภาพ:

ffmpeg -i input.mp4 -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 output.mp4

-2 จะคำนวณความสูงโดยอัตโนมัติในขณะที่รักษาสัดส่วนภาพ และทำให้แน่ใจว่าผลลัพธ์นั้นหารด้วย 2 ลงตัว

ปรับขนาดเป็น 4K:

ffmpeg -i input.mp4 -vf "scale=3840:-2:flags=lanczos" -c:v libx264 -crf 18 -preset slow output_4k.mp4

-preset slow บอก x264 ให้ใช้เวลามากขึ้นในการปรับปรุงการบีบอัด ซึ่งสำคัญกว่าสำหรับความละเอียดที่สูงขึ้น

การลดสัญญาณรบกวนด้วย hqdn3d (Denoising with hqdn3d)

ฟิลเตอร์ hqdn3d คือการลดสัญญาณรบกวน 3D คุณภาพสูง ช่วยขจัดเกรนและสัญญาณรบกวนในขณะที่ยังคงรักษารายละเอียดขอบไว้

ffmpeg -i noisy_video.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4

พารามิเตอร์ทั้งสี่: luma_spatial:chroma_spatial:luma_temporal:chroma_temporal

การลดสัญญาณรบกวนที่แรงขึ้น:

ffmpeg -i grainy.mp4 -vf "hqdn3d=10:8:15:10" -c:v libx264 -crf 20 clean.mp4

ค่าที่สูงขึ้นจะกำจัดสัญญาณรบกวนได้มากขึ้น แต่อาจทำให้รายละเอียดที่ละเอียดเบลอได้ ทดสอบด้วยการตั้งค่าที่แตกต่างกันก่อนประมวลผลวิดีโอฉบับเต็ม

การลดสัญญาณรบกวนแบบเบา (คงรายละเอียด):

ffmpeg -i video.mp4 -vf "hqdn3d=2:1.5:3:2.5" -c:v libx264 -crf 20 output.mp4

การทำให้ภาพนิ่งด้วย vidstab (Stabilization with vidstab)

ฟิลเตอร์ vidstab ต้องใช้วิธีการสองขั้นตอน: ขั้นแรกวิเคราะห์การเคลื่อนไหว จากนั้นจึงใช้การทำให้ภาพนิ่ง

การติดตั้ง: การสนับสนุน vidstab ขึ้นอยู่กับการสร้าง FFmpeg ของคุณ ตรวจสอบด้วย ffmpeg -filters | grep vidstab บน macOS: brew install ffmpeg จะรวมอยู่ด้วย

ขั้นตอนที่ 1: วิเคราะห์การเคลื่อนไหว

ffmpeg -i shaky_video.mp4 -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform.trf" -f null -

shakiness=8 (1-10): ระดับการสั่นของกล้องที่คาดหวัง accuracy=9 (1-15): ความแม่นยำในการตรวจจับ -f null - ทิ้งผลลัพธ์ เราต้องการเพียงไฟล์ .trf

ขั้นตอนที่ 2: ใช้การทำให้ภาพนิ่ง

ffmpeg -i shaky_video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=1:smoothing=10" -c:v libx264 -crf 20 stabilized.mp4

zoom=1 เพิ่มการซูม 1% เพื่อชดเชยการตัดขอบที่เกิดจากการทำให้ภาพนิ่ง เพิ่มค่าถ้ามีขอบสีดำปรากฏขึ้น smoothing=10 ควบคุมความเรียบของเส้นทางกล้อง (ค่าสูงขึ้น = เรียบขึ้น)

การทำให้ภาพนิ่งที่รุนแรงขึ้น:

ffmpeg -i video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=3:smoothing=30:optzoom=1" -c:v libx264 -crf 20 stable.mp4

optzoom=1 จะปรับการซูมโดยอัตโนมัติเพื่อหลีกเลี่ยงขอบ

การรวมกระบวนการเพิ่มคุณภาพ (Combined quality enhancement pipeline)

เรียกใช้การดำเนินการทั้งสามพร้อมกันในชุดฟิลเตอร์เดียว:

ffmpeg -i source.mp4 \
  -vf "hqdn3d=4:3:6:4.5,scale=1920:-2:flags=lanczos,vidstabtransform=input=transform.trf:zoom=1:smoothing=10" \
  -c:v libx264 -crf 18 -preset slow \
  -c:a copy \
  enhanced.mp4

ใช้ลำดับนี้: ลดสัญญาณรบกวนก่อน (กำจัดสิ่งประดิษฐ์ที่อาจส่งผลต่อการปรับขนาด) จากนั้นปรับขนาด แล้วทำให้ภาพนิ่ง วิธีนี้จะหลีกเลี่ยงการปรับขนาดสัญญาณรบกวนให้มีความละเอียดสูงขึ้น

หมายเหตุ: รันขั้นตอน vidstabdetect ก่อนที่จะใช้กระบวนการรวมนี้

ฟิลเตอร์ปรับความคมชัด (Sharpening filter)

หากฟุตเทจดูนุ่มนวลมากกว่าเป็นสัญญาณรบกวน การปรับความคมชัดสามารถช่วยได้:

ffmpeg -i video.mp4 -vf "unsharp=5:5:1.5:5:5:0.5" -c:v libx264 -crf 20 sharpened.mp4

พารามิเตอร์: lx:ly:la:cx:cy:ca (ขนาดและปริมาณของ luma/chroma)
lx:ly — ขนาดเมทริกซ์ luma (พิกเซล)
la — ปริมาณ luma (ค่าบวก = เพิ่มความคมชัด, ค่าลบ = เบลอ)
cx:cy:ca — ค่าเทียบเท่าของ chroma

สำหรับการปรับความคมชัดแบบเบา: unsharp=3:3:0.5:3:3:0.0
สำหรับการปรับความคมชัดแบบแรง: unsharp=5:5:2.5:5:5:0.0

ข้อควรพิจารณาด้านประสิทธิภาพ (Performance considerations)

การดำเนินการปรับปรุงคุณภาพต้องใช้การประมวลผลสูง ประมาณการเวลาประมวลผลสำหรับวิดีโอ 1080p ความยาว 10 นาที:

ใช้ -preset เพื่อปรับสมดุลระหว่างความเร็วในการเข้ารหัสกับขนาดไฟล์:

สำหรับการประมวลผลแบบแบตช์ ให้รันหลายไฟล์พร้อมกันหรือใช้ parallel:

ls *.mp4 | parallel ffmpeg -i {} -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 enhanced_{/}

การเชื่อมต่อกับ API การอัปสเกลวิดีโอด้วย AI

สำหรับการอัปสเกลด้วย AI (ซึ่งให้ผลลัพธ์ที่ดีกว่าฟิลเตอร์ของ FFmpeg สำหรับฟุตเทจคุณภาพต่ำหรือเสียหาย) มี API เฉพาะอยู่ควบคู่ไปกับเครื่องมือของ FFmpeg

WaveSpeedAI นำเสนอโมเดลการอัปสเกล AI ที่ใช้ neural upscaling แทนฟิลเตอร์อัลกอริทึม:

POST https://api.wavespeed.ai/api/v2/wavespeed-ai/video-enhance
Authorization: Bearer {{WAVESPEED_API_KEY}}
Content-Type: application/json

{
  "video_url": "https://storage.example.com/source-video.mp4",
  "scale": 2,
  "enhance": true
}

ทดสอบสิ่งนี้ด้วย Apidog ก่อนการรวมระบบ:

เพิ่มการยืนยัน:

Status code is 200
Response body has field id

สอบถามสถานะของ endpoint เพื่อดูความสมบูรณ์ จากนั้นเปรียบเทียบผลลัพธ์ที่อัปสเกลด้วย AI กับผลลัพธ์ Lanczos ของ FFmpeg การอัปสเกลด้วย AI จัดการกับพื้นผิวและรายละเอียดปลีกย่อยได้ดีกว่าวิธีอัลกอริทึม FFmpeg นั้นเร็วกว่าและฟรี

ใช้ FFmpeg สำหรับงานคุณภาพมาตรฐาน และการอัปสเกลวิดีโอด้วย AI แบบ API สำหรับฟุตเทจที่คุณภาพมีความสำคัญสูงสุด

คำถามที่พบบ่อย (FAQ)

Lanczos ดีกว่า bicubic ทุกกรณีหรือไม่?
สำหรับการอัปสเกล ใช่ สำหรับการดาวน์สเกล bicubic มักจะเร็วกว่าและมีคุณภาพใกล้เคียงกัน Lanczos ใช้การคำนวณที่ซับซ้อนกว่า

vidstab ใช้กับวิดีโอที่ถ่ายจากโทรศัพท์ได้หรือไม่?
ได้ วิดีโอที่ถ่ายจากโทรศัพท์มักจะได้รับประโยชน์สูงสุดจากการทำให้ภาพนิ่ง พารามิเตอร์ shakiness ควรกำหนดให้สูง (8-10) สำหรับวิดีโอที่ถ่ายด้วยมือถือ

ต้องซูมเท่าไรเพื่อซ่อนขอบที่เกิดจากการทำให้ภาพนิ่ง?
โดยทั่วไป 3-8% ขึ้นอยู่กับว่าต้นฉบับสั่นไหวแค่ไหน ตั้งค่า optzoom=1 เพื่อให้ FFmpeg คำนวณให้โดยอัตโนมัติ

FFmpeg สามารถปรับปรุงฟุตเทจประวัติศาสตร์ความละเอียดต่ำได้หรือไม่?
ฟิลเตอร์ของ FFmpeg ช่วยได้แต่มีข้อจำกัด เครื่องมืออัปสเกลที่ใช้ AI (เช่น ESRGAN หรือ API ปรับปรุงวิดีโอเฉพาะทาง) ให้ผลลัพธ์ที่ดีกว่ามากสำหรับฟุตเทจที่เสื่อมสภาพอย่างรุนแรง

การลดสัญญาณรบกวนทำให้การเล่นช้าลงหรือไม่?
ไม่ การลดสัญญาณรบกวนเป็นขั้นตอนการประมวลผลระหว่างการแปลง ไม่ใช่เอฟเฟกต์แบบเรียลไทม์ วิดีโอที่ได้จะเล่นได้ตามปกติ

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API