요약
FFmpeg은 -vf "scale=1920:1080:flags=lanczos" 명령어를 사용하여 비디오 해상도를 높입니다. Lanczos는 업스케일링에 가장 좋은 스케일링 알고리즘입니다. 노이즈 제거를 위해 hqdn3d는 가장자리를 보존하면서 노이즈를 줄여줍니다. 흔들림 보정을 위해 vidstab은 두 단계 프로세스를 통해 카메라 흔들림을 처리합니다. 이 세 가지를 하나의 필터 체인으로 결합하여 고품질 개선 파이프라인을 만들 수 있습니다.
소개
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
종횡비 유지:
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를 이용한 노이즈 제거
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
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
값이 높을수록 더 많은 노이즈를 제거하지만 미세한 디테일이 흐려질 수 있습니다. 전체 비디오를 처리하기 전에 다양한 설정으로 테스트해 보세요.
약한 노이즈 제거 (디테일 보존):
ffmpeg -i video.mp4 -vf "hqdn3d=2:1.5:3:2.5" -c:v libx264 -crf 20 output.mp4
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은 테두리가 생기지 않도록 확대를 자동으로 최적화합니다.
결합된 품질 개선 파이프라인
세 가지 작업을 하나의 필터 체인으로 함께 실행합니다:
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 단계를 먼저 실행해야 합니다.
선명화 필터
영상이 노이즈가 많기보다는 흐릿하게 보인다면, 선명화가 도움이 될 수 있습니다.
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 (루마/크로마 크기 및 양)lx:ly — 루마 행렬 크기 (픽셀)la — 루마 양 (양수 = 선명화, 음수 = 흐림)cx:cy:ca — 크로마 등가값
약한 선명화: unsharp=3:3:0.5:3:3:0.0
강한 선명화: unsharp=5:5:2.5:5:5:0.0
성능 고려 사항
개선 작업은 연산량이 많습니다. 10분 길이의 1080p 비디오 처리 시간 예상치:
- 단순 스케일링만: 2-5분
- 스케일링 + hqdn3d: 5-10분
- 스케일링 + hqdn3d + vidstab: 15-25분
-preset을 사용하여 인코딩 속도와 파일 크기 간의 균형을 맞춥니다:
ultrafast— 가장 빠른 인코딩, 더 큰 파일fast— 보통 속도/크기slow— 가장 느림, 주어진 CRF에서 가장 작은 파일veryslow—slow보다 추가 시간을 들일 가치가 보통 없음
배치 처리를 위해서는 여러 파일을 동시에 실행하거나 parallel을 사용합니다:
ls *.mp4 | parallel ffmpeg -i {} -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 enhanced_{/}
AI 비디오 업스케일링 API 연결
AI 기반 업스케일링 (FFmpeg 필터보다 낮은 품질 또는 손상된 영상에 대해 더 나은 결과를 제공함)을 위해서는 FFmpeg 도구와 함께 특수 API가 존재합니다.
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
}
통합 전에 Apidog으로 테스트하세요:
어설션 추가:
Status code is 200
Response body has field id
완료를 위해 상태 엔드포인트를 폴링한 다음, AI로 업스케일링된 출력과 FFmpeg의 Lanczos 출력을 비교하세요. AI 업스케일링은 알고리즘 방식보다 텍스처와 미세한 디테일을 더 잘 처리합니다. FFmpeg은 더 빠르고 무료입니다.
표준 품질 작업에는 FFmpeg을 사용하고, 품질이 가장 중요한 영상에는 API 기반 AI 업스케일링을 사용하세요.
자주 묻는 질문
Lanczos가 모든 경우에 bicubic보다 낫나요?
업스케일링에는 그렇습니다. 다운스케일링에는 bicubic이 종종 비슷한 품질로 더 빠릅니다. Lanczos는 계산 비용이 더 많이 듭니다.
vidstab은 휴대폰 영상에서도 작동하나요?
네. 휴대폰 영상은 흔들림 보정의 이점을 가장 많이 얻는 경우가 많습니다. 휴대폰으로 촬영한 핸드헬드 비디오의 경우 shakiness 매개변수를 높게 (8-10) 설정해야 합니다.
흔들림 보정으로 인한 테두리를 숨기기 위해 어느 정도의 확대가 필요한가요?
소스 영상의 흔들림 정도에 따라 일반적으로 3-8%입니다. FFmpeg이 자동으로 계산하도록 optzoom=1로 설정하세요.
FFmpeg이 저해상도 과거 영상을 개선할 수 있나요?
FFmpeg 필터는 도움이 되지만 한계가 있습니다. AI 기반 업스케일링 도구(예: ESRGAN 또는 전문 비디오 개선 API)는 심하게 손상된 영상에서 훨씬 더 나은 결과를 제공합니다.
노이즈 제거가 재생 속도를 늦추나요?
아니요. 노이즈 제거는 변환 중 처리 단계이지 실시간 효과가 아닙니다. 출력 비디오는 정상적으로 재생됩니다.
