Das hier ist ein kleines Commandline-Tool in Python3, das einen Countdown in eine Textdatei schreibt. Das ist nützlich für Streams, um anzuzeigen, wie lange noch Pause oder wann der geplante Beginn sein wird, da OBS das nicht direkt unterstützt, aber eine Funktion hat, um Inhalte aus Textdateien direkt in den Stream zu tackern.
Das alles ist inspirierend von Snaz, was (a) nicht mehr weiterentwickelt wird (SÄD), (b) nicht auf macOS läuft (SÄD) und (c) eine GUI hat (Neid!wir haben immerhin ein Webinterface nun).
countMeDown kommt komplett ohne Abhängigkeiten (außer Python, bottlepy für das Webrfont ist direkt mit im Repo).
Im einfachsten Falle so:
Doppelklick auf die .command
-Datei, dann sollte sich ein Browserfenster öffnen, um Dinge einzustellen und einen Countdown anzulegen. Der kommt dann immer nach time.txt
. Die kann man dann an OBS verfüttern.
Oder:
$ python3 countMeDown.py 30
30 Sekunden Countdown in ./time.txt. Ab jetzt.
Die entstehende Textdatei (standardmäßig time.txt) muss dann noch OBS als Textquelle bekannt gemacht werden.
Wer sich mit Parametern auf der Kommandozeile unsicher ist, kann auch komplett ohne starten. Dann fragt das Programm interaktiv nach den notwendigen Informationen.
Wer sich insgesamt mit Kommandozeilen unsicher ist, startet direkt web.py
und führt einen Webbrowser auf http://localhost:22222 und kann dort Einstellungen festlegen und genau so CountDowns festlegen. It's magic.
Sämtliche definierte Parameter zum starten gibt es mit countMeDown.py --help
, was dann etwa so aussieht.
usage: countMeDown.py [-h] [-f FILE] [-s STEP] [-p PREFIX] [-e ENDING] [--print]
[--until]
time_in
OBS kann Textinputs aus Dateien lesen und direkt rendern. Hiermit können wir Countdowns
in Textdateien schreiben, um sie direkt in den Stream zu kleben.
positional arguments:
time_in Zeit für den Countdown. Entweder in Sekunden, Minuten:Sekunden
oder als Zieluhrzeit, dann muss --until mit angegeben werden.
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Pfad zur Datei, die von OBS gelesen wird.
-s STEP, --step STEP Anzahl Sekunden, bevor neu geschrieben wird.
-p PREFIX, --prefix PREFIX
Text, der vor der Restzeit fest angezeigt wird.
-e ENDING, --ending ENDING
Text, der nach dem Ablauf des Timers geschrieben wird.
--print schreibe die Ausgabe zusätzlich in die Konsole
--until Wenn gesetzt wird die Eingabe als Ziel-Uhrzeit und nicht als
Zeitdauer gelesen. Uhrzeit in 24-Stunden-Format mit oder ohne
Sekunden, Doppelpunkt als Trennzeichen.
Damit lässt sich schon bisschen was anstellen:
- Die angegebene Zeit muss nicht in Sekunden umgerechnet werden, sondern kann auch Minuten und Stunden beinhalten. Dann so
Stunden:Minuten:Sekunden
- Für so etwas wie "wir machen jetzt Pause bis um 18:00" gibt es
--until
: Wenn das Flag gesetzt wird, dann ist der Countdown nicht für 18 Minuten flat, sondern bis das nächste Mal 18:00 Uhr sein wird. - für längere Countdowns ist es vielleicht sinnig, nicht jede Sekunde neu zu setzen. Das geht mit
--step
. Step nimmt allerdings nur Sekundenwerte an. Hier gibts keine Option Minuten oder Stunden anzugeben. - Während es natürlich möglich ist, den Text aus diesem Tool von statischen Texten in OBS einzurahmen, um einen Kontext zu geben, wann der Timer endet, kann es bequemer sein, das direkt in der Ausgabe zu haben. Einen Text vor die Restzeit gibt es mit
--prefix
. Etwa so:$ countMeDown.py 30 --prefix "Stream startet in: "
. - Zusätzlich gibt es noch
--ending
, was ebenso einen Text annimmt, dieser wird statt der Restzeit angezeigt, wenn der Timer eigentlich zu Ende ist. Etwa so:$ countMeDown.py 10:00 --ending "gleich"
. - Wer die Datei an einem anderen Ort speichern möchte, kann mit
--file
den Pfad angeben. Etwa so:$ countMeDown.py 120 --file "C:\\countdown.txt"
. - um zum Testen zu sehen, was ausgegeben wird, gibt es noch
--print
: hier wird die Ausgabe zusätzlich noch in der Konsole ausgegeben
Wer vorzeitig beenden möchte, kann das mit strg+c tun.
Teile dieses Programms basieren auf Python Timedeltas. Die Doku warnt:
Note that for very large time intervals (greater than 270 years on most platforms) this method will lose microsecond accuracy.
Das gilt auch hier.
In der aktuellen Version wird sched aus der Python-Standardbibliothek zum Planen der Dateizugriffe benutzt. Damit ergibt sich ein Overhead von wenigen hundertstel Sekunden bei 10 Minuten Countdown:
$ time python3 countMeDown.py 10:00
python3 countMeDown.py 10:00 0,17s user 0,41s system 0% cpu 10:00,07 total
$ time python3 countMeDown.py 120:00
7200 Sekunden Countdown in ./time.txt. Ab jetzt.
python3 countMeDown.py 120:00 1,20s user 3,44s system 0% cpu 2:00:00,11 total