Ottimizzare la produzione con il livello di automazione di mimoLive
Stai visualizzando un contenuto segnato da YouTube. Per accedere al contenuto effettivo, clicchi sul pulsante sottostante. Si prega di notare che in questo modo si condividono i dati con provider di terze parti.
Ulteriori informazioniIl livello di automazione mimoLive è stato originariamente sviluppato come proof of concept, ma da allora si è rivelato uno strumento incredibilmente utile per gli utenti. Questo livello può essere utilizzato per automatizzare l'accensione e lo spegnimento dei livelli in una sequenza specifica o in momenti predeterminati, per trasportare informazioni da un livello all'altro, per avviare e interrompere destinazioni di uscita, e molto altro ancora!
Può essere particolarmente utile per la creazione di produzioni complesse con più livelli e ingressi, in quanto elimina la necessità di commutazione e temporizzazione manuale. Con questo livello, gli utenti possono concentrarsi sulla creazione di contenuti coinvolgenti, mentre il software gestisce la temporizzazione e la sequenza della produzione. Ora, nella versione 2 di questo livello, abbiamo esteso i comandi per portare l'automazione in mimoLive ad un livello completamente nuovo.
Esempio: Livello di automazione

Gli script di automazione in mimoLive non vengono eseguiti in tempo reale
Si noti che la tempistica degli script di automazione in mimoLive potrebbe non essere accurata a causa della natura asincrona delle richieste HTTP richiamate dal motore di rendering video. Questi script si basano su richieste HTTP all'API e la durata di queste richieste non può essere determinata con precisione, con conseguenti potenziali discrepanze di tempistica. Tenete presente questo aspetto quando utilizzate gli script di automazione nel vostro flusso di lavoro di produzione.
Prerequisito
Per far funzionare questo livello è necessario attivare l'opzione HTTP Server in mimoLive per attivare il Controllo Remoto API. Vai a mimoLive -> Preferenze -> Controlli remoti: Selezioni l'opzione "Consenti accesso al controllo remoto". (Attualmente il livello di automazione in mimoLive funziona solo senza password).

Impostare il livello di automazione
Esistono due opzioni su come il livello deve comportarsi dopo essere stato attivato:
Opzione | Comportamento |
---|---|
Spegnimento automatico del livello | Per questa opzione è disponibile un solo script. Una volta elaborato questo script, il livello si disattiva da solo. Questa opzione può essere utilizzata se una sequenza deve essere eseguita una sola volta. |
Spegnimento manuale del livello (ad es. da parte dell'operatore) | In questo caso sono disponibili tre script. Quando il layer viene commutato in modalità live, viene elaborato lo script "On Live". Una volta fatto ciò, lo script "While Live" viene elaborato in un ciclo infinito. Quando il layer viene spento, viene elaborato lo script "Turned Off". Se non si ha bisogno di una determinata fase, si può lasciare vuoto lo script associato. |
Codice sorgente Commenti
Per aiutarvi a ricordare la funzione del vostro script, vi consigliamo di utilizzare i commenti nel vostro script:
// First sleep for 5 seconds...
sleep(5)
// ...then start the stopwatch layer:
layerOn("7C4665C4-0E17-4F63-BCFF-B59D68D75956")
I commenti devono essere in una riga separata.
Comandi di scripting
Il linguaggio di scripting è proprietario e comprende diversi comandi. Questi comandi sono elencati in una scheda informativa nell'anteprima dei livelli sulla destra. Poiché l'elenco potrebbe essere un po' piccolo da leggere, può espandere l'anteprima utilizzando il pulsante situato sopra e a destra dell'area di anteprima.
layerOn()
Questo comando le permette di attivare un livello o una variante di livello.
// switching on a layer by its id
layerOn("4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching on a layer variant by its id
layerOn("4E38A868-DCB5-4E9C-AC75-231764229BFA/variants/5F18C566-F59F-45B4-8D40-27EF289D47B1")
// switching on a layer by its long API Endpoint URL
layerOn("/api/v1/documents/863743527/layers/4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching on a layer with a defined variable
setVariable($myLayerID, "4E38A868-DCB5-4E9C-AC75-231764229BFA")
layerOn($myLayerID)
layerOff(<API ID del livello come Espressione stringa>.)
Questo comando le permette di spegnere un livello o una variante di livello.
// switching off a layer by its id
layerOff("4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching off a layer variant by its id
layerOff("4E38A868-DCB5-4E9C-AC75-231764229BFA/variants/5F18C566-F59F-45B4-8D40-27EF289D47B1")
// switching off a layer by its long API Endpoint URL
layerOff("/api/v1/documents/863743527/layers/4E38A868-DCB5-4E9C-AC75-231764229BFA")
// switching off a layer with a defined variable
setVariable($myLayerID, "4E38A868-DCB5-4E9C-AC75-231764229BFA")
layerOff($myLayerID)
layerSetRecall(<Livello API Imposta ID come espressione stringa>)
Questo comando può essere utilizzato per attivare il richiamo di un determinato Set di livelli.
// recall a Layer Set by its id
layerSetRecall("E6950B7A-7457-44C5-81F7-972D9B04DBC3")
// recall a Layer Set by its long API Endpoint URL
layerSetRecall("/api/v1/documents/863743527/layer-sets/E6950B7A-7457-44C5-81F7-972D9B04DBC3")
// recall a Layer Set with a defined variable
setVariable($myLayerSetID, "E6950B7A-7457-44C5-81F7-972D9B04DBC3")
layerSetRecall($myLayerSetID)
outputOn(<API Output ID di destinazione come espressione di stringa>)
Utilizzare questo comando per attivare una destinazione di uscita.
// avvia una destinazione di output in base al suo id
outputOn("1953186E-4176-4849-A8ED-5B47EE1627BD")
// avvia una destinazione di output tramite il suo URL API Endpoint lungo
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// avvia una destinazione di uscita con una variabile definita
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOn($myOutputDestinationtID)
outputOff(<API Output ID di destinazione come espressione di stringa>)
Utilizzare questo comando per disattivare una destinazione di uscita.
// ferma una destinazione di uscita in base al suo id
outputOff("1953186E-4176-4849-A8ED-5B47EE1627BD")
// ferma una destinazione di output tramite il suo URL API Endpoint lungo
outputOff("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// interrompe una destinazione di uscita con una variabile definita
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOff($myOutputDestinationtID)
getLayerData(1TP11NomeVariabileRisultato, ).
Questo comando combina più comandi in un'unica fase di script: Legge le informazioni sul livello dal server HTTP e memorizza un campo dati specifico dalle risposte JSON in una variabile. È necessario il percorso esatto del valore che desidera leggere. Per i parametri di input dei livelli, questo percorso inizia solitamente con "data.attributes.input-values".
// set up useful variables
setVariable($myScoreboardLayerID, "36FA76B4-11FE-4879-8DE1-307222512712")
setVariable($pathToHomeScore, "data.attributes.input-values.tvGroup_Control__Score_Home")
// read the score for the home team from the Basketball layer
getLayerData($currentHomeScore, $myScoreboardLayerID, $pathToHomeScore)
// The variable $currentHomeScore now contains the Home Score input value of the Basketball Score layer
getObjectIDByName(1TP11NomeVariabileRisultato, ).
Questo comando ottiene l'Endpoint API per un oggetto mimoLive specifico in base al suo nome visualizzato. Tenga presente che il nome visualizzato può essere facilmente modificato dall'operatore mimoLive nell'interfaccia utente mimoLive, e che a sua volta interromperà lo script di automazione se non riesce più a trovare l'oggetto specifico. D'altra parte, questo comando può essere utilizzato per trovare gli endpoint API in modo programmatico, senza la necessità di codificare in modo rigido gli endpoint API nello script.
Le opzioni valide per sono: "source", "layer", "layer-set", "output-destination".
// Get the API Endpoint for the Basketball Score layer
getObjectIDByName($myBasketballScoreLayerID, "layer", "My Basketball Score Keeper")
// switch this layer on
layerOn($myBasketballScoreLayerID)

dormire(<Secondi> come numero)
Il comando sleep() metterà in pausa l'esecuzione dello script per l'intervallo di tempo indicato, espresso in secondi.
// pause the script execution for 12 seconds
sleep(12)
// pause the script execution for 35.6 seconds
sleep(35.6)
// pause the script execution for a time interval specified by a variable
setVariable($mySleepInterval, 17)
sleep($mySleepInterval)
sleepUntil(<Tempo come espressione di stringa>)
Il comando sleepUntil() permette allo script di fermarsi fino al raggiungimento dell'ora specificata. Se il tempo è già trascorso, lo script attende fino al giorno successivo. Il formato dell'ora è HH:MM o HH:MM:SS in un periodo di 24 ore.
// sleep until 5:15pm
sleepUntil("17:15:00")
// sleep until 9:12am
sleepUntil("9:12")
// sleep until a time specified by a variable
setVariable($myWakeUpTime, "9:41")
sleepUntil($myWakeUpTime)
sleepOnTheMinute()
Questo comando di script mette in pausa lo script fino al raggiungimento della prossima frazione di ora 'al minuto'.
// go on every 20 minutes: on the hour, 20 and 40 minutes past the hour:
sleepOnTheMinute(20)
// go on "on the hour"
sleepOnTheMinute(60)
// go on every 10 minutes past the hour (specified by a variable)
setVariable($myWakeUpMinute, 10)
sleepOnTheMinute($myWakeUpMinute)
setVariabile($variableName, <valore>)
Per definire una variabile locale, utilizzi il comando setVariable
. Deve specificare un nome di variabile (che inizia con un $
) e il valore che questa variabile deve contenere. Il valore può essere un numero, un testo (racchiuso tra virgolette) o i valori booleani true
e false
.
setVariable($myText, "This is a text")
setVariable($myNumber, 15.73)
setVariable($myBoolValue, false)
setGlobal($variableName, <valore>)
Una variabile globale può essere utilizzata sia nel livello corrente che in qualsiasi livello di automazione superiore. Questa funzionalità è particolarmente utile per condividere le stesse informazioni su più livelli di automazione, come ad esempio i punti finali API di un determinato livello. Per il valore della variabile, si applicano le stesse regole del comando setVariable
.
Tenga presente che le variabili globali sono accessibili ad altri livelli di automazione finché il livello di origine è attivo. Questa disposizione consente di cambiare le variabili globali attivando un livello diverso con definizioni di variabili globali distinte. La prassi migliore in questo scenario è impostare l'opzione 'Switch Layer Off' del livello di automazione su 'Manualmente' e definire le variabili globali nello script 'On Live'.
setGlobal($myGlobalText, "This is a text")
setGlobal($myGlobalNumber, 15.73)
setGlobal($myGlobalBoolValue, false)
concat($resultVariableName, )
Questo comando di script concatena le stringhe e memorizza il risultato come una stringa.
// define some variables
setVariable($myVariableA, "This is")
setVariable($myVariableB, "text.")
// concatenate those variables and store the result into a new one
concat($myResultVariable, $myVariableA + " a " + $myVariableB)
// The variable $myResultVariable contains "This is a text.".
math(1TP11NomeVariabile Risultato, )
Questo comando esegue semplici calcoli matematici, tra cui addizione (+), sottrazione (-), moltiplicazione (*) e divisione (/). Tenga presente che i calcoli vengono eseguiti nell'ordine in cui appaiono e NON seguono la regola PEMDAS/BODMAS.
// define some variables
setVariable($myVariableA, 3)
setVariable($myVariableB, 5)
// perform the calculation
math($myResult, $myVariableA + 2 * $myVariableB)
// The result in $myResult is 25 (!) and not 13
if(, , ) [else] endif
Questa istruzione if
confronta due espressioni numeriche utilizzando un comparatore specificato. Se il confronto è vero, vengono eseguiti i comandi successivi. Altrimenti, i comandi successivi vengono saltati fino a quando non viene raggiunto un else
o un endif
.
I comparatori validi sono:
“==” | uguale |
“!=” | non uguale |
">" | maggiore di |
"<" | meno di |
">=" | maggiore o uguale a |
"<=" | inferiore o uguale a |
// define a variable
setVariable($myVariable, 3)
// test if the variable is bigger than 10
if($myVariable, ">", 10)
setVariable($text, "is bigger than 10")
else
setVariable($text, "is less or equal 10")
endif
// The result in $text is "is less or equal 10"
ifString(, , ) [else] endif
Questa istruzione ifString
confronta due espressioni di stringa utilizzando un comparatore specificato. Il confronto si basa sul codice dei caratteri ASCII di ciascuna lettera delle stringhe. Se il confronto è vero, vengono eseguiti i comandi successivi. Altrimenti, i comandi successivi vengono saltati fino a quando non viene raggiunto un else
o endif
.
Per i comparatori validi, veda il comando if.
// define a variable
setVariable($myVariable, "mimoLive")
// test if the variable is "mimoLive"
if($myVariable, "==", "mimoLive")
setVariable($text, "yes")
else
setVariable($text, "no")
endif
// The result in $text is "yes"
ifLayerIsOn(<API ID del livello come Espressione stringa>.) - ifLayerIsOff(<API ID del livello come Espressione stringa>.) [else] endif
Queste dichiarazioni if
verificano se un determinato livello è attualmente attivo o meno. Se la condizione specificata è soddisfatta (il livello è acceso o spento), vengono elaborati i comandi successivi. Altrimenti, i comandi successivi vengono saltati fino a quando non viene raggiunto un else
o endif
.
setVariable($myLayerA, "D6A326CA-72E6-45E5-836D-9795F8F534F4")
setVariable($myLayerB, "8C58DEA7-CCBE-44CB-A60F-97C5BD456C68")
ifLayerIsOn($myLayerA)
// the layer is live, switch it off
layerOff($myLayerA)
else
// the layer is currently off, switch it on
layerOn($myLayerA)
endif
ifLayerIsOff($myLayerB)
// the layer is currently off, switch it on
layerOn($myLayerB)
endif
ifLayerSetIsActive(<API ID del livello come Espressione stringa>.) - ifLayerSetIsInactive(<API ID del livello come Espressione stringa>.) [else] endif
Queste dichiarazioni if
verificano se un determinato Layer Set è attualmente attivo o meno. In caso affermativo, vengono elaborati i comandi successivi. Altrimenti, i comandi successivi vengono saltati fino a quando non viene raggiunto un else
o endif
.
setVariable($myLayerSetA, "CEF07AFA-B552-40F8-821C-CF424EB93500")
setVariable($myLayerSetB, "E4B15B8B-EE34-4CCE-BDE7-58120A65E83A")
setVariable($myLayer, "8C58DEA7-CCBE-44CB-A60F-97C5BD456C68")
ifLayerSetIsActive($myLayerSetA)
// the layer set A is active, switch layer on
layerOn($myLayer)
else
// the layer set A is currently inactive, switch the layer off
layerOff($myLayer)
endif
ifLayerSetIsInactive($myLayerSetB)
// the layer set B is currently inactive, switch the layer off
layerOn($myLayer)
endif
ifLayerData(, , , ) [else] endif
Questo comando complesso le permette di testare qualsiasi parametro di un livello che il programma HTTP API fornisce. Deve specificare un livello tramite il suo ID API, il percorso della chiave all'interno dei dati JSON restituiti dall'API HTTP, un comparatore (come una stringa tra virgolette, ad esempio, "=="
), e un valore.
I valori validi del comparatore sono:
“==” | uguale |
“!=” | non uguale |
">" | maggiore di |
"<" | meno di |
">=" | maggiore o uguale a |
"<=" | inferiore o uguale a |
// Example: Testing if the audio volume is turned up on a layer
setVariable($myLayerA, "D6A326CA-72E6-45E5-836D-9795F8F534F4")
setVariable($myLayerB, "8C58DEA7-CCBE-44CB-A60F-97C5BD456C68")
ifLayerData($myLayerA,"data.attributes.volume",">",0.5)
// The audio volume is bigger than 0.5 so turn layer B on
layerOn($myLayerB)
else
// The volume is lower than 0.5, lets turn layer B off
layerOff($myLayerB)
endif
loop([]) [break] endloop
Il comando loop
le permette di eseguire il codice più volte. Se non specifica il numero di iterazioni, il ciclo verrà eseguito all'infinito. Il comando break
le permette di uscire dal ciclo in qualsiasi momento. endloop
è necessario per contrassegnare la fine del blocco di comando che deve essere eseguito in loop.
setVariable($myLayerA, "D6A326CA-72E6-45E5-836D-9795F8F534F4")
// blink layer A 4 times
loop(4)
layerOn(setVariable(myLayerA)
sleep(1)
layerOff(setVariable(myLayerA)
sleep(1)
endloop
// wait for volume of layer A will be bigger than 0.5
loop()
ifLayerData($myLayerA,"data.attributes.volume",">",0.5)
// The audio volume is bigger than 0.5 exit the loop now
break
endif
sleep(1)
endloop
httpRequest()
Il httpRichiesta()
attiva l'URL indicato. Ciò offre una grande flessibilità nel modo in cui può utilizzare questo comando di script. In mimoLive
Può anche attivare azioni in altri documenti o script remoti. Per maggiori dettagli su mimoLive
Comandi API HTTP, consulti la sezione HTTP API per esplorare tutte le possibili chiamate API.
// accendere un livello
httpRequest("http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B/setLive")
httpRequestJSON($resultVariableName, )
Questo comando legge la risposta della chiamata HTTP come JSON e memorizza i dati nella variabile di risultato specificata. Successivamente, potrà accedere ai dati tramite il comando getJSONData()
.
getJSONData($resultVariableName, $jsonDataVariable, )
Questo comando recupera un valore di dati specifico da una struttura JSON memorizzata in una variabile. Deve specificare la variabile che contiene i dati JSON ($jsonDataVariabile), il percorso dei dati all'interno della struttura JSON () e la variabile in cui deve essere memorizzato il risultato ($resultVariableName). Ciò consente un'estrazione precisa dei dati per un'ulteriore elaborazione o per l'utilizzo nel suo script.
// ottenere tutti i dati di un livello
httpRequestJSON($myLayerData, "http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B")
// ottenere il valore del quadrante del volume
getJSONData($volumenDial, $myLayerData, "data.attributes.volume")// Ora, la variabile $volumenDial conterrà un valore tra 0 e 1.
> Punto di interruzione del debugger
Quando il debugger di script è abilitato e la modalità di debug è impostata su 'Continuamente', l'esecuzione dello script si fermerà in corrispondenza di questo marcatore e attenderà fino a quando l'operatore mimoLive farà clic sul pulsante 'Passo successivo'. Per ulteriori informazioni sulle possibilità di debug, consulti la sezione 'Best Practices - Debug degli script'.
Tipi di dati
API Punti finali
Il parametro deve essere un endpoint API per un livello, una variante di livello, un set di livelli, una sorgente o una destinazione di output. Può ottenere questi Endpoint API facendo clic con il pulsante destro del mouse sull'oggetto nel documento mimoLive. Dovrebbe apparire un menu contestuale con una voce di menu 'Copia Endpoint API negli Appunti'.
Questa azione copierà il punto finale API di questo oggetto negli appunti. Se lo incolla altrove, avrà un aspetto simile a questo:
/api/v1/documents/863743527/layers/D6A326CA-72E6-45E5-836D-9795F8F534F4
/api/v1/documents/863743527/layers/68F63C8F-2376-4CA3-9764-CC17CBFC5F8D/variants/3FF72CC3-AF80-4252-A879-F8AFD68DB922
/api/v1/documents/863743527/layer-sets/E6950B7A-7457-44C5-81F7-972D9B04DBC3
Per i comandi relativi ai livelli, può ridurre il API I punti finali alla parte importante solo rimuovendo il prefisso "/api/v1/documents//layers/" . Questo renderà il suo script più breve, come mostrato qui:
// switching on a layer:
layerOn("/api/v1/documents/863743527/layers/D6A326CA-72E6-45E5-836D-9795F8F534F4")
// OR
layerOn("D6A326CA-72E6-45E5-836D-9795F8F534F4")
// switching on a variant:
layerOn("/api/v1/documents/863743527/layers/68F63C8F-2376-4CA3-9764-CC17CBFC5F8D/variants/3FF72CC3-AF80-4252-A879-F8AFD68DB922")
// OR
layerOn("68F63C8F-2376-4CA3-9764-CC17CBFC5F8D/variants/3FF72CC3-AF80-4252-A879-F8AFD68DB922")
Le migliori pratiche
Endpoint API
Come ottenere gli endpoint API
- Cliccando con il tasto destro del mouse sul livello e selezionando "Copia endpoint API".
- utilizzando il comando getAPIEndpoint() (vedere la documentazione).
Indirizzare gli endpoint API
Può utilizzare l'endpoint API completo o rimuovere la parte "/api/v1/documents//" per assicurarsi che il suo script funzioni anche quando viene copiato in un altro documento. Tuttavia, l'ID del documento è importante se desidera indirizzare un punto API in un altro documento mimoLive.
Script di debug
C'è un debugger di script incorporato nel livello Automazione. Può passare il livello in modalità di debug impostando il parametro del livello 'Debug' su on.
TBD.
Idee di scripting
Pubblicare un annuncio ogni 10 minuti
In combinazione con un'opzione "PIP Il livello "Finestra" e una "sorgente Playlist multimediale" contenente più brevi filmati pubblicitari consentono di riprodurre una pubblicità ogni 10 minuti. Assicurarsi di deselezionare l'opzione "Non-Stop" nella sorgente Media Playlist. In questo modo ogni volta che la PIP Se la finestra è impostata su "live", riproduce un annuncio dalla sorgente Playlist e si spegne. Dopo 10 minuti verrà riprodotto l'annuncio successivo.
Eseguire un pungiglione prima di passare a un determinato livello.
È necessario preparare un breve video stinger che avrà una transizione interna fino a coprire tutto lo schermo (ad esempio, dopo 1 secondo). Dopo 1 secondo si passa in diretta al livello che si desidera rivelare. Posizionare questo livello sotto il livello che riproduce il video stinger. Ora che il video stinger copre lo schermo, la commutazione del livello sottostante non può essere vista. Il video stinger dovrebbe continuare a rivelare il livello sottostante. Assicurarsi che il video stinger sia renderizzato con il codec video ProRes4444, in modo da avere la trasparenza necessaria per la transizione.
Creare un'apertura di spettacolo complessa
Poiché è possibile attivare e disattivare i livelli uno dopo l'altro per un periodo di tempo più lungo, è possibile avere più livelli di testo o di annotazione, livelli di piazzamento che mostrano la grafica o persino terzi inferiori che riempiono lo schermo per creare il proprio spettacolo animato. Siate creativi!
Attivare un telecomando HTTP URL con un tocco sulla superficie del telecomando
Se è necessario attivare un HTTP Richiesta tramite un pulsante sul vostro Superficie di controllo remoto è possibile aggiungere un livello di automazione alla pila di livelli e impostare l'opzione "Switch Layer Off" di tale livello su "Automatically". Ora è possibile inserire un singolo comando httpRequest() nel campo di script "On Live". Sulla superficie di controllo remoto aggiungere il pulsante Live di questo livello al layout. Una volta premuto questo pulsante sulla superficie di controllo remoto, il HTTP sarà eseguita la richiesta.