Spickzettel und Voreinstellungen, die mit FFmpeg 1.0 funktionieren?

28

Habe eine Reihe von "Spickzettel" ausprobiert, die an anderer Stelle erhältlich sind, aber fast alle sind veraltet und funktionieren NICHT mit der neuesten Version von FFMpeg.

Kann mich jemand auf Einstellungen verweisen, die mit dem neuesten FFMpeg funktionieren?

Mich interessieren vor allem die folgenden Codecs

H.264, niedrige mittlere und hohe Voreinstellungen

ebenso gut wie

ProRes, niedrige mittlere und hohe Qualitätsvoreinstellungen

Bachalo
quelle

Antworten:

49

FFmpeg enthält keine textdateibasierten Vorgaben und Profile mehr für libx264, dh das, was Sie mit dieser -vpreOption verwendet haben. Diese wurden für den Zugriff auf die aktuellen x264 Presets, Profile (und Melodien) abgeschrieben und entfernt mit der -preset, -profile:vund -tuneOptionen. Die alten Textdateien emulierten nur die offiziellen x264-Vorgaben und -Profile und konnten aufgrund verschiedener Einschränkungen nicht die volle Funktionalität bieten, die das neue System bietet. Es ist auch viel einfacher zu pflegen.

Darüber hinaus haben viele Encoder ihre eigenen Optionen. auch "private optionen" genannt. Sie müssen die Audio- und Video- Encoder-Optionen für gängige Codecs in der FFmpeg-Online-Dokumentation prüfen oder die Ausgabe von überprüfen, ffmpeg -h fullum eine vollständige Liste der unterstützten Optionen zu erhalten. Beispielsweise listet x264 seine Optionen libx264 AVOptionsin der vollständigen Hilfeausgabe unter auf.

Wenn Ihr ffmpeg unterstützt, sollten -presetkeine Textdatei-Voreinstellungen verwendet werden, und FFmpeg wird nur mit einigen nicht standardmäßigen iPod-Voreinstellungen geliefert. Es ist ein weit verbreitetes Missverständnis, dass Textvorgaben einfach von überall kopiert und mit jedem ffmpeg verwendet werden können. Dies ist falsch und führt zum Bruch.


Grundsätzlich haben Sie mit den Voreinstellungen die folgenden Möglichkeiten:

Qualität kontrollieren

Die Qualität wird entweder durch Angabe einer Bitrate -b:v(für Video) oder -b:a(für Audio) oder durch Angabe einer anderen vom Codec unterstützten Codierungsmethode gesteuert .

Für x264 gibt es verschiedene Codierungsmethoden, wobei die Constant Rate Factor- Methode die ausgefeilteste ist. Das Ergebnis ist eine variable Bitrate, aber insgesamt eine gute Qualität in einem einzigen Durchgang. CRF-Werte reichen von 0 bis 51, aber je nach Quelle und gewünschter Qualität liegen die Werte zwischen 19 und 26. 23 ist die Standardeinstellung, daher können Sie beispielsweise 18 für "hohe Qualität" und 28 für "niedrige Qualität" auswählen, was auch immer dies für Sie bedeutet.

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

x264 verfügt auch über andere Codierungsmethoden , die hier jedoch nicht berücksichtigt werden.

Beschränken Sie das H.264-Profil

Diese Profile definieren einen Funktionssatz, den der Encoder verwenden kann, um die Funktionen eines bestimmten Decoders abzugleichen. Verwenden Sie im aktuellen FFmpeg die folgende Syntax, um ein Profil anzugeben, in dem sich das Profil befinden könnte baseline, mainoder high:

ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline output.mp4

Weitere Informationen und wann Sie welches Profil verwenden sollten, finden Sie unter: Was sind die Unterschiede zwischen H.264-Profilen?

Wählen Sie eine x264-Codierung preset

Diese Voreinstellungen wirken sich auf die Codierungsgeschwindigkeit aus. Wenn Sie eine langsamere Voreinstellung verwenden, erhalten Sie eine bessere Komprimierung oder Qualität pro Dateigröße, während schnellere Voreinstellungen eine schlechtere Komprimierung bewirken. Im Allgemeinen sollten Sie nur das Preset verwenden, auf das Sie warten müssen. Presets kann sein ultrafast, superfast, veryfast, faster, fast, medium(Standard), slowund veryslow. Hier ist ein Beispiel:

ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4

Codiere verlustfreies Video

Dies ist möglich, indem Sie eine CRF von 0 angeben. Verwenden Sie dazu einfach -crf 0:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4

Lassen Sie uns zum Schluss noch kurz über ProRes sprechen. ProRes akzeptiert entweder eine feste Bitrate mit -b:voder Sie können das Profil angeben, das ein Wert zwischen 0 und 3 sein sollte , wobei die Bitraten entsprechend dem Profil gewählt werden. Höher heißt besser:

ffmpeg -i input.mp4 -c:v prores -profile:v 0 output.mov

Das ffmbc-Wiki schlägt vor, dass Namen von Profilen verwendet werden können - dies schlägt jedoch in FFmpeg 1.0 fehl.

slhck
quelle
Was soll ich tun , um die Chancen der Umwandlung Ausfallen zu reduzieren, ist es zufällig passiert, manchmal doesnát es passieren
FlyingAtom
@FlyingAtom Ich habe noch nichts von "Conversion Fail" gehört. Wenn Sie eine bestimmte Frage mit einem reproduzierbaren Problem haben, wenden Sie eine neue Frage: superuser.com/questions/ask
slhck
Womit würden Sie also effektiv enden, wenn alles, was Sie geliefert haben, wäre ffmpeg -i input.mp4 -c:v libx264 output.mp4? crf: 23 und voreingestellt: mittel?
Drazen Bjelovuk
1
@ Drazen Ja, das stimmt.
Slhck
Prost! -------
Drazen Bjelovuk
20

Ich habe einen Test durchgeführt, bei dem ich .mp4ein qualitativ hochwertiges Video von einem Sony-Camcorder mit der libx264-Codierung transcodiert und dabei den gesamten Bereich der voreingestellten Werte (außer Placebo) auf einen Bereich von CRF-Werten (18, 21, 24 und 27) angewendet habe ). Ich wollte wissen, was mir die beste Kombination aus Codierungsgeschwindigkeit, Ausgabequalität und Dateigröße bietet.

Für jeden CRF-Wert habe ich jeder Transkodierungsoperation eine Punktzahl für ihre Kodierungszeit gegeben (z. B. für CRF = 18 erhielt die ultraschnelle Zeit von 5,7 Sekunden eine Punktzahl von 1,0, die veryslowsche Zeit von 162 Sekunden erhielt mit allen eine 0) andere Punkte dazwischen skaliert). Ich habe die Punktzahl für die Ausgabedatei ähnlich berechnet, wobei natürlich die kleinste Datei die beste Punktzahl hat. Ich habe dann die beiden Punkte für eine "kombinierte" Geschwindigkeits- / Größenbewertung addiert.

Für jeden der vier CRF-Werte war die Voreinstellung "Sehr schnell" der zweifelsfreie Gewinner mit nahezu perfekten Ergebnissen von 1,94 (für CRF 18 und 21), 1,96 (CRF 24) und 1,97 (CRF 27). Ich finde es sehr merkwürdig, dass "sehr schnell" jedes Mal fast die kleinste Dateigröße produzierte , nur gegen "sehr langsam" und niemals gegen viel.

Ein Unterschied zwischen den verschiedenen voreingestellten Werten war, dass das Betriebssystem (Windows 7) mir unterschiedliche Thumbnails geben würde. Die schnelleren Voreinstellungen zeigen mehrere Sekunden lang eine Miniaturansicht im Video, wobei die Miniaturansichten für die langsameren Voreinstellungen die Anfangsbilder des Videos widerspiegeln. Das ist für mich nicht wichtig; Was ich gelernt habe war, dass "-preset veryfast" eine einfache Wahl zu sein scheint.

Hier sind meine Ergebnisse (als Momentaufnahme einer Excel-Tabelle):
Schnappschuss zu übertreffen

Hier ist die Excel-Tabelle als CSV-Text:

CRF,Preset,Seconds,score,MB,score,totalscore
18,1_ultrafast,5.7,1.00,59.5,0.09,1.09
18,2_superfast,8.4,0.98,62.3,0.00,0.98
18,3_veryfast,10.8,0.97,30.9,0.98,1.94
18,4_faster,16.0,0.93,33.5,0.89,1.83
18,5_fast,24.0,0.88,36.8,0.79,1.68
18,6_medium,29.1,0.85,34.9,0.85,1.70
18,7_slow,48.1,0.73,33.9,0.88,1.61
18,8_slower,84.9,0.49,33.0,0.91,1.40
18,9_veryslow,162.0,0.00,30.1,1.00,1.00
21,1_ultrafast,5.7,1.00,38.0,0.00,1.00
21,2_superfast,7.9,0.98,35.0,0.15,1.14
21,3_veryfast,10.0,0.97,19.0,0.97,1.94
21,4_faster,14.2,0.94,21.0,0.87,1.80
21,5_fast,19.9,0.89,23.0,0.77,1.66
21,6_medium,24.6,0.86,22.0,0.82,1.67
21,7_slow,43.1,0.72,21.0,0.87,1.58
21,8_slower,69.8,0.51,20.5,0.89,1.41
21,9_veryslow,137.3,0.00,18.4,1.00,1.00
24,1_ultrafast,5.5,1.00,24.9,0.00,1.00
24,2_superfast,7.5,0.98,21.4,0.27,1.25
24,3_veryfast,9.3,0.97,12.0,0.99,1.96
24,4_faster,13.2,0.93,14.0,0.84,1.77
24,5_fast,17.4,0.90,15.0,0.76,1.66
24,6_medium,21.0,0.87,14.4,0.81,1.67
24,7_slow,37.3,0.72,14.0,0.84,1.56
24,8_slower,62.2,0.51,13.0,0.92,1.42
24,9_veryslow,121.1,0.00,11.9,1.00,1.00
27,1_ultrafast,5.5,1.00,16.8,0.00,1.00
27,2_superfast,7.4,0.98,13.6,0.38,1.36
27,3_veryfast,9.0,0.97,8.4,1.00,1.97
27,4_faster,12.6,0.93,10.1,0.80,1.73
27,5_fast,15.8,0.90,10.4,0.76,1.66
27,6_medium,18.8,0.87,10.0,0.81,1.68
27,7_slow,34.1,0.73,9.8,0.83,1.56
27,8_slower,59.6,0.48,9.0,0.93,1.41
27,9_veryslow,109.7,0.00,8.4,1.00,1.00
Ted W
quelle
3
Ich weiß, dass die Formatierungsoptionen von Super Users mittelmäßig sind, aber es kann hilfreich sein, wenn Sie die Daten als Text veröffentlichen - möglicherweise unter Verwendung der Code-Formatierung.
Scott
1
Faszinierend. Es ist auch schneller auf meinem Computer. Vielen Dank!
Joeytwiddle
1
Ich muss zugeben, dass ich Ihre Ergebnisse mit Argwohn betrachtet habe, aber ich habe den Test wiederholt und mit ffmpeg Version 3.3.2-1 auf einem 2-minütigen 1080p-Movieclip ähnliche Ergebnisse erzielt. Tatsächlich erzeugte sehr schnell die kleinste Dateigröße in 60% der Fälle und erreichte in 40% der Fälle den 2. Platz (aber nicht viel). Ab jetzt verwende ich für alle meine Codierungen sehr schnell und einen relativ niedrigen CRF-Wert (18, 19, 20), da sehr schnell bei den niedrigeren CRF-Werten nur noch etwas langsamer war als bei den höheren. Danke, Sie haben mir viel Zeit gespart. Rohdaten und Skript im Kommentar unten.
Mattst
1
Fortsetzung des obigen Kommentars ... Hier sind meine Rohdaten - CRFs 18 bis 27 und das Linux / UNIX- Bash-Skript , das ich geschrieben habe, um die Codierungen auszuführen (falls jemand einen ähnlichen Test ausführen möchte).
Mattst
1
Hier sind einige großartige Blog-Posts zu den Themen, bei denen Tests für x264 und x265 durchgeführt wurden (die Ergebnisse sind vorhersehbar je nach
Modell