Movie Barcode Generator

  • Moin,

    Anbei ist ein Skript, das aus einem Film einen "Movie Barcode" vorgegebener Größe erzeugt.

    Der Code ist mehr oder weniger aus dem DE und EN Forum zusammengeklaut und neu zusammengesetzt. Da ich aber noch niemanden gesehen habe der so einen Generator gebastelt hat, dachte ich es wäre praktisch das mal zu machen. Damit das Skript funktioniert muss irgendwo eine FFMPEG.exe herumliegen. Da man sich heutzutage erstmal durch 20 Websites die 50 Versionen des Sourcecodes für alle möglichen Linux-Versionen anbieten klicken muss, bevor man eine .exe findet ist hier ein Direktlink: https://github.com/BtbN/FFmpeg-Builds/releases

    Hier ist das Skript

    Damit lässt sich z.B. sowas hier generieren:

    (das fünfte element)

    (watchmen)

    Die Einstellungen fürs Oversampling sind mit Vorsicht zu genießen. Der Wert von 1.0 bedeutet: JEDER Frame wird decodiert und als eine 1px hohe Linie gespeichert bevor die Bitmap anschließend in Form gebracht wird. Bei einem Film mit 200.000 Frames wird das Probleme geben (daher habe ich als Default-Wert eine 0.1 eingetragen, dann wird jeder 10te Frame verwendet und mit 20.000 Frames geht noch alles gut).

    (edit: Da ffmpeg die meiste Arbeit verrichtet werden sehr viele Videoformate unterstützt und die Geschwindigkeit ist auch ganz gut, da AutoIt nur das "Management" übernimmt und selbst gar nicht rechnen muss)

    (edit2: Für sehr große Mengen an Frames ist AutoIt das Bottleneck, da im Code angenommen wird, dass die Zeit die AutoIt braucht um die dekodierten Frames abzuarbeiten vergleichbar ist mit der Zeit die zum dekodieren gebraucht wird. Geht das Dekodieren signifikant schneller als das Managen der Daten gibt es eine quadratische Laufzeit, da im inner Loop $bData = BinaryMid($bData, $tBMPHEADER.bfSize + 1, $iLen) verwendet wird, was extrem langsam ist, wenn bData z.B. 10.000 Frames enthält. Vielleicht überarbeite ich diese Methode nochmal für Lineare Laufzeit)

    lg

    M

  • Wenn ich so eine Frage bekomme werde ich... gerne mal ausschweifend :D

    1. Triviale Antwort: Ästhetik.

    Es gibt im Netz ein paar Webseiten die "Movie Barcodes" von allen möglichen Filmen haben, zeigen, und sogar als Merch verkaufen. Von daher, wie bei jeder grafischen Spielerei: Es sieht einfach interessant aus.

    2. Interessant anzusehen.

    Auch wenn man kein Regisseur oder anderweitiger Profi ist, finde ich es interessant zu sehen welche Farbtöne unterschiedliche Filme zu unterschiedlichen Zeitpunkten haben. Die Beispiele "watchmen" und "das fünfte element" passen da zum Glück ganz gut (habe die eigentlich nur genommen, weil ich die Dateien davon herumfliegen hatte): Der eine ist Dunkelblau und Dunkelgrün, der andere ist Orange und Holzfarben.

    3. Identifikation von Filmausschnitten / Duplikaten (ist hier nicht implementiert, aber deshalb kam ich überhaupt dazu soetwas zu basteln).

    Die Idee dahinter ist, dass ein Filmausschnitt immer den selben Barcode ergibt, wenn er mit der selben Abtastrate (pixel pro Sekunde) erzeugt wird. Genauso erzeugt der selbe Film immer den selben Barcode, selbst wenn Codec, Auflösung, Qualität, FPS und sontiges unterschiedlich sind. Der Trick ist jetzt, dass der Barcode eines Filmausschnitts identisch zum Barcodeausschnitt eines Films ist (im Rahmen der Abtastrate. Ein paar Prozent Abweichung gibt es immer, da man verschiedene Frames erwischt). Der Barcode ist aber nur "eine" Bitmap die relativ einfach vergleichbar ist, während ein Film nicht ohne weiteres "verglichen" werden kann (das funktioniert natürlich nur, wenn man eine Variable Breite verwendet. Im hier geposteten Skript wird der Output ja immer via resize in die gewünschte Größe gebracht). Diese Eigenschaft lässt sich ausnutzen indem man für jeden bereits vorhandenen Film in einer Sammlung den Barcode generiert. Wird ein Film neu hinzugefügt, generiert man dort ebenfalls den Barcode, vergleicht ihn mit den bereits vorhandenen und kann darüber herausbekommen ob der Film bereits vorhanden ist. Falls er schon da ist kann man die Version mit höherer Qualität behalten und die mit niedrigerer Qualität löschen.
    Genauso kann man, wenn man z.B. einen 5 Sekunden Clip von einem Film sieht, einen Barcode generieren, und diesen in der Datenbank suchen (teilweise Matches sind ja kein Problem). Dann findet man (sofern vorhanden) den Film aus dem der Clip stammt automatisch und einen Zeitstempel gibts gleich mit dazu.

    Naja, jedenfalls war das die Idee. Aber ich habe nach dem ersten Schritt aufgehört, sodass es leider keine automatische Filmdatenbank gibt.

    lg

    M