Ausgabe
In Photoshop und Affinity Photo gibt es einen netten Überlagerungsfilter, der im Grunde die überlagernde Ebene von der unteren subtrahiert, um eine “Differenzkarte” zu erstellen.
Beispiel: Basisbild:
Screenshot Mario Kart 1
Überlagertes Bild:
Screenshot Mario Kart 2
Ergebnisausgabe:
Diff aus zwei Screenshots
Dies ist ein Beispiel für den Diff, bei dem ein PNG mit einem (glaube ich) komprimierten JPEG-Bild überlagert und dann aufgehellt wird:
Diff generiert aus der Bildkomprimierung
Position des Filters in Photoshop:
Photoshop-Screenshot
Gibt es eine Möglichkeit, dies mit einem Filter in ffmpeg für ein ganzes Video zu erreichen?
Lösung
Okay, ich habe herausgefunden, was wahrscheinlich der beste Weg ist, es zu tun. Es gibt einen ffmpeg-Filter namens Blend, der einige Modi hat, die dafür funktionieren können.
ffmpeg -r VIDEOFPS -i VIDEO -r VIDEOFPS -i VIDEO -lavfi blend=all_mode=grainextract -c:v libx264 -crf 0 -an ./out.mp4
grainextract erzeugt ein graues Video mit nur den Komprimierungsartefakten, dies scheint direkt für diesen Zweck gemacht zu sein.
ffmpeg -r VIDEOFPS -i VIDEO -r VIDEOFPS -i VIDEO -lavfi blend=all_mode=subtract -c:v libx264 -crf 0 -an ./out.mp4
Der Subtraktionsmodus erzeugt aus irgendeinem Grund ein grünes Video, hat aber auch nur die Videokomprimierung.
ffmpeg -r VIDEOFPS -i VIDEO -r VIDEOFPS -i VIDEO -lavfi blend=all_mode=difference -c:v libx264 -crf 0 -an ./out.mp4
Die Differenz scheint extrem nahe an der Subtraktion zu sein, wenn nicht die exakt gleiche Ausgabe.
ffmpeg -r VIDEOFPS -i VIDEO -r VIDEOFPS -i VIDEO -lavfi blend=all_mode=xor -c:v libx264 -crf 0 -an ./out.mp4
xor führt zu einer viel rauschärmeren und kontrastreicheren Ausgabe, eignet sich jedoch hervorragend, um exakte Komprimierungsartefakte in dunkleren oder weniger kontrastreichen Szenen zu sehen
ffmpeg -r VIDEOFPS -i VIDEO -r VIDEOFPS -i VIDEO -lavfi blend=all_mode=phoenix -c:v libx264 -crf 0 -an ./out.mp4
Ich habe Phoenix aus einer Laune heraus genommen, nur weil es cool klang und es tatsächlich für diesen Anwendungsfall funktioniert. Es führt zu einem rosa Video mit nur sichtbaren Komprimierungsartefakten, aber viel weniger definiert als Grainextract, also könnte es genauer sein? idk
Hinweis: Wenn Sie Aufzeichnungen von OBS oder Nvidia ShadowPlay verwenden, MÜSSEN Sie beim Importieren die FPS angeben. Beide verwenden variable FPS, um kleine Schluckaufe und FPS-Unterschiede zu bewältigen, sodass Sie bei Verwendung des Filters eine Reihe zufälliger 1-Frame-Desynchronisierung erhalten
Beantwortet von – Owen Quinlan
Antwort geprüft von – Mary Flores (FixError Volunteer)