CountDown Timer

Achtung: dieser Timer funktioniert erst ab vMix Version 27. Muss irgendwie etwas mit der NET Version zu tun haben.
Es gibt unzählige Möglichkeiten, einen Countdown-Timer in vMix zu implementieren. Aber wenn Du einen Timer möchtest, der zu bestimmten Zeiten die Farbe wechselt, einen Endetext anzeigt oder die Überzeit bei 0 weiter hochzählt, dann ist hier ein Lösungsvorschlag. Abgesehen von vMix wird nichts weiter benötigt. Letztlich besteht die Lösung aus 2 Tastaturkürzeln und einem Skript. Das Skript generiert einen eigenen Timer. Die Variablen im Skript können relativ einfach angepasst werden. Da das Skript sofort nach dem Start mit dem Rückwärtszählen beginnt, benötigt es eine weitere Tastenkombination, die die Ausgangsanzeige zurücksetzt. Wenn Du die Countdown-Zeit änderst, musst Du das Skript ändern. Im Folgenden versuche ich, diesen Vorgang zu beschreiben.

1. Erstelle einen Tastaturkürzel, z.B. mit dem Buchstaben „R“ (für Reset), um das Skript Countdown zu stoppen (nur für den Fall, dass es noch läuft) Setze das Kontrollkästchen Lokales Skript auf true.

2. Erstelle eine zweite Tastenkombination mit demselben Buchstaben wie in Punkt 1 („R“), dem Du die Funktion Setcolor zuweist, wie in der Abbildung unten beschrieben. Dies dient dazu, den Hintergrund, falls er noch die Farbe für die Überzeit anzeigt, auf Schwarz zurückzusetzen. Setze das Kontrollkästchen Lokales Skript auf true.

3. Erstelle eine dritte Verknüpfung, wieder mit dem gleichen Buchstaben wie die beiden vorherigen Verknüpfungen („R“), hier wird die Anzeige gesetzt, welche Zeit nach Reset am Bildschrim angezeit wird. Die Anzeige bekommt den Wert aus DynamicValue1, dies ist eine lokale Variable von vMix. Der Wert wird im Script gesetzt, wenn der Countdown einmal gestartet wurde. Änderst Du also die Zeit im Script, wird diese beim Shortcut Reset automatisch auf den neuen Wert gesetzte. Setze das Kontrollkästchen Lokales Skript auf true.

4. Erstelle eine vierte Verknüpfung, z.B. mit dem Buchstaben „S“ (für Start), weise der Verknüpfung die Funktion ScriptStart zu, wie in der Abbildung unten gezeigt. Achte auf die korrekte Groß-/Kleinschreibung. Setze das Kontrollkästchen Lokales Skript auf true.

Am Ende sollte es in deiner Shortcut-Liste so aussehen, wie in der Abbildung unten, zusammen mit möglicherweise bereits vorhandenen Shortcuts! Setze das Kontrollkästchen Lokales Skript auf true.

Gehe dann in den Einstellungen von vMix in den Bereich Scripting. Dort erstellst Du mit Add ein neues Skript und nennst es Countdown. Achte auf die korrekte Groß- und Kleinschreibung. Setze die Checkbox Local Script auf true. In der Zone Script Text kopierst Du den folgenden Code und bestätigen mit Save. (siehe Bild und Code unten)

Passe die im Code beschriebenen Variablen an, wie z.B. die Gesamtzeit, die Warnzeiten, deren Farben oder den Endetext. Außerdem könntest Du mit der Variable overtimestop beeinflussen, ob der Timer am Ende mit einer Meldung anhält oder der Countdown die Überzeit hochzählt.
Zeilen mit einem ' Zeichen am Anfang sind Kommentare

'Please change only the title name and the text field in the quotes.
'Upper or lower case is effective!!
'GT Tile name
'Write the title name exactly as you read it above the input window
Dim Title as string = "countdown.gtzip"
'Write the text field name exactly as you see it when you right-click in the title's input window
Dim Textfield as string = "time.Text"
'Please change only the numbers or the colors in the quotes!
'Timer length in minutes and seconds
Dim timerLengthMinutes As Integer = 20
Dim timerLengthSeconds As Integer = 30
'Warning time 1 in minutes and seconds
Dim warnTime1Minutes As Integer = 0
Dim warnTime1Seconds As Integer = 45
'Warning time 2 in minutes and seconds
Dim warnTime2Minutes As Integer = 0
Dim warnTime2Seconds As Integer = 10
'Colors
Dim startColor As String = "white"
Dim warnColor1 As String = "yellow"
Dim warnColor2 As String = "red"
'does the timer stop at finishing time or does the timer continue to count up overtime
'set the value to true, if you want to show the endtext and stop the clock and script
'set the value to false, if you want the counter to start counting up the timer
'Please change only the value to true or false!
dim overtimestop as boolean = false
'Text when the timer has expired at the end
Dim endText As String = "Time is over"
'----------------please do not make any changes from here on----------------------
'----------------unless you know what you are doing-------------------------------
Dim startTime As DateTime = DateTime.Now
Dim endTime As DateTime = startTime.AddMinutes(timerLengthMinutes).AddSeconds(timerLengthSeconds)
Dim warnTime1 As DateTime = endTime.AddMinutes(-warnTime1Minutes).AddSeconds(-warnTime1Seconds)
Dim warnTime2 As DateTime = endTime.AddMinutes(-warnTime2Minutes).AddSeconds(-warnTime2Seconds)
Dim currentTime As DateTime
API.Function("SetColor",Input:= title ,SelectedName:= "background.Fill.Color",Value:="#FF0000")
'put countdowntime in a dinamic value for resetting the timer
API.Function("SetDynamicValue1", Value:= timerLengthMinutes.tostring("00") + ":" + timerLengthSeconds.tostring("00"))
Do
currentTime = DateTime.Now
If currentTime >= endTime Then
'Startcolor and endtext
if overtimestop = true then
API.Function("SetText",Input:=Title,SelectedName:=Textfield, Value:= endText )
API.Function("SetTextColour",Input:=Title,SelectedName:= Textfield, Value:= startcolor)
Exit Do
else if overtimestop = false then
API.Function("SetColor",Input:= title ,SelectedName:= "background.Fill.Color",Value:="#FF0000")
API.Function("SetText",Input:=Title,SelectedName:=Textfield, Value:= endText )
API.Function("SetTextColour",Input:=Title,SelectedName:= Textfield, Value:= startcolor)
end if
ElseIf currentTime >= warnTime2 Then
'warning color 2
API.Function("SetTextColour",Input:=Title,SelectedName:= Textfield, Value:= warnColor2)
ElseIf currentTime >= warnTime1 Then
'warning color 1
API.Function("SetTextColour",Input:=Title,SelectedName:= Textfield, Value:= warnColor1)
Else
'standardcolor
API.Function("SetTextColour",Input:=Title,SelectedName:= Textfield, Value:= startcolor)
API.Function("SetColor",Input:= title ,SelectedName:= "background.Fill.Color",Value:="#000000")
End If
Dim timeLeft As TimeSpan = endTime - currentTime
'option timedisplay in console
'time display in vMix
if timeLeft.Tostring("hh") > "00" then
Console.WriteLine("Remaining Time: " & timeLeft.ToString("hh\:mm\:ss"))
API.Function("SetText",Input:= Title ,SelectedName:= Textfield ,Value:= timeLeft.ToString("hh\:mm\:ss"))
else
Console.WriteLine("Remaining Time: " & timeLeft.ToString("mm\:ss"))
API.Function("SetText",Input:= Title ,SelectedName:= Textfield ,Value:= timeLeft.ToString("mm\:ss"))
end if
'waits 200 miliseconds
sleep(200)
Loop While True

Lade schließlich den Titel in dein vMix, wie im Beispiel verwendet. Du kannst den Titel hier herunterladen. Ich habe das Ganze auch als Bundle zum Download bereitgestellt oder das Preset allein, das bereits die Shortcuts und das Skript enthält.
Das Laden mit der Option Bundle beinhaltet alles und lädt auch Scripts und Shortcuts.
download Title, Preset or Bundle
Mit DynamicValue lassen sich auch die Countdown Zeiten einfach anpassen. Mit einem Streamdeck Pad könnte man verschiedene Zeiten in Dynamicvalue eingeben und das Script könnte die Coutdownzeit dann von dort nehmen.