Freitag, 28. März 2014

[Blender] Verpixeln & Verwischen von Dingen in Videos

Ich habe eine Anfrage bekommen, wie man Gesichert wegen Datenschutz in Videos unkenntlich macht. Mit dem eingesetzte Editor "Movie Maker" ist dies nicht so schön zu erledigen. Mit Blender geht das jedoch deutlich besser.

Das Video hier zeigt es sehr schön:


(Etwas leichter ohne Tracking ist hier eine Anleitung zu finden: http://problemeblender.blogspot.de/2013/05/gesicht-verpixeln.html)

Nun ist Blender 2.70 draußen und es hat sich ein wenig getan.
In den beiden Tutorials wird zudem nur das Verwischen gezeigt. Bei heise, besser gesagt bei c't, habe ich eine Anleitung gefunden, die auch das Verpixel zeigt: http://www.heise.de/video/artikel/Kennzeichen-verpixeln-mit-Blender-1785398.html



Als Ausgangsmaterial nehme ich ein paar Frames aus "Sherlock Mini-Episode: Many Happy Returns", und zwar Frame 7922 bis 8229. Ein einfaches Ergebnis sieht wie folgt aus:


Beginnen wir also mit einem frischen Projekt.

Zuerst entfernen wir alle Objekte. Mit der Taste A wählen wir alles aus und mit X löschen wir die ausgewählten Objekte.

Als nächstes gehen wir in die Top-Ansicht. Und fügen eine Camera hinzu.

Die Camera wird auf der Z-Achse um 5 Einheiten verschoben. Danach wechseln wir die Ansicht auf die Camera.

Wir brauchen jetzt den Film. Besser gesagt: wir brauchen erst einmal einen Punkt, der einem Pfad folgt. Dieser Pfad wird durch ein Gesicht bestimmt. Dem Gesicht in dem Film.

Dazu wechseln wir die Ansicht zum "Motion Tracking". Und öffnen das gewünschte Video.

Im Menüpunkt Zoom findet man Einträge, mit denen man das Video im Festern auf eine passende Größe zoomen kann.

Als nächstes suchen wir uns die Stelle heraus, in der wir das Gesicht, oder auch andere Objekte, verwischt oder verpixelt darstellen wollen. Bei mir geht das bei Frame 7922 los und endet bei Frame 8229.
In der Zeitleiste lege ich als Start und Ende diese beide Zahlen fest, da ich nicht das gesamte Video rendern will. Mir reicht dieser kleine Ausschnitt.
Wer sein komplettes Video braucht, stellt die Zahlen auf Start 1 und Ende den letzten Frame des Videos. Diesen findet ihr im Movie Clip Editor (in der Mitte) rechts bei den Eigenschaften. Ganz unten ist das Feld "Footage Information". Dort steht Frame aktuell von insgesamt; bei mir in diesem Fall "Frame: 7922 / 10801"

In der Zeitleiste unten können wir alle aktuellen Frames, also von Start bis Ende, "View → View All" sehen.

Jetzt versuchen wir das Gesicht zu tracken.
Dazu setzten wir einen Marker. Mittig Links ist dazu der Knopf "Add", der sich in der Kategorie "Marker" befindet. Ein mal drauf klicken und danach etwa mittig dahin, wo das Gesicht ist. Es erscheint eine kleine weiße Box.

Über den Menüpunkt Track → Transform → Tanslate können wir diesen Marker verschieben und mit Resize dessen Größe verändern. Alternativ helfen die Tastendrücke S für Scale und G für Grab (Translate). Drückt man anschließend noch die X oder Y Taste, wird die Transformation auf eine Achse beschränkt.
(! Ist der Kopf oder das Objekt im Bild sehr groß, dann sollte der Marker möglichst nur einen markanten zentralen Punkt davon anvisieren. Und den Marker nicht unbedingt um das zweifache skalieren. Zu große Marker benötigen länger bei der Berechnung.)
Ich habe die Box in etwa auf Kopfgröße Scaliert und geschoben.

Rechts bei den Eigenschaften sieht man auch, was genau im Marker zu sehen ist.
Nun kann das Tracken des Markers beginnen. Dazu drücken wir links auf den Track Knopf.
Die Zeitleiste wird etwas vor laufen. Und dann passiert plötzlich nichts mehr. Im Eigenschaften-Bereich nimmt der Marker eine blass rote Farbe an.

Das heißt, dass der Marker sein Ziel verloren hat und wir ihn neu ausrichten müssen. Durch leichtes Verschieben dürfte der Marker ein neues Ziel bekommen, welches er weiter tracken kann.
Das muss jetzt bis zum Ende vollzogen werden. Versucht den Marker möglichst immer zentral im Gesicht zu halten. Dieser Punkt wird gleich als Zentrum der Verpixelung und Verwischung dienen.

In der Zeitleiste könnt ihr anschließend das Ergebnis überprüfen. Der Play-Knopf will bei mir nicht so ganz. Mit den Pfeiltasten funktioniert es jedoch ganz gut.

Aus dem bewegten Marker erstellen wir jetzt ein Empty. Ein Objekt, das genau diese Bewegung vollzieht. Dazu klicken wir auf den Knopf "Link Empty To Track", der sich im Tab Solve (links mittig) in der Kategorie Geometrie befindet.

Dieses Empty sollte sich nun in der 3D Ansicht befinden. Wir wechseln zur Ansicht "Default" und sehen dort das Empty als großes Kreuz.

Wir markieren das "Track" genannte Empty mit einem Rechtsklick und wählen "Object → Snap → Cursor To Selected".
Über "Add → Mesh → Plane" fügen wir eine neue Fläche ein, die an der Position des Cursors, und somit direkt am Empty, liegt.

Alternativ können wir auch einen "Add → Curve → Circle" oder "Nurbs Circle" nutzen, sollten aber dann rechts in den Properties bei "Object Data" das Shape von 3D auf 2D stellen.
Die Fläche kann jetzt zu groß oder zu klein sein. Um dies zu beheben, nutzen wir "Object → Transform → Scale" oder die Taste S. Wieder kann mit X und Y eine Achse fixiert werden. Eine Verschiebung (Translate, "Grab") wäre jetzt ungünstig und sollte vermieden werden. Auch eine Rotation ist nicht unbedingt angebracht.
Da wir wahrscheinlich aktuell nicht wissen, wie groß das Gesicht ist, sollten wir das Video als Hintergrundbild nutzen.
Dazu öffnen wir die Eigenschaften mittels "View → Properties" oder der N Taste.

Bei den Eigenschaften gehen wir unten auf "Background Images" und aktivieren dies. Ein Klick auf "Add Image" lässt mehr Eigenschaften erscheinen. Dort wählen wir "Movie Clip" und deaktivieren "Camera Clip". Mit dem Drücken auf Open suchen und öffnen wir unser Video. Danach sollte ein Bild im Cameraausschnitt zu sehen sein.
Damit lässt sich die Fläche deutlich einfacher auf die richtige Größe bringen.

Als nächstes heften wir die Ebene an das Empty.
Dazu wählen wir zuerst die Ebene aus. Diese wird orange. Danach drücken wir Shift und auf das Empty. Nun ist das Empty orange und die Ebene rot. Dann drücken wir auf "Object → Parent → Object" und bestätigen "Object".
Damit wird der Ebene gesagt, dass das Empty sein Parent ist und es ihm folgen soll. Bewegen wir jetzt die Zeitleiste, bewegt sich die Ebene mit dem Empty mit. Das Gesicht sollte dabei meist überdeckt sein.

Ob "Track" auch wirklich das Parent von "Plane" ist, können wir auch in den Properties von Plane anschauen. Dazu wählen wir wieder Plane aus und gehen bei Properties auf Object und finden in der Abteilung Relations die Parent-Einstellung.

Als nächstes folgen ein paar Farbeinstellungen.
Zunächst müssen die Farben für Horizon, Zenit und Ambient auf schwarz gesetzt werden. Die Felder dafür befinden sich im World-Bereich.

Unsere Plane bekommt ein weiß-leuchtendes Material.
Dazu legen wir ein neues Material an.
Die Diffuse-Farbe setzten wir auf weiß und dessen Intensität auf 1.
Die Intensität von Specular kommt auf 0.
Der Emit-Wert wird ebenfalls auf 1 gesetzt. Dadurch leuchtet die Plane von alleine und wir brauchen kein weiteres Licht.

Mit der Maus mittig auf dem Bild können wir den Test machen. Per Druck auf die Taste F12 wird die aktuelle Ansicht gerendert. Es sollte ein weißes Viereck auf schwarzem Grund sein. Diese Ansicht kann mittels Druck auf die ESC Taste wieder rückgängig gemacht werden.

Als nächstes folgt das Compositing.

Die Nodes werden gebraucht, also müssen diese aktiviert werden. "Auto Render" ist empfehlenswert, da wir so sofort Änderungen sehen. In den Performance Einstellungen können wir auch OpenCL aktivieren, was die Berechnung beschleunigen sollte. (Um ein erstes Bild unten links zu erhalten, kann es nötig sein F12 oder den Render-Knopf rechts zu drücken.)

Verpixeln oder Verwischen.
Das können wir jetzt machen, wie wir wollen.
Und sogar beides gleichzeitig nutzen.
Oder ganz andere Spielereien machen.
Hier die beiden Node-Setups für Verpixeln und Verwischen.

Die Nodes sind zu finden unter: Add →
→ Input → Movie Clip
→ Input → Value
→ Color → Mix
→ Converter → Math
→ Filter → Blur
→ Filter → Pixelate
→ Distort → Scale

Die Verfahren sind schnell erklärt. Zunächst Verwischen:
  • das Movie Clip Bild wird auf die Größe des zu rendernden Bildes skaliert
  • das skalierte Bild einmal in die Mix Node und einmal zum Bluren geschleust
  • das geblurte Bild kommt ebenfalls in die Mix Node
  • die Mix Node mischt die beiden einkommenden Bilder; dazu dient das schwarz-weiß Bild, das aus dem Render Layer kommt. Weiß bedeutet, dass der untere Eingang benutzt werden soll, also das verschwommene Bild, und bei schwarz wird der obere Eingang mit dem normalen Bild verwendet. Bei Grau-Tönen wird anteilig gemischt. Das wollen wir hier jedoch nicht. Das weiße Viereck ist genau da, wo das Gesicht ist. Somit wird anstelle des normalen Gesichts das verschwommene genommen. Bei den restlichen schwarzen Stellen kommt das normale Bild zur Anwendung.
Und Verpixeln:
  • hierfür skalieren wir zunächst das Eingangsbild herunter
  • verpixeln dies
  • und skalieren es wieder herauf
Dadurch entstehen die großen Pixel. Der Rest ist gleich zum Verwischen. Anstelle der Eingabe von Werten in den Scale-Nodes, habe ich eine Value-Node eingesetzt. Hier kann ich einmal die Skalierung einstellen. Diese überträgt den Wert an die Skalierungsboxen, einmal zum Vergrößern, und über die Berechnung 1/x zum Verkleinern.


Wenn wir jetzt in unserer Zeitleiste herum springen, merken wir, dass die Region der Unschärfe oder des verpixelt Sein nicht folgt. Dies scheint nur ein Problem in der Vorschau zu sein. Drückt den Render Knopf oder F12 und die Region ist wieder auf der richtigen Stelle.

Das heißt, wir können fast an die Ausgabe des Resultats gehen.
Zunächst aber noch das Einfügen der Audio-Daten.
Dazu wechseln wir in die "Video Editing" Ansicht.
Und fügen wieder unseren Film hinzu.

Achtet darauf, dass der Start-Frame auf 0 sitzt.
In meinem Fall wurde der Film auf Position 8000 eingefügt. Zuerst war das nicht sichtbar, weil die Zeitleiste nicht soweit ging.Mittels "View → View All Sequences" lassen sich alle Stücke anzeigen. Dann solltet ihr auch die finden, die ihr vermisst.
Der untere Strip ist bei mir der Film, der obere die Musik. Den unteren brauche ich nicht und kann ihn somit löschen.

Kommen wir zu guter Letzt noch zu den Render-Einstellungen.
Diese finden wir in den Properties. Ich habe mir hierfür die Default View geöffnet.

VLC hat mir über Tools → "Codec Information" ein paar Dinge verraten.

Die Frame Rate liegt bei 25. In Blender sind standardmäßig 24 eingestellt. Dies muss geändert werden. Genauso die Resolution.

Anti-Aliasing brauchen wir nicht. Deswegen kommt das Häkchen dort raus.
Als Output-Ordner nehmen wir etwas anderes als den Temp-Ordner.
Als Type wähle ich anstelle von PNG das in den VLC Informationen angezeigte H.264.
Bei Encoding aktiviere ich außerdem noch den Audio Codec, da ansonsten nichts zu hören wäre. Bei mir steht die Option, nach VLC, auf AAC.

Mit einem Druck auf den Knopf "Animation" ganz oben in den Render Properties beginnt die Erstellung des Videos. Dies kann ein wenig Zeit in Anspruch nehmen.

Hier ist das Ergebnis: