TL;DR
FFmpeg skaliert Videos mit -vf "scale=1920:1080:flags=lanczos" hoch — Lanczos ist der beste Skalierungsalgorithmus für das Hochskalieren. Für die Entrauschung reduziert hqdn3d das Rauschen (Grain) und bewahrt gleichzeitig Kanten. Für die Stabilisierung bewältigt vidstab Kamerawackler durch einen zweistufigen Prozess. Kombinieren Sie alle drei in einer einzigen Filterkette für eine Pipeline zur Qualitätsverbesserung.
Einleitung
Die Qualitätsverbesserung von Videos mit FFmpeg geht über die reine Änderung der Auflösung hinaus. Echte Verbesserung kombiniert die Hochskalierung der Auflösung mit intelligenter Entrauschung und optionaler Stabilisierung. Jeder Schritt zielt auf ein anderes Qualitätsproblem ab: unscharfes oder pixeliges Material, körnige oder verrauschte Bilder und verwackelte Kamerabewegungen.
Dieser Leitfaden behandelt jede Technik einzeln und zeigt, wie man sie kombiniert.
Skalierungsalgorithmen
Der Skalierungsalgorithmus bestimmt, wie FFmpeg beim Hochskalieren neue Pixel füllt. Die Wahl hat einen sichtbaren Einfluss auf die Ausgabequalität.
| Algorithmus | Geschwindigkeit | Qualität | Am besten geeignet für |
|---|---|---|---|
neighbor |
Am schnellsten | Am niedrigsten | Pixel-Art |
bilinear |
Schnell | Niedrig | Geschwindigkeitskritisch |
bicubic |
Mittel | Gut | Allgemeines Herunterskalieren |
lanczos |
Langsamer | Am besten | Hochskalieren |
Hochskalieren auf 1080p mit Lanczos:
ffmpeg -i input_720p.mp4 -vf "scale=1920:1080:flags=lanczos" -c:v libx264 -crf 20 output_1080p.mp4
Seitenverhältnis beibehalten:
ffmpeg -i input.mp4 -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 output.mp4
-2 berechnet die Höhe automatisch unter Beibehaltung des Seitenverhältnisses und stellt sicher, dass das Ergebnis durch 2 teilbar ist.
Skalieren auf 4K:
ffmpeg -i input.mp4 -vf "scale=3840:-2:flags=lanczos" -c:v libx264 -crf 18 -preset slow output_4k.mp4
-preset slow weist x264 an, mehr Zeit für die Optimierung der Komprimierung aufzuwenden, was bei höheren Auflösungen relevanter ist.
Entrauschung mit hqdn3d
Der hqdn3d Filter ist eine hochwertige 3D-Entrauschung. Er entfernt Rauschen und Körnigkeit, während er Kantendetails bewahrt.
ffmpeg -i noisy_video.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4
Die vier Parameter: luma_spatial:chroma_spatial:luma_temporal:chroma_temporal
luma_spatial(0-16): Räumliches Rauschen im Helligkeitskanal. Standard 4.chroma_spatial(0-16): Räumliches Rauschen in den Farbkanälen. Standard 3.luma_temporal(0-16): Zeitliche Glättung der Helligkeit. Standard 6.chroma_temporal(0-16): Zeitliche Glättung der Farbe. Standard 4.5.
Stärkere Entrauschung:
ffmpeg -i grainy.mp4 -vf "hqdn3d=10:8:15:10" -c:v libx264 -crf 20 clean.mp4
Höhere Werte entfernen mehr Rauschen, können aber feine Details verwischen. Testen Sie verschiedene Einstellungen, bevor Sie das vollständige Video verarbeiten.
Leichte Entrauschung (Details erhalten):
ffmpeg -i video.mp4 -vf "hqdn3d=2:1.5:3:2.5" -c:v libx264 -crf 20 output.mp4
Stabilisierung mit vidstab
Der vidstab-Filter erfordert einen zweistufigen Ansatz: Zuerst wird die Bewegung analysiert, dann die Stabilisierung angewendet.
Installieren: Die vidstab-Unterstützung hängt von Ihrem FFmpeg-Build ab. Überprüfen Sie dies mit ffmpeg -filters | grep vidstab. Unter macOS: brew install ffmpeg enthält es.
Durchlauf 1: Bewegung analysieren
ffmpeg -i shaky_video.mp4 -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform.trf" -f null -
shakiness=8 (1-10): Wie starkes Kamerawackeln zu erwarten ist. accuracy=9 (1-15): Erkennungsgenauigkeit. Das -f null - verwirft die Ausgabe; wir benötigen nur die .trf-Datei.
Durchlauf 2: Stabilisierung anwenden
ffmpeg -i shaky_video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=1:smoothing=10" -c:v libx264 -crf 20 stabilized.mp4
zoom=1 fügt einen 1%igen Zoom hinzu, um die durch die Stabilisierung verursachte Randbeschneidung auszugleichen. Erhöhen Sie den Wert, wenn schwarze Ränder erscheinen. smoothing=10 steuert, wie glatt die Kamerabewegung wird (höher = glatter).
Aggressivere Stabilisierung:
ffmpeg -i video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=3:smoothing=30:optzoom=1" -c:v libx264 -crf 20 stable.mp4
optzoom=1 optimiert den Zoom automatisch, um Ränder zu vermeiden.
Kombinierte Pipeline zur Qualitätsverbesserung
Führen Sie alle drei Operationen zusammen in einer einzigen Filterkette aus:
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
Wenden Sie diese Reihenfolge an: zuerst entrauschen (entfernt Artefakte, die die Skalierung beeinträchtigen könnten), dann skalieren, dann stabilisieren. Dies vermeidet, dass Rauschen auf eine höhere Auflösung skaliert wird.
Hinweis: Führen Sie den vidstabdetect-Durchlauf zuerst aus, bevor Sie diese kombinierte Pipeline verwenden.
Schärfungsfilter
Wenn das Material eher unscharf als verrauscht aussieht, kann das Schärfen helfen:
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 (Luma/Chroma-Größen und -Beträge)lx:ly — Größe der Luma-Matrix (Pixel)la — Luma-Betrag (positiv = schärfen, negativ = weichzeichnen)cx:cy:ca — Chroma-Äquivalente
Für leichte Schärfung: unsharp=3:3:0.5:3:3:0.0
Für starke Schärfung: unsharp=5:5:2.5:5:5:0.0
Leistungsüberlegungen
Verbesserungsoperationen sind rechenintensiv. Schätzungen der Verarbeitungszeit für ein 10-minütiges 1080p-Video:
- Nur einfache Skalierung: 2-5 Minuten
- Skalierung + hqdn3d: 5-10 Minuten
- Skalierung + hqdn3d + vidstab: 15-25 Minuten
Verwenden Sie -preset, um die Balance zwischen Kodiergeschwindigkeit und Dateigröße zu finden:
ultrafast— schnellste Kodierung, größere Dateienfast— moderate Geschwindigkeit/Größeslow— langsamste, kleinste Dateien für gegebenen CRFveryslow— lohnt sich meist nicht die zusätzliche Zeit im Vergleich zuslow
Für die Stapelverarbeitung führen Sie mehrere Dateien gleichzeitig aus oder verwenden Sie parallel:
ls *.mp4 | parallel ffmpeg -i {} -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 enhanced_{/}
Verbindung zu KI-Video-Upscaling-APIs herstellen
Für KI-gestütztes Upscaling (das bessere Ergebnisse liefert als FFmpeg-Filter bei Material von geringer Qualität oder beschädigtem Material) existieren neben den FFmpeg-Tools spezialisierte APIs.
WaveSpeedAI bietet KI-Upscaling-Modelle an, die neuronales Upscaling anstelle von algorithmischen Filtern verwenden:
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
}
Testen Sie dies mit Apidog vor der Integration:
Assertions hinzufügen:
Statuscode ist 200
Antworttext enthält Feld 'id'
Fragen Sie den Status-Endpunkt nach der Fertigstellung ab und vergleichen Sie dann die KI-hochskalierte Ausgabe mit der Lanczos-Ausgabe von FFmpeg. KI-Upscaling verarbeitet Texturen und feine Details besser als algorithmische Methoden; FFmpeg ist schneller und kostenlos.
Verwenden Sie FFmpeg für Arbeiten mit Standardqualität und API-basiertes KI-Upscaling für Material, bei dem Qualität am wichtigsten ist.
FAQ
Ist Lanczos in allen Fällen besser als Bicubic?
Für das Hochskalieren, ja. Für das Herunterskalieren ist Bicubic oft schneller bei vergleichbarer Qualität. Lanczos ist rechenintensiver.
Funktioniert vidstab bei Handyaufnahmen?
Ja. Handyaufnahmen profitieren oft am meisten von der Stabilisierung. Der Parameter `shakiness` sollte für Handheld-Handyvideos hoch (8-10) eingestellt werden.
Wie viel Zoom ist nötig, um Stabilisierungsränder zu verbergen?
Typischerweise 3-8% je nachdem, wie stark die Quelle verwackelt ist. Setzen Sie optzoom=1, damit FFmpeg dies automatisch berechnet.
Kann FFmpeg historisches Material mit niedriger Auflösung verbessern?
FFmpeg-Filter helfen, haben aber Grenzen. KI-basierte Upscaling-Tools (wie ESRGAN oder spezialisierte Video-Enhancement-APIs) liefern bei stark beschädigtem Material deutlich bessere Ergebnisse.
Verlangsamt die Entrauschung die Wiedergabe?
Nein. Entrauschung ist ein Verarbeitungsschritt während der Konvertierung, kein Echtzeit-Effekt. Das Ausgabevideo wird normal abgespielt.
