NEXUS Bioacoustic Video-Logs (NEXUS-AVL)

Ich wünschte, mein Schreibtisch sehe so aus 🫣 - erzeugtes Bild

Ich habe bei meiner Recherche in und um die Bio-Akustik in meiner Forschung einige sinnvolle und interessante Python-Scripts "erdacht" - fairerweise muss ich das so sagen, dass ich nur sehr, sehr wenig Ahnung von Python habe und die LLM von Google - Gemini - mir die Scripte erstellt hat. Und ehrlicherweise war das nicht immer einfach 🫣😁.

Dabei entstand unter anderen auch dieses Script hier. Es ist eigentlich eine Pipeline aus mehreren Scripten:

  • spektrogramme_blog.py
  • highlight_to_audible_converter_blog.py
  • create_nexus_video.py
Hier ist die Pipeline:

"""
NEXUS - Master Pipeline Commander (Full Visual Suite)
Part of the NEXUS Bat Research Project
---------------------------------------------------------------------
Copyright (C) 2025-2026 Jochen Roth, Conny Roth

Dieses Programm ist lizenziert unter der Creative Commons 
Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).
Sie dürfen das Material kopieren, verändern und weitergeben, 
jedoch nicht für kommerzielle Zwecke nutzen. 
Weitere Details zur Lizenz finden Sie unter:
<https://creativecommons.org/licenses/by-nc/4.0/>
---------------------------------------------------------------------
Zweck:   Vollautomatische Orchestrierung ALLER Videogenerierungsmodule.
Version: 2.0.0
Datum:   01.05.2026
"""

__author__ = "Jochen Roth, Conny Roth"
__copyright__ = "Copyright (C) 2025-2026 Jochen Roth, Conny Roth"
__license__ = "CC BY-NC 4.0"
__version__ = "2.0.0"
__maintainer__ = "Jochen Roth"

import subprocess
import sys
import time
import os

# --- KONFIGURATION ---
# Die auszuführenden Skripte in der exakten Reihenfolge
SCRIPTS = [
    "spektrogramme_blog.py",
    "highlight_to_audible_converter_blog.py",
    "create_nexus_video.py"
]

def run_pipeline():
    print("🦇 Starte NEXUS V7 Video-Pipeline 🦇\n")
    start_time = time.time()

    for script in SCRIPTS:
        if not os.path.exists(script):
            print(f"\n❌ FEHLER: Skript '{script}' nicht im aktuellen Ordner gefunden!")
            print("Bitte stelle sicher, dass der Commander im selben Verzeichnis liegt.")
            sys.exit(1)

        print(f"{'='*50}")
        print(f"🚀 Führe aus: {script}")
        print(f"{'='*50}\n")
        
        try:
            # Führt das Skript mit dem aktuellen Python-Interpreter aus
            subprocess.run([sys.executable, script], check=True)
        except subprocess.CalledProcessError as e:
            print(f"\n❌ Abbruch: Fehler beim Ausführen von {script}!")
            sys.exit(1)
            
        print(f"\n✅ {script} erfolgreich beendet.\n")

    end_time = time.time()
    duration = end_time - start_time
    print(f"🎉 Pipeline komplett abgeschlossen in {duration:.1f} Sekunden!")
    print(f"Deine fertigen Videos findest du im Ordner 'final_videos'.")

if __name__ == "__main__":
    run_pipeline()


Aufgabe spektrogramme_blog.py:

Dieses Script erzeugt aus den verschiedenen Daten Spektrogramme, die dann im späteren Verlauf als Basis für die Video dienen.

Aufgabe highlight_to_audible_converter_blog.py:

Dieses Script wandelt die Ultraschallaufnahmen des TeensyBat in für das menschliche Ohr hörbare Frequenzen (Divisor 10) um und stellt sie als wav-Dateien für das nächste und letzte Script zur Verfügung.

Aufgabe create_nexus_video.py:

Dieses letzte und "magische" Script nimmt nun die erzeugten Spektrogramme aus spektrogramme_blog.py und die hörbar gemachten Rufe aus highlight_to_audible_converter_blog.py, legt sie quasi "übereinander" und es entsteht ein wunderbares (glaube ich) Video.


Hier ein Beispiel:

Erzeugte Spektrogramme mit Artenbestimmung


Quasi der Hintergrund für das Video



Jetzt kommt aber das sehr große ABER:

Die Erzeugung ist extrem rechen-intensiv. Ich habe keinen langsamen Rechner, bei ca. 1000 Aufnahmen in einer Nacht kann mein Rechner schon mal 8-10 Stunden brauchen, um alle Videos zu generieren. 

Es wäre sinnvoller, VOR der Generierung der Videos sich die Spektrogramme, die interessant zu seien scheinen, heraussuchen und dann erst den nächsten Schritt, die Video-Generierung, zu starten. Oder man hat sehr viel Zeit und Rechenpower. Dann muss man aber auch 1000 Videos durchsuchen 🤔.

Wie gesagt, es ist eine Pipeline, die ich hin und wieder brauche.

Kommentare

Beliebte Posts