DEV Community

Cover image for FFmpeg 비디오 화질 향상: 업스케일링, 노이즈 제거, 안정화
Rihpig
Rihpig

Posted on • Originally published at apidog.com

FFmpeg 비디오 화질 향상: 업스케일링, 노이즈 제거, 안정화

요약

FFmpeg은 -vf "scale=1920:1080:flags=lanczos" 명령어로 비디오 해상도를 업스케일링할 수 있습니다. Lanczos는 고품질 업스케일링에 최적화된 스케일링 알고리즘입니다. 노이즈 제거에는 hqdn3d 필터가 가장자리 디테일을 유지하며 그레인과 노이즈를 효과적으로 줄입니다. 흔들림 보정에는 vidstab 플러그인을 두 단계로 적용할 수 있습니다. 이 세 가지 기술을 하나의 필터 체인으로 결합해 고품질 개선 파이프라인을 구축할 수 있습니다.

지금 Apidog을 사용해보세요

소개

FFmpeg을 활용한 비디오 품질 개선은 단순 해상도 변경을 넘어서, 업스케일링, 지능형 노이즈 제거, 선택적 흔들림 보정을 조합하는 것이 중요합니다. 각각의 단계는 흐릿함, 픽셀화, 노이즈, 카메라 흔들림 등 다양한 문제를 해결합니다.

이 가이드에서는 각 기술의 개별 사용법과, 이들을 필터 체인으로 결합하는 실질적인 방법을 다룹니다.

스케일링 알고리즘

스케일링 알고리즘은 FFmpeg이 업스케일링 시 새 픽셀을 어떻게 생성할지 결정합니다. 선택한 알고리즘은 최종 영상 품질에 직접적인 영향을 줍니다.

알고리즘 속도 품질 최적 용도
neighbor 가장 빠름 가장 낮음 픽셀 아트
bilinear 빠름 낮음 속도가 중요한 경우
bicubic 보통 좋음 일반적인 다운스케일링
lanczos 느림 최상 업스케일링

Lanczos로 1080p 업스케일링

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

종횡비 유지 업스케일링

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

-2는 높이를 자동 계산(2로 나누어 떨어지게)하여 종횡비를 유지합니다.

4K로 업스케일링

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

-preset slow는 압축 효율을 극대화하며, 고해상도 처리시 권장됩니다.

hqdn3d를 이용한 노이즈 제거

hqdn3d는 고품질 3D 노이즈 제거 필터로, 가장자리 디테일을 보존하면서 노이즈를 줄입니다.

ffmpeg -i noisy_video.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4
Enter fullscreen mode Exit fullscreen mode
  • luma_spatial (0-16): 밝기 공간 노이즈 (기본 4)
  • chroma_spatial (0-16): 색상 공간 노이즈 (기본 3)
  • luma_temporal (0-16): 밝기 시간적 스무딩 (기본 6)
  • chroma_temporal (0-16): 색상 시간적 스무딩 (기본 4.5)

더 강한 노이즈 제거

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

약한 노이즈 제거 (디테일 우선)

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

설정값이 높을수록 더 많은 노이즈가 제거되지만, 디테일이 희생될 수 있습니다. 전체 비디오 처리 전 샘플링으로 테스트하세요.

vidstab을 이용한 흔들림 보정

vidstab 필터는 2단계로 적용합니다: 움직임 분석 → 흔들림 보정.

vidstab 설치 확인

ffmpeg -filters | grep vidstab
Enter fullscreen mode Exit fullscreen mode

macOS에서는 brew install ffmpeg로 vidstab이 포함됩니다.

1단계: 움직임 분석

ffmpeg -i shaky_video.mp4 -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform.trf" -f null -
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode
  • optzoom=1: 확대 비율 자동 최적화

결합된 품질 개선 파이프라인

노이즈 제거, 스케일링, 흔들림 보정을 하나의 필터 체인으로 실행합니다.

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
Enter fullscreen mode Exit fullscreen mode

순서: 노이즈 제거 → 스케일링 → 흔들림 보정

이 순서로 처리해야 노이즈가 고해상도로 확대되는 것을 방지할 수 있습니다.

참고: vidstabdetect(움직임 분석)는 이 파이프라인 전에 별도로 실행해야 합니다.

선명화 필터

노이즈보다는 영상이 흐릿하다면, 선명화 필터(unsharp)로 디테일을 개선할 수 있습니다.

ffmpeg -i video.mp4 -vf "unsharp=5:5:1.5:5:5:0.5" -c:v libx264 -crf 20 sharpened.mp4
Enter fullscreen mode Exit fullscreen mode
  • lx:ly:la: 루마(밝기) 행렬 크기/양
  • cx:cy:ca: 크로마(색상) 행렬 크기/양

  • 약한 선명화: unsharp=3:3:0.5:3:3:0.0

  • 강한 선명화: unsharp=5:5:2.5:5:5:0.0

성능 고려 사항

품질 개선 작업은 연산량이 높습니다.

  • 단순 스케일링: 2~5분 (1080p, 10분 영상 기준)
  • 스케일링 + 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_{/}
Enter fullscreen mode Exit fullscreen mode

AI 비디오 업스케일링 API 연결

AI 기반 업스케일링은 FFmpeg 필터보다 저화질이나 손상된 영상에서 더 뛰어난 결과를 제공합니다.

WaveSpeedAI는 신경망 기반 AI 업스케일링을 지원합니다:

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
}
Enter fullscreen mode Exit fullscreen mode

통합 전 Apidog에서 테스트

  • 어설션 추가 예시:
  Status code is 200
  Response body has field id
Enter fullscreen mode Exit fullscreen mode
  • 상태 엔드포인트로 완료 여부를 폴링하고, AI 업스케일 결과와 FFmpeg Lanczos 결과를 비교하세요.

일반 작업에는 FFmpeg, 품질이 핵심인 영상에는 AI 업스케일 API를 사용하는 것이 실용적입니다.

자주 묻는 질문

Lanczos가 모든 경우에 bicubic보다 낫나요?

업스케일링에는 Lanczos가 우수합니다. 다운스케일링에는 bicubic이 비슷한 품질과 더 빠른 속도를 제공합니다.

vidstab은 휴대폰 영상에도 유용한가요?

네. 휴대폰 핸드헬드 영상은 흔들림 보정의 효과가 가장 큽니다. 이 경우 shakiness 값을 8~10으로 높이세요.

흔들림 보정 테두리 방지 확대 비율은?

흔들림 정도에 따라 3~8%가 필요합니다. 자동 확대는 optzoom=1로 설정하세요.

FFmpeg로 저해상도 옛날 영상을 개선할 수 있나요?

일정 부분 개선되지만, 심하게 손상된 영상에는 ESRGAN 등 AI 기반 업스케일러나 전문 API가 더 좋은 결과를 냅니다.

노이즈 제거가 재생 속도에 영향 주나요?

아니요. 노이즈 제거는 인코딩 단계에서만 처리되며, 결과 비디오는 정상 속도로 재생됩니다.

Top comments (0)