Tóm tắt
FFmpeg nâng cấp độ phân giải video bằng lệnh -vf "scale=1920:1080:flags=lanczos". Lanczos là thuật toán mở rộng chất lượng cao nhất để upscale. Bộ lọc hqdn3d giúp khử nhiễu mà vẫn bảo toàn cạnh sắc nét. Ổn định video sử dụng vidstab với quy trình hai bước. Có thể kết hợp cả ba bộ lọc trong một chuỗi để cải thiện chất lượng video.
Giới thiệu
Nâng cao chất lượng video với FFmpeg không chỉ là thay đổi độ phân giải. Quy trình thực tế gồm nâng cấp độ phân giải, khử nhiễu và ổn định video (tuỳ chọn). Mỗi bước xử lý vấn đề chất lượng khác nhau: làm nét cảnh mờ/vỡ điểm ảnh, giảm nhiễu hạt/ồn, và ổn định chuyển động rung lắc.
Bài viết hướng dẫn từng kỹ thuật riêng lẻ và cách kết hợp chúng thành quy trình tự động.
Thuật toán mở rộng
Thuật toán mở rộng quyết định cách FFmpeg tạo điểm ảnh mới khi upscale. Lựa chọn thuật toán ảnh hưởng rõ đến chất lượng:
| Thuật toán | Tốc độ | Chất lượng | Ứng dụng tốt nhất |
|---|---|---|---|
neighbor |
Nhanh nhất | Thấp nhất | Nghệ thuật pixel |
bilinear |
Nhanh | Thấp | Ưu tiên tốc độ |
bicubic |
Trung bình | Tốt | Giảm kích thước chung |
lanczos |
Chậm hơn | Tốt nhất | Nâng cấp độ phân giải |
Nâng cấp lên 1080p sử dụng Lanczos:
ffmpeg -i input_720p.mp4 -vf "scale=1920:1080:flags=lanczos" -c:v libx264 -crf 20 output_1080p.mp4
Giữ nguyên tỷ lệ khung hình:
ffmpeg -i input.mp4 -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 output.mp4
-2 giúp FFmpeg tự động tính chiều cao phù hợp, vẫn giữ đúng tỉ lệ và đảm bảo giá trị chẵn.
Mở rộng lên 4K:
ffmpeg -i input.mp4 -vf "scale=3840:-2:flags=lanczos" -c:v libx264 -crf 18 -preset slow output_4k.mp4
-preset slow cho x264 tối ưu hóa nén tốt hơn, đặc biệt quan trọng với độ phân giải cao.
Khử nhiễu với hqdn3d
Bộ lọc hqdn3d giúp khử nhiễu (noise reduction) mà vẫn giữ chi tiết cạnh.
Ví dụ khử nhiễu tiêu chuẩn:
ffmpeg -i noisy_video.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4
Thứ tự tham số: luma_spatial:chroma_spatial:luma_temporal:chroma_temporal
-
luma_spatial(0–16): mức khử nhiễu không gian kênh sáng (mặc định 4) -
chroma_spatial(0–16): kênh màu (mặc định 3) -
luma_temporal(0–16): làm mịn theo thời gian kênh sáng (mặc định 6) -
chroma_temporal(0–16): làm mịn theo thời gian kênh màu (mặc định 4.5)
Khử nhiễu mạnh:
ffmpeg -i grainy.mp4 -vf "hqdn3d=10:8:15:10" -c:v libx264 -crf 20 clean.mp4
Giá trị cao loại bỏ nhiều noise hơn nhưng có thể làm mờ chi tiết nhỏ.
Khử nhiễu nhẹ (giữ chi tiết):
ffmpeg -i video.mp4 -vf "hqdn3d=2:1.5:3:2.5" -c:v libx264 -crf 20 output.mp4
Thử nghiệm với tham số khác nhau để chọn mức phù hợp.
Ổn định video với vidstab
Vidstab yêu cầu hai bước: phân tích chuyển động, rồi áp dụng ổn định.
Kiểm tra hỗ trợ vidstab:
ffmpeg -filters | grep vidstab
# Trên macOS: brew install ffmpeg (thường đã tích hợp vidstab)
Bước 1: Phân tích chuyển động
ffmpeg -i shaky_video.mp4 -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform.trf" -f null -
-
shakiness=8: mức rung máy dự kiến (1–10) -
accuracy=9: độ chính xác phân tích (1–15) - Kết quả sinh file
transform.trfphục vụ bước 2.
Bước 2: Ổn định video
ffmpeg -i shaky_video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=1:smoothing=10" -c:v libx264 -crf 20 stabilized.mp4
-
zoom=1: thêm 1% zoom để tránh viền đen. -
smoothing=10: độ mượt của chuyển động (cao hơn = mượt hơn).
Ổn định mạnh hơn:
ffmpeg -i video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=3:smoothing=30:optzoom=1" -c:v libx264 -crf 20 stable.mp4
-
optzoom=1: tự động tối ưu hóa zoom để loại bỏ viền.
Quy trình cải thiện chất lượng kết hợp
Kết hợp các bộ lọc trong một chuỗi duy nhất:
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
- Thứ tự khuyến nghị: Khử nhiễu → Mở rộng → Ổn định (giúp noise không bị upscale lên độ phân giải cao).
Lưu ý: Luôn chạy bước vidstabdetect trước khi áp dụng filter vidstabtransform trong chuỗi này.
Bộ lọc làm sắc nét
Cảnh quay mờ (blur) có thể cải thiện bằng filter làm sắc nét:
ffmpeg -i video.mp4 -vf "unsharp=5:5:1.5:5:5:0.5" -c:v libx264 -crf 20 sharpened.mp4
- Tham số:
lx:ly:la:cx:cy:ca-
lx:ly— kích thước ma trận luma -
la— mức độ sắc nét luma (dương = sharpen, âm = blur) -
cx:cy:ca— tương tự cho chroma
-
Mức sắc nét nhẹ: unsharp=3:3:0.5:3:3:0.0
Mức sắc nét mạnh: unsharp=5:5:2.5:5:5:0.0
Hiệu suất và xử lý hàng loạt
Các thao tác nâng cao đòi hỏi thời gian xử lý đáng kể (ước tính cho video 1080p/10 phút):
- Chỉ upscale: 2–5 phút
- Upscale + hqdn3d: 5–10 phút
- Upscale + hqdn3d + vidstab: 15–25 phút
Tối ưu với -preset:
-
ultrafast— nhanh nhất, file lớn -
fast— cân bằng tốc độ/kích thước -
slow— chậm, file nhỏ nhất với cùng CRF -
veryslow— thường không cần thiết so vớislow
Xử lý hàng loạt bằng GNU Parallel:
ls *.mp4 | parallel ffmpeg -i {} -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 enhanced_{/}
Kết nối với các API nâng cấp video AI
Để upscale bằng AI (kết quả tốt hơn filter FFmpeg với video chất lượng thấp), có thể dùng API chuyên biệt.
Ví dụ, WaveSpeedAI cung cấp API nâng cấp video bằng mô hình neural:
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
}
Kiểm thử API này với Apidog trước khi tích hợp:
Thêm xác nhận:
Mã trạng thái là 200
Phần thân phản hồi có trường id
Gọi endpoint trạng thái để kiểm tra hoàn thành, sau đó so sánh kết quả AI với kết quả upscale Lanczos. AI có thể giữ texture và chi tiết nhỏ tốt hơn, trong khi FFmpeg ưu việt về tốc độ và miễn phí.
Khuyến nghị: Dùng FFmpeg cho nhu cầu tiêu chuẩn, dùng AI API cho cảnh quay chất lượng thấp hoặc yêu cầu cao về chi tiết.
Câu hỏi thường gặp
Lanczos có tốt hơn bicubic trong mọi trường hợp không?
Lanczos tốt nhất khi upscale, còn bicubic đủ nhanh và chất lượng tốt khi giảm kích thước.
Vidstab có ổn định video quay từ điện thoại không?
Có. Video từ smartphone rất phù hợp cho vidstab. Đặt shakiness=8-10 cho cảnh quay rung mạnh.
Cần zoom bao nhiêu để loại bỏ viền khi ổn định?
Thông thường 3-8%. Dùng optzoom=1 để tự động tính toán.
FFmpeg có cải thiện được video lịch sử độ phân giải thấp?
FFmpeg giúp được phần nào, nhưng AI (như ESRGAN hoặc API chuyên biệt) cho kết quả vượt trội trên video xuống cấp nặng.
Khử nhiễu có làm chậm phát lại video không?
Không. Khử nhiễu là bước xử lý khi chuyển đổi, video xuất ra phát lại bình thường.
Top comments (0)