Zunächst möchte ich noch etwas zu meinem Titel sagen: Ich beziehe mich nicht darauf, dass beim Hochskalieren keine Daten hinzugefügt werden (wie beim Hochskalieren oft gefragt wird), sondern auf etwas anderes.
Beispiel
Ich habe Rohvideo A1 (854 x 480)
Ich kodiere A1 nach B1 und ignoriere dabei den Maßstab, daher bleibe die Auflösung 854 x 480 gleich.
ffmpeg -i C:\A1.mkv -preset veryslow -crf 24 C:\B1.mkv
Ich spiele dieses Video in einem Player ab und skaliere es hoch, indem ich das Fenster des Players vergrößere. Das Video ist jetzt 1092 x 614 groß und ich speichere einen Screenshot von Frame 88.
Ich kodiere jetzt A1 nach C1 und gebe den Maßstab 1092x614 an (wie im Screenshot, den wir haben)
ffmpeg -i C:\A1.mkv -preset veryslow -crf 24 -filter_complex scale=1092:614 C:\C1.mkv
Ich speichere einen Screenshot von Frame 88 in C1 in seiner nativen Bildschirmgröße - 1092x614
Da ich für beide Kodierungen ein RAW-Original verwende, ging ich davon aus, dass beide Screenshots gleich aussehen würden. Das ist aber nicht der Fall. Die hochskalierte Kodierung C1 weist im Vergleich zur manuell hochskalierten Kodierung B1 eine viel schlechtere Qualität auf.
Ich dachte, wenn ich mit meinem Player manuell hochskaliere und das Bild sehe, macht ffmpeg während der Kodierung dasselbe – es würde also dasselbe Bild sehen wie ich und die Kodierung darauf basierend erstellen, aber es ist so, als ob die von ffmpeg verwendete Rendering-Engine anders/nicht so gut ist.
Gibt es eine Möglichkeit, dieses Problem zu umgehen?
Können wir mit einer anderen Technik etwas Ähnliches erreichen? Beispielsweise indem wir die Metadaten des Original-RAW-A1 bearbeiten und das Verhältnis Breite:Höhe festlegen, sodass jeder Player, der das Video in dieser Größe öffnet, es bei der Wiedergabe unbewusst hochskaliert.
Mein Anwendungsfall hierfür ist, dass ich versuche, Dimensionen zu simulieren, die von den meisten großen Video-Hosts erkannt werden – jedes Video unterhalb eines Schwellenwerts wird vom Host mit bestimmten Einstellungen nicht codiert.
Antwort1
Wie Sie sagten, ist Ihr Originalvideo roh, also nicht komprimiert. Wenn Sie es manuell mit Ihrem Player hochskalieren, ist es immer noch unkomprimiert, aber interpoliert. Das bedeutet, dass es immer noch die höchste Qualität hat. Aber -crf 24 ist eine hohe Komprimierung. Wenn Ihr Video wie das hochskalierte Rohvideo aussehen soll, können Sie -crf 19 oder niedriger ausprobieren.


