สรุปสั้นๆ (TL;DR)
FFmpeg อัปสเกลวิดีโอด้วย -vf "scale=1920:1080:flags=lanczos" — Lanczos เป็นอัลกอริทึมการปรับขนาดที่เหมาะสำหรับการอัปสเกล สำหรับการลดสัญญาณรบกวน (denoising) ใช้ hqdn3d เพื่อลดเกรนโดยไม่เสียรายละเอียดขอบ สำหรับการทำให้ภาพนิ่ง (stabilization) ใช้ vidstab จัดการกับการสั่นของกล้องผ่านกระบวนการสองขั้นตอน สามารถรวมทั้งสามขั้นตอนในคำสั่งเดียวเพื่อเพิ่มคุณภาพวิดีโอ
บทนำ
การเพิ่มคุณภาพวิดีโอด้วย FFmpeg ไม่ใช่แค่การเปลี่ยนความละเอียด แต่ควรผสานการอัปสเกล, ลดสัญญาณรบกวน และทำให้ภาพนิ่ง (ถ้าจำเป็น) แต่ละขั้นตอนช่วยแก้ปัญหา: ภาพเบลอ/เป็นพิกเซล, เฟรมที่มีเกรน, และการสั่นของกล้อง
บทความนี้แนะนำเทคนิคแต่ละแบบและวิธีใช้งานร่วมกัน
อัลกอริทึมการปรับขนาด (Scaling algorithms)
อัลกอริทึมการปรับขนาดมีผลอย่างมากต่อคุณภาพของวิดีโอหลังอัปสเกล เลือกอัลกอริทึมที่เหมาะสมตามงาน:
| อัลกอริทึม | ความเร็ว | คุณภาพ | เหมาะกับงาน |
|---|---|---|---|
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 ช่วยขจัดเกรน/สัญญาณรบกวนและรักษาขอบคม
ffmpeg -i noisy_video.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4
อธิบาย parameter:
hqdn3d=luma_spatial:chroma_spatial:luma_temporal:chroma_temporal
-
luma_spatial(0-16): ลดนอยส์ช่องความสว่าง (default 4) -
chroma_spatial(0-16): ลดนอยส์ช่องสี (default 3) -
luma_temporal(0-16): ลดนอยส์ temporal ช่องความสว่าง (default 6) -
chroma_temporal(0-16): ลดนอยส์ temporal ช่องสี (default 4.5)
ลดสัญญาณรบกวนแรงขึ้น:
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 ต้องประมวลผล 2 รอบ: วิเคราะห์การเคลื่อนไหว → ทำให้ภาพนิ่ง
ตรวจสอบว่า FFmpeg รองรับ vidstab:
ffmpeg -filters | grep vidstab
macOS: ติดตั้งผ่าน brew install ffmpeg จะมี vidstab
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): ความแม่นยำ - ผลลัพธ์ไฟล์
.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: ซูมชดเชยขอบดำ -
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)
ถ้าภาพดูนุ่มหลังลดนอยส์ ใช้ฟิลเตอร์ unsharp:
ffmpeg -i video.mp4 -vf "unsharp=5:5:1.5:5:5:0.5" -c:v libx264 -crf 20 sharpened.mp4
parameter: lx:ly:la:cx:cy:ca
-
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 นาที:
- ปรับขนาดอย่างเดียว: 2-5 นาที
- ปรับขนาด + hqdn3d: 5-10 นาที
- ปรับขนาด + hqdn3d + vidstab: 15-25 นาที
ปรับสมดุลความเร็ว/ขนาดไฟล์ด้วย -preset:
-
ultrafast— เร็ว, ไฟล์ใหญ่ -
fast— ปานกลาง -
slow— ช้า, ไฟล์เล็ก -
veryslow— ช้ามาก ไม่คุ้มเวลา
ประมวลผลหลายไฟล์พร้อมกันด้วย parallel:
ls *.mp4 | parallel ffmpeg -i {} -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 enhanced_{/}
การเชื่อมต่อกับ API การอัปสเกลวิดีโอด้วย AI
สำหรับการอัปสเกลวิดีโอด้วย AI (คุณภาพสูงกว่า filter 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
}
ทดสอบ endpoint นี้ด้วย Apidog ก่อนเชื่อมต่อจริง:
เพิ่ม assertions:
Status code is 200
Response body has field id
สอบถามสถานะ endpoint ตรวจสอบความสมบูรณ์
เปรียบเทียบผลอัปสเกล AI กับ Lanczos จาก FFmpeg
AI จัดการรายละเอียดผิวและ texture ได้ดีกว่า FFmpeg
แต่ FFmpeg เร็วกว่าและฟรี
สรุป:
ใช้ FFmpeg สำหรับงานมาตรฐาน
ใช้ API/AI สำหรับวิดีโอที่ต้องการคุณภาพสูงสุด
คำถามที่พบบ่อย (FAQ)
Lanczos ดีกว่า bicubic เสมอหรือไม่?
- สำหรับอัปสเกล: ใช่
- สำหรับดาวน์สเกล: bicubic เร็วและคุณภาพใกล้เคียงกัน
vidstab ใช้กับวิดีโอโทรศัพท์มือถือได้ไหม?
- ได้ แนะนำตั้งค่า
shakinessสูง (8-10) สำหรับวิดีโอมือถือ
ต้องซูมเท่าไรเพื่อซ่อนขอบที่เกิดจากการทำให้ภาพนิ่ง?
- โดยทั่วไป 3-8% หรือใช้
optzoom=1ให้ FFmpeg คำนวณให้
FFmpeg ปรับปรุงฟุตเทจประวัติศาสตร์ความละเอียดต่ำได้ไหม?
- ฟิลเตอร์ FFmpeg ช่วยได้แต่จำกัด
- AI (เช่น ESRGAN หรือ API เฉพาะ) ผลลัพธ์ดีกว่าสำหรับวิดีโอเสื่อมสภาพ
การลดสัญญาณรบกวนทำให้การเล่นช้าลงหรือไม่?
- ไม่ เป็นขั้นตอนประมวลผลก่อน export วิดีโอที่ได้เล่นได้ตามปกติ
Top comments (0)