Ich habe 4K 3840x2160-Filmmaterial im MP4-Format, das ich auf 1080p reduzieren muss. Ich habe versucht zu rennen
ffmpeg -i orig.mp4 -vf scale=1920:1080 smaller.mp4
Das Ergebnis ist jedoch eine sehr schlechte Qualität, da das gesamte Bild aus quadratischen "Kacheln" besteht, als würde ich 4: 1 vergrößern.
Hier ist die Ausgabe dieses Befehls:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'origs/P1000003.MP4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
creation_time : 2015-02-19 17:10:38
Duration: 00:05:14.48, start: 0.000000, bitrate: 95903 kb/s
Stream #0.0(und): Video: h264 (High), yuvj420p, 3840x2160 [PAR 1:1 DAR 16:9], 95792 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
creation_time : 2015-02-19 17:10:38
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 125 kb/s
Metadata:
creation_time : 2015-02-19 17:10:38
Incompatible pixel format 'yuvj420p' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x22a3420] w:3840 h:2160 pixfmt:yuvj420p
[scale @ 0x22a3ce0] w:3840 h:2160 fmt:yuvj420p -> w:1920 h:1080 fmt:yuv420p flags:0x4
Output #0, mp4, to '1-short.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
creation_time : 2015-02-19 17:10:38
encoder : Lavf53.21.1
Stream #0.0(und): Video: mpeg4, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Metadata:
creation_time : 2015-02-19 17:10:38
Stream #0.1(und): Audio: libvo_aacenc, 48000 Hz, stereo, s16, 200 kb/s
Metadata:
creation_time : 2015-02-19 17:10:38
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
frame= 125 fps= 6 q=31.0 Lsize= 968kB time=5.00 bitrate=1586.7kbits/s
video:842kB audio:123kB global headers:0kB muxing overhead 0.421047%
Ich weiß aus Erfahrung, dass ffmpeg ein ausgezeichnetes Werkzeug ist, also muss ich die Optionen / Parameter irgendwie vermasseln ...
Wie kann ich das machen?
ffmpeg
file-formats
conversion
full-hd
4k
Lara Michaels
quelle
quelle
-t 10
, um eine Ausgabe von 10 Sekunden zu erzielen. Warum möchten Sie verkleinern? Was ist der Anwendungsfall für Ihre skalierte Ausgabe? Diese Informationen helfen mir, eine genauere Antwort zu geben.-c:a copy
, da Sie den Audiostream nicht neu codieren möchten oder müssen. Verwenden Sie eine-map 0
beliebige Kapitel Metadaten oder andere Sachen zu kopieren. (ffmpeg nimmt standardmäßig nur 1 vid + 1 aud an.)-sws_flags lanczos+print_info
wird ein besseres Skalierungsalgo als das Standardalgo verwendet (bilinear, denke ich). Die Antwort von stlb deckt den Teil des Videokodierungsprozesses ab.scale=1920:-2:flags=lanczos
.-2
In meiner nicht existierenden Antwort wollte ich auch die Maßstabsangabe erwähnen . Für diejenigen, die nicht wissen, dass Sie-2
Breite oder Höhe eingeben können, wird automatisch der richtige Wert bereitgestellt, wobei das Seitenverhältnis beibehalten und der Wert durch 2 teilbar gemacht wird (erforderlich für libx264 für yuv420p-Ausgaben).Antworten:
Die Standardeinstellungen für ffmpeg sind von sehr geringer Qualität, und da Sie keinen Codec oder Qualitätsparameter angeben, werden nur die Standardeinstellungen verwendet (ich weiß nicht, warum die Entwickler das nicht beheben, weil es in den Foren viele Fragen aufwirft) überall).Bearbeiten : Die Standardeinstellungen sind jetzt ganz normal. Bei einem neueren Build von ffmpeg müssen Sie lediglich Eingabe- und Ausgabedateien angeben, um gute Ergebnisse zu erzielen. Sie können natürlich nach Herzenslust optimieren.
Versuchen Sie
-c:v libx264 -crf 20 -preset slow
, dem Befehl etwas hinzuzufügen .-c:v libx264
weist es an, den libx264-Encoder zu verwenden,crf 20
verwendet den Constant Rate Factor Quantizer (der paradoxerweise variable Bitrate, aber konstante Qualität bedeutet) mit einem Wert von 20 (ziemlich gute Qualität; weniger ist bessere Qualität / größere Dateien, höher ist crappier / kleiner),slow
Preset ist eine Abkürzung für eine Reihe von Encoder-Einstellungen, was bedeutet, dass es etwas mehr Aufwand erfordert als das Standard-Preset (Medium).Sie können diese Einstellungen anpassen. Anweisungen zu den zu ändernden Reglern finden Sie im Handbuch zur h.264-Codierung .
Und wenn Sie das Audio so verwenden, wie es ist, fügen Sie hinzu
c:a copy
. Dadurch wird eine direkte Kopie des Audiostreams ohne Neucodierung erstellt.quelle
mpeg4
, der MPEG-4 Part 2-Video produziert, und Die Standardeinstellungen waren in seiner Blütezeit vernünftiger (z. B. für 320 x 240 usw.).Verwenden Sie avconv, wenn Sie möchten:
quelle