1. Dashboard
  2. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Forum
  • Seiten
  • FAQ
  • Erweiterte Suche
  1. DashCamForum.de
  2. Firmware / Software / Hardware & Zubehör
  3. Anwendungssoftware

Video verpixeln - Eine hoffentlich nicht zu grüne Banane.

  • Frank
  • 27. Juli 2014 um 20:46
  • Geschlossen
  • Erledigt
1. offizieller Beitrag
  • Frank
    Reaktionen
    255
    Beiträge
    2.017
    • 27. Juli 2014 um 20:46
    • Offizieller Beitrag
    • #1

    Anhang entfernt. Neue Version 0.2

    In Videos verpixeln hatte ich angekündigt, dass ich eine GUI zum Verpixeln schreiben wollte. Falls es jemand gebrauchen kann, hier der erste Entwurf.

    Die Idee

    Aus datenschutzrechtlichen Gründen sollen Kennzeichen und/oder Gesichter in Videos vor einer Veröffentlichung unkenntlich gemacht werden. Dazu werden mit Avisynth verschiedene Masken auf das Bild gelegt und die entsprechenden Bildteile verdeckt.

    Hintergrund

    Avisynth ist ein scriptbasierter Frameserver. Ein Frameserver lädt Dateien, welche Video-, Audio- und/oder Bilddaten enthalten und gibt sie an andere Programme zur Weiterverarbeitung weiter. Das Script ist ein einfacher Text, welcher in einer ebenso einfachen Textdatei mit der Dateiendung .avs gespeichert ist. Mit Hilfe dieses Scriptes ist es möglich, Bild- und Tondaten mit Hilfe von Filtern in vielfältiger Art und Weise zu bearbeiten. In der Regel wird Avisynth zur Verbesserung von Video- und Bildmaterial verwendet.

    Vorbereitung

    Um Zensor verwenden zu können, muss Avisynth installiert sein. Zensor selbst ist eine portable Anwendung. Das bedeutet, es muss nicht installiert sondern nur entpackt werden, wobei das Programm Schreibrechte für sein Verzeichnis benötigt. In dieses wird eine INI-Datei und das temporäre Avisynth-Script gespeichert.

    Was kann Zensor?

    Zensor stellt im Tab "Avisynth-Script" ein Grundgerüst für das Avisynth-Script zur Verfügung. In dieses fügt es ein vom Anwender ausgewähltes AVI-Video ein. Auf dem Tab "Editor" wird das Originalvideo mit Hilfe von Avisynth angezeigt und der Anwender kann eine größenveränderliche Maske auf dem Bild positionieren. Das heißt, der Anwender sucht das erste und letzte Bild für die Maskierung aus. Dabei kann die Maske nur linear bewegt und noch nicht in der Größe geändert werden. Die Daten werden zunächst in eine Maske und später in das Script eingetragen. Das Script muss derzeit noch nachbearbeitet werden. Im Tab "Zensor" lässt sich die Wirkung des Scriptes kontrolliert werden.

    Nachbearbeitung

    Das Grundgerüst des Avisynth-Scriptes sieht so aus:

    Code
    ###=== Das zu verpixelnde Video. ======================
    MyVideo = AviSource("Über den Button links oben laden.")
    
    
    ###=== Einfügen der Maske. ============================
    ### Die Variablen:
    ### - clip                      Das Video auf das die Funktion angewandt werden soll.
    ### - start_frame, end_frame    Das erste und das letzte Bild. Sie dürfen nicht identisch sein.
    ### - start_x, start_y          Die obere linke Ecke der Maske im ersten Bild.
    ### - end_x, end_y              Die obere linke Ecke der Maske im letzten Bild.
    ### - start_h, start_w          Die Höhe und Breite der Maske im ersten Bild.
    ### - start_h, start_w          Die Höhe und Breite der Maske im letzten Bild.
    function MyAnimate(clip "clip", int "start_frame", int "end_frame", int "start_x", int "start_y", int "end_x", int "end_y", int "start_h", int "start_w", int "end_h", int "end_w")
    {
      masc = BlankClip(height = start_h, width = start_w, color=$000000)
      return ApplyRange(Clip, start_frame, end_frame, "Animate", start_frame, end_frame, "Overlay", masc, start_x, start_y, masc, end_x, end_y)
    }
    
    
    ###=== Platz für Einzelbefehle. =======================
    ### Beispiel:
    ### a = MyAnimate(MyVideo, 0, 13, 50, 350, 0, 380, 40, 120, 40, 120)  # Funktion wird auf MyVideo von Bild 0 bis 13 angewandt. Maske wandert von 50, 350 nach 0, 380.
    ### b = MyAnimate(a, 12, 31, 265, 330, 100, 400, 40, 120, 40, 120)    # Funktion wird auf a angewandt. Die Maskengröße beträgt unverändert 40 * 120.
    ### MyAnimate(b, 240, 276, 1055, 427, 1060, 450, 40, 120, 40, 120)    # Funktion wird auf b angewandt. Es gibt keine linke Seite, so dass das Ergebnis angezeigt wird.
    
    
    ###=== Fake ===========================================
    MyAnimate(MyVideo, 0, 50, 100, 100, 400, 200, 40, 120, 400, 600)
    
    
    MyAnimate(<Letzter Clip>, 0, 1073, 407, 110, 896, 386, 57, 120, 57, 120)
    Alles anzeigen

    Das Script enthält viele Kommentaren und ein paar Anweisungen. Alle Kommentare beginnen mit dem Zeichen '#'. Es besteht aus drei Teilen:

    Code
    ###=== Das zu verpixelnde Video. ======================
    MyVideo = AviSource("Über den Button links oben laden.")


    Hier wird der Variablen MyVideo das Video zugewiesen. Wie dem Text zu entnehmen ist, soll dazu der Button links über dem Script verwendet werden. Das ausgewählte AVI wird in das Script eingetragen.

    Es wäre auch die Einbindung von Quicktime (.mov) und MPEG (.mpg) möglich.

    Code
    ###=== Einfügen der Maske. ============================
    ### Die Variablen:
    ### - clip                      Das Video auf das die Funktion angewandt werden soll.
    ### - start_frame, end_frame    Das erste und das letzte Bild. Sie dürfen nicht identisch sein.
    ### - start_x, start_y          Die obere linke Ecke der Maske im ersten Bild.
    ### - end_x, end_y              Die obere linke Ecke der Maske im letzten Bild.
    ### - start_h, start_w          Die Höhe und Breite der Maske im ersten Bild.
    ### - start_h, start_w          Die Höhe und Breite der Maske im letzten Bild.
    function MyAnimate(clip "clip", int "start_frame", int "end_frame", int "start_x", int "start_y", int "end_x", int "end_y", int "start_h", int "start_w", int "end_h", int "end_w")
    {
      masc = BlankClip(height = start_h, width = start_w, color=$000000)
      return ApplyRange(Clip, start_frame, end_frame, "Animate", start_frame, end_frame, "Overlay", masc, start_x, start_y, masc, end_x, end_y)
    }
    Alles anzeigen

    Dies ist die Funktion, mit welchem ein schwarzer rechteckiger Fleck an einer bestimmten Stelle im Video gezeichnet wird. Darin muss nichts verändert werden. Die Kommentare erläutern, welche Variablen der Funktion übergeben werden müssen.

    Code
    ###=== Platz für Einzelbefehle. =======================
    ### Beispiel:
    ### a = MyAnimate(MyVideo, 0, 13, 50, 350, 0, 380, 40, 120, 40, 120)  # Funktion wird auf MyVideo von Bild 0 bis 13 angewandt. Maske wandert von 50, 350 nach 0, 380.
    ### b = MyAnimate(a, 12, 31, 265, 330, 100, 400, 40, 120, 40, 120)    # Funktion wird auf a angewandt. Die Maskengröße beträgt unverändert 40 * 120.
    ### MyAnimate(b, 240, 276, 1055, 427, 1060, 450, 40, 120, 40, 120)    # Funktion wird auf b angewandt. Es gibt keine linke Seite, so dass das Ergebnis angezeigt wird.
    
    
    ###=== Fake ===========================================
    MyAnimate(MyVideo, 0, 50, 100, 100, 400, 200, 40, 120, 400, 600)

    Der Teil enthält als Kommentar ein Beispiel dafür, wie die Liste der Funktionsaufrufe, welcher der Nutzer mit Hilfe des Editors erstellt, aussehen sollte. Ausserdem gibt es einen Fakeeintrag, mit welchem man sofort im Tab "Zensor" gucken kann, wie sich so ein Aufruf auswirkt.

    Mit dem Editor wird zum Beispiel eine derartige Liste erstellt:

    Code
    MyAnimate(<Letzter Clip>, 0,  13, 150, 350, -40, 380, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 6, 11, 265, 330, 240, 330, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 12, 36, 240, 330, -50, 385, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 46, 56, 80, 360, -80, 390, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 56, 76, 155, 350, -80, 410, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 44, 60, 340, 300, 300, 325, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 61, 80, 300, 325, 200, 340, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 81, 102, 200, 340, -60, 400, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 123, 135, 130, 370, -80, 430, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 130, 151, 190, 360, -30, 405, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 151, 161, 300, 340, 220, 350, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 162, 179, 220, 350, -40, 435, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 215, 217, 580, 480, 710, 440, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 218, 221, 820, 420, 1150, 430, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 221, 230, 1000, 400, 1055, 448, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 231, 240, 1055, 448, 1055, 427, 40, 120, 40, 120)
    MyAnimate(<Letzter Clip>, 240, 276, 1055, 427, 1060, 450, 40, 120, 40, 120)
    Alles anzeigen


    Jede einzelne Zeile würde in diesem Zustand eine Fehlermeldung ergeben. Deshalb ist noch Nacharbeit notwendig. Diese soll Version 0.2 entfallen.

    Die Nacharbeit besteht darin, jeweils einen letzten Clip und einen neuen Clip einzutragen. Beim ersten Eintrag soll das Originalvideo bearbeitet werden. Deshalb wird "MyVideo" eingetragen. Für den resultierenden neuen Clip wird eine linke Seite "a = " eingefügt.

    Code
    a = MyAnimate(MyVideo, 0,  13, 150, 350, -40, 380, 40, 120, 40, 120)

    Beim nächsen Eintrag soll dem Clip eine weitere Maske hinzugefügt werden:

    Code
    b = MyAnimate(a, 6, 11, 265, 330, 240, 330, 40, 120, 40, 120)

    Dies zieht sich bis zum vorletzten Eintrag. Nur beim letzten Eintrag wird keine linke Seite benötigt.

    Code
    MyAnimate(p>, 240, 276, 1055, 427, 1060, 450, 40, 120, 40, 120)

    Gruß Frank

    2 Mal editiert, zuletzt von Frank (9. August 2014 um 22:34) aus folgendem Grund: Neue Version http://dashcamforum.de/board/index.php?page=Thread&threadID=1248

    • Nächster offizieller Beitrag
    • Zitieren
  • Frank
    Reaktionen
    255
    Beiträge
    2.017
    • 27. Juli 2014 um 23:06
    • Offizieller Beitrag
    • #2

    Eigentlich sollte alles einigermaßen schlüssig sein. Das kann ich natürlich sagen. Geht alles nach "meiner Logik". Deshalb ein paar Hinweise.

    1 - "Neues Script"

    In das Editorfenster wird das Gerüst des AviScriptes geschrieben. Sollte bereits eines darin enthalten sein, kann dieses noch gespeichert werden.

    Code
    ###=== Das zu verpixelnde Video. ======================
    MyVideo = AviSource("Über den Button links oben laden.">
    
    
    ###=== Einfügen der Maske. ============================
    ### Die Variablen:
    ### - clip                      Das Video auf das die Funktion angewandt werden soll.
    ### - start_frame, end_frame    Das erste und das letzte Bild. Sie dürfen nicht identisch sein.
    ### - start_x, start_y          Die obere linke Ecke der Maske im ersten Bild.
    ### - end_x, end_y              Die obere linke Ecke der Maske im letzten Bild.
    ### - start_h, start_w          Die Höhe und Breite der Maske im ersten Bild.
    ### - start_h, start_w          Die Höhe und Breite der Maske im letzten Bild.
    function MyAnimate(clip "clip", int "start_frame", int "end_frame", int "start_x", int "start_y", int "end_x", int "end_y", int "start_h", int "start_w", int "end_h", int "end_w")
    {
      masc = BlankClip(height = start_h, width = start_w, color=$000000)
      return ApplyRange(Clip, start_frame, end_frame, "Animate", start_frame, end_frame, "Overlay", masc, start_x, start_y, masc, end_x, end_y)
    }
    
    
    ###=== Platz für Einzelbefehle. =======================
    ### Beispiel:
    ### a = MyAnimate(MyVideo, 0, 13, 50, 350, 0, 380, 40, 120, 40, 120)  # Funktion wird auf MyVideo von Bild 0 bis 13 angewandt. Maske wandert von 50, 350 nach 0, 380.
    ### b = MyAnimate(a, 12, 31, 265, 330, 100, 400, 40, 120, 40, 120)    # Funktion wird auf a angewandt. Die Maskengröße beträgt unverändert 40 * 120.
    ### MyAnimate(b, 240, 276, 1055, 427, 1060, 450, 40, 120, 40, 120)    # Funktion wird auf b angewandt. Es gibt keine linke Seite, so dass das Ergebnis angezeigt wird.
    
    
    ###=== Fake ===========================================
    MyAnimate(MyVideo, 0, 50, 100, 100, 400, 200, 40, 120, 400, 600)
    Alles anzeigen

    Schlägt man die anderen Tabs auf, gibt es noch Fehlerhinweise.

    2 - "Script öffnen"

    Damit läßt sich ein bestehendes Script laden. Es wird das Video gesucht und geladen.

    3 - "Script speichern"

    Das Script speichern. Hat das Script bereits einen Namen erfolgt dies ohne Dialog.

    4 - "Script speichern unter"

    Das Script wird mit einem "Speichern unter"-Dialog gespeichert. Dabei sollte im Moment die Dateiendung ".AVS" mit angegeben werden.

    5 - "Video laden"

    Es wird die Zeile

    Code
    MyVideo = AviSource("Über den Button links oben laden.">


    gesucht und dort die mit dem Dialog ausgewählte Datei eingetragen.

    Im Moment werden nur AVIs geladen und die Größe 720 * 1280 verwendet weil dies das Material von meinner Kamera ist. Hat es keine Fehlermeldung gegeben, sollte das Originalvideo im Tab "Editor" und das Ergebnis mit dem Fakeeintrag im Tab "Zensor" zu sehen sein.

    Bilder

    • 1.png
      • 18,61 kB
      • 467 × 224

    Gruß Frank

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
    • Zitieren
  • Frank
    Reaktionen
    255
    Beiträge
    2.017
    • 27. Juli 2014 um 23:28
    • Offizieller Beitrag
    • #3

    Im Tab Editor kann man die zu verpixelnden - im Moment nur auszuschwärzenden - Stellen ermittelt.

    1 - Player

    Der Player funtkioniert für "Editor" und "Zensor" wenn dort Video bzw Script geladen sind. Die Tastaturbedienung kann man sich ansehen wenn man das Button mit den sechs Tasten anklickt.

    2 - Aktuelle Position/Gehe zu Bild

    Es wird die aktuelle Bildnummer angezeigt. Man kann eine Nummer eingeben und mit Enter wird dieses dazugehörige Bild angezeigt.

    3 - Trackbar

    Damit kann man durch das Video navigieren.

    4 - Maske

    Zeigt die Größe und Position der Maske an, wenn das aktuelle das erste oder letzte Bild des Bereiches wäre. Um die Position und/oder die Größe zu ändern muss man einmal auf die Maske klicken.

    5 - Bereich

    Hier werden die Daten für den Scripteintrag gesammelt. Wenn man den Button unter Start klickt, werden die aktuelle Bildnummer, die linke ober Ecke sowie die Größe der Maske eingetragen. Dasselbe gilt für Ende. Der Klick auf den Button bei Befehl erstellt einen Scripteintrag.

    Wenn das Panel im Weg ist, kann man es mit der Maus am Rand anfassen und verschieben.

    Bilder

    • 2.png
      • 105,83 kB
      • 520 × 417

    Gruß Frank

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
    • Zitieren
  • Frank
    Reaktionen
    255
    Beiträge
    2.017
    • 27. Juli 2014 um 23:35
    • Offizieller Beitrag
    • #4
    Code
    ###=== Platz für Einzelbefehle. =======================
    ### Beispiel:
    ### a = MyAnimate(MyVideo, 0, 13, 50, 350, 0, 380, 40, 120, 40, 120)  # Funktion wird auf MyVideo von Bild 0 bis 13 angewandt. Maske wandert von 50, 350 nach 0, 380.
    ### b = MyAnimate(a, 12, 31, 265, 330, 100, 400, 40, 120, 40, 120)    # Funktion wird auf a angewandt. Die Maskengröße beträgt unverändert 40 * 120.
    ### MyAnimate(b, 240, 276, 1055, 427, 1060, 450, 40, 120, 40, 120)    # Funktion wird auf b angewandt. Es gibt keine linke Seite, so dass das Ergebnis angezeigt wird.
    
    
    ###=== Fake ===========================================
    MyAnimate(MyVideo, 0, 50, 100, 100, 400, 200, 40, 120, 400, 600)
    
    
    MyAnimate(<Letzter Clip>, 0, 2820, 65, 48, 670, 402, 57, 120, 57, 120)
    Alles anzeigen


    Man kann das Beispiel und den Fake- bzw Dummy-Eintrag löschen. Auf jeden Fall sollten die erstellten Einträge nach dem Muster im Beispiel bearbeitet werden. Das müsste selbsterklärend sein.

    Gruß Frank

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
    • Zitieren
  • Frank
    Reaktionen
    255
    Beiträge
    2.017
    • 27. Juli 2014 um 23:47
    • Offizieller Beitrag
    • #5

    Im Tab "Zensor" kann man sich das fertige Video ansehen.

    Beim Abspielen der Videos kann das Bild flackern. Das liegt daran, dass die Bilder einzeln mit Avisynth geladen und auf ein Image kopiert werden. Deshalb kann die Abspielgeschwindigkeit auch etwas geringer als die tatsächliche Geschwindigkeit sein.

    Wenn andere Videoformate unterstützt werden sollen, bitte ich um entsprechende Informationen und kurze Beispielvideos.

    Da nicht alle Kameras eine Bildauflösung von 720 * 1280 haben, bitte ich auch um entsprechende Infos.

    Und Hinweise, welche zum Reifen dieser Banane beitragen, sind ausdrücklich erwünscht.

    Bilder

    • 3.png
      • 132,09 kB
      • 520 × 300

    Gruß Frank

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
    • Zitieren
  • nicmare
    Profi
    Reaktionen
    2
    Beiträge
    99
    • 28. Juli 2014 um 09:06
    • #6

    sorry für die frage aber was genau macht das bzw bringt mir das? Du hast dir ja wirklich viel Mühe mit der Erklärung gegeben aber ne Einleitung fänd ich nicht schlecht? Verpixelt mir das automatisch Kennzeichen und Gesichter?

    [Blockierte Grafik: https://www.dashcamtest.de/wp-content/the…s/signatur2.jpg]

    Tests von Dashcams – direkt aus der Hauptstadt: dashcamtest.de

    • Zitieren
  • Frank
    Reaktionen
    255
    Beiträge
    2.017
    • 28. Juli 2014 um 18:05
    • Offizieller Beitrag
    • #7

    :face_with_open_mouth: Wer das Thema Videos verpixeln bzw darin die Beiträge #45 ff nicht gelesen hat weiß nicht unbedingt etwas mit dieser Banane anzufangen.

    Die Idee: Mit Hilfe des scriptbaisierten Frameservers Avisynth sollen aus datenschutzrechtlichen Gründen zum Beispiel Kennzeichen in Videos unkenntlich gemacht werden. Die grafische Benutzeroberfläche soll das Script anzeigen, einen Editor für die Erstellung einzelnen Befehle und eine Vorschau für das Script zur Verfügung stellen. Ist das Script fertig kann das Video damit encodet werden.

    Die Banane: Sie stellt das Grundgerüst eines Avisynth-Scriptes zur Verfügung. In dieses Script kann ein Video im AVI-Format und Befehle eingefügt werden. Die Befehle lassen sich mit dem Editor erstellen und bewirken, dass sich ein schwarzes Rechteck in einer bestimmten Größe ab einem bestimmten Bild von einer bestimmten Position linear bis zu einem bestimmten Bild zu einer anderen bestimmten Position bewegt. Die Befehle müssen im Script vom Anwender noch nachbearbeitet werden.

    Gruß Frank

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
    • Zitieren
  • Frank
    Reaktionen
    255
    Beiträge
    2.017
    • 28. Juli 2014 um 18:16
    • Offizieller Beitrag
    • #8

    Um auch die Größe ändern zu können, muss in dem Script die Function MyAnimate ersetzt werden:

    Code
    function MyAnimate(clip "clip", int "start_frame", int "end_frame", int "start_x", int "start_y", int "end_x", int "end_y", int "start_h", int "start_w", int "end_h", int "end_w")
    {
      function MyMasc(clip "clip", int "pos_x", int "pos_y", int "masc_w", int "masc_h")
      {
        masc_h = masc_h - masc_h%2
        masc_w = masc_w - masc_w%2
        masc = BlankClip(height = masc_h, width = masc_w, color=$000000)
        Overlay(clip, masc, pos_x, pos_y)
      }
      ApplyRange(Clip, start_frame, end_frame, "Animate", start_frame, end_frame, "MyMasc", start_x, start_y, start_w, start_h, end_x, end_y, end_w, end_h)
    }
    Alles anzeigen


    Ich überlege, in der nächsten Version die Reihenfolge der Variablen zu ändern. Im Moment ist die Reihenfolge Frames, Position, Größe jeweils Start und End. Ich würde lieber erst alle Start- und dann alle Endvariablen haben.

    Gruß Frank

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
    • Zitieren
  • Dieses Thema enthält 27 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.

Heiße Themen

  • Dashcam Viewer und GoogMaps

    21 Antworten, Vor 2 Monaten
  • GX Player 4.02

    7 Antworten, Vor einem Jahr
  • Sensible Speicherkarten/ Dashcam Viewer Plus

    8 Antworten, Vor einem Jahr
  • Playersoftware - Kostenpflichtig (Stand: März 2024)

    6 Antworten, Vor einem Jahr
  • Videos verpixeln

    78 Antworten, Vor 11 Jahren

Benutzer online in diesem Thema

  • 2 Besucher
  1. Datenschutzerklärung
  2. Impressum
  3. Nutzungsbedingungen
  4. Telegram
  5. X
Community-Software: WoltLab Suite™
DashCamForum.de in der WSC-Connect App bei Google Play
DashCamForum.de in der WSC-Connect App im App Store
Download