NEXUS Bioacoustic Video-Logs (NEXUS-AVL)
![]() |
| Ich wünschte, mein Schreibtisch sehe so aus 🫣 - erzeugtes Bild |
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
"""NEXUS - Master Pipeline Commander (Full Visual Suite)Part of the NEXUS Bat Research Project---------------------------------------------------------------------Copyright (C) 2025-2026 Jochen Roth, Conny RothDieses Programm ist lizenziert unter der Creative CommonsAttribution-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.0Datum: 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 subprocessimport sysimport timeimport os# --- KONFIGURATION ---# Die auszuführenden Skripte in der exakten ReihenfolgeSCRIPTS = ["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 aussubprocess.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_timeprint(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