Rationalisez votre production avec la couche d'automatisation de mimoLive
La couche d'automatisation mimoLive a été développée à l'origine comme une preuve de concept, mais elle s'est depuis révélée être un outil incroyablement utile pour les utilisateurs. Cette couche peut être utilisée pour automatiser l'activation et la désactivation des couches dans une séquence spécifique ou à des moments prédéterminés, pour transporter des informations d'une couche à l'autre, pour démarrer et interrompre un projet ou une activité. Destinations de sortieet bien d'autres choses encore !
Il peut s'avérer particulièrement utile pour créer des productions complexes avec plusieurs couches et entrées, car il élimine la nécessité d'une commutation et d'une synchronisation manuelles. Grâce à cette couche, les utilisateurs peuvent se concentrer sur la création d'un contenu attrayant, tandis que le logiciel se charge de la synchronisation et du séquençage de leur production. Dans la version 2 de cette couche, nous avons étendu les commandes pour porter l'automatisation dans mimoLive à un tout autre niveau.
Exemple : Couche d'automatisation
Les scripts d'automatisation dans mimoLive ne s'exécutent pas en temps réel
Veuillez noter que la synchronisation des scripts d'automatisation dans mimoLive peut ne pas être exacte en raison de la nature asynchrone des requêtes HTTP appelées par le moteur de rendu vidéo. Ces scripts reposent sur des requêtes HTTP à l'API et la durée de ces requêtes ne peut pas être déterminée avec précision, ce qui peut entraîner des écarts de synchronisation. Gardez cela à l'esprit lorsque vous utilisez des scripts d'automatisation dans votre flux de production.
Prérequis
Pour que ce calque fonctionne, vous devez activer la fonction HTTP dans mimoLive pour activer le contrôle à distance. API. Aller à mimoLive -> Préférences -> Télécommandes: Cochez l'option "Autoriser l'accès au contrôle à distance". (Actuellement, la couche d'automatisation de mimoLive ne fonctionne que sans mot de passe).
Mise en place de la couche d'automatisation
Il y a deux options sur la façon dont la couche doit se comporter après avoir été commutée en direct :
Option | Comportement |
---|---|
Désactivation automatique de la couche | Pour cette option, il n'y a qu'un seul script disponible. Une fois ce script traité, le calque s'éteint de lui-même. Cette option peut être utilisée lorsqu'une séquence ne doit être exécutée qu'une seule fois. |
Éteindre le calque manuellement (par exemple, par l'opérateur) | Dans ce cas, trois scripts sont disponibles. Lorsque le calque est mis en ligne, le script "On Live" est traité. Une fois que cela est fait, le script "While Live" est traité dans une boucle sans fin. Lorsque la couche est désactivée, le script "Turned Off" est traité. Si vous n'avez pas besoin d'une certaine phase, vous pouvez laisser le script associé vide. |
Code source Commentaires
Pour vous aider à vous souvenir de la fonction de votre script, nous vous recommandons d'utiliser des commentaires dans votre script :
// First sleep for 5 seconds...
sleep(5)
// ...then start the stopwatch layer:
layerOn("7C4665C4-0E17-4F63-BCFF-B59D68D75956")
Les commentaires doivent figurer sur une ligne distincte.
Commandes de script
Le langage de script est propriétaire et comprend plusieurs commandes. Ces commandes sont répertoriées dans une liste d'astuces dans l'aperçu des calques sur la droite. Comme la liste peut être un peu courte à lire, vous pouvez agrandir l'aperçu en utilisant le bouton situé au-dessus et à droite de la zone d'aperçu.
layerOn()
Cette commande vous permet d'activer un calque ou une variante de calque.
// 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 de la couche en tant que chaîne Expression>)
Cette commande vous permet de désactiver un calque ou une variante de calque.
// 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(<Couche API Set ID as String Expression>)
Cette commande peut être utilisée pour déclencher le rappel d'un certain nombre d'éléments. Jeu de couches.
// 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(<ID de destination de sortie de l'API sous forme d'expression de chaîne>)
Cette commande permet d'activer une destination de sortie.
// démarre une destination de sortie par son identifiant
outputOn("1953186E-4176-4849-A8ED-5B47EE1627BD")
// démarre une destination de sortie par l'URL de son point de terminaison API long
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// démarre une destination de sortie avec une variable définie
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOn($myOutputDestinationtID)
outputOff(<ID de destination de sortie de l'API sous forme d'expression de chaîne>)
Utilisez cette commande pour désactiver une destination de sortie.
// arrêter une destination de sortie par son identifiant
outputOff("1953186E-4176-4849-A8ED-5B47EE1627BD")
// arrêtez une destination de sortie par l'URL de son point de terminaison API long
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// arrêter une destination de sortie avec une variable définie
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOff($myOutputDestinationtID)
getLayerData($resultVariableName, , )
Cette commande combine plusieurs commandes en une seule action de script : Elle lit les informations sur la couche à partir du serveur HTTP et stocke un champ de données spécifique des réponses JSON dans une variable. Vous devez connaître le chemin d'accès exact à la valeur que vous souhaitez lire. Pour les paramètres d'entrée des couches, ce chemin commence généralement par "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($resultVariableName, , )
Cette commande permet d'obtenir le point de terminaison API d'un objet mimoLive spécifique par son nom d'affichage. Sachez que le nom d'affichage peut facilement être modifié par l'opérateur mimoLive dans l'interface utilisateur mimoLive, ce qui entraînera l'interruption du script d'automatisation s'il ne peut plus trouver l'objet spécifique. D'autre part, cette commande peut être utilisée pour trouver les points de terminaison de l'API de manière programmatique sans qu'il soit nécessaire de coder en dur les points de terminaison de l'API dans le script.
Les options valables pour
// Get the API Endpoint for the Basketball Score layer
getObjectIDByName($myBasketballScoreLayerID, "layer", "My Basketball Score Keeper")
// switch this layer on
layerOn($myBasketballScoreLayerID)
dormir(<Secondes> en tant que nombre)
La commande sleep() interrompt l'exécution du script pendant l'intervalle de temps donné, exprimé en secondes.
// 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(<Temps en tant qu'expression de chaîne>)
La commande sleepUntil() permet au script de se mettre en pause jusqu'à ce que l'heure spécifiée soit atteinte. Si l'heure est déjà passée, le script attend le jour suivant. Le format de l'heure est HH:MM ou HH:MM:SS dans une période de 24 heures.
// 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()
Cette commande de script met le script en pause jusqu'à ce que la prochaine fraction d'heure "à la minute" soit atteinte.
// 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)
setVariable($variableName, <valeur>)
Pour définir une variable locale, utilisez la fonction setVariable
. Vous devez spécifier un nom de variable (commençant par un $
) et la valeur que cette variable doit contenir. La valeur peut être un nombre, du texte (entre guillemets) ou les valeurs booléennes vrai
et faux
.
setVariable($myText, "This is a text")
setVariable($myNumber, 15.73)
setVariable($myBoolValue, false)
setGlobal($variableName, <valeur>)
Une variable globale peut être utilisée à la fois dans la couche courante et dans toutes les couches d'automatisation situées au-dessus d'elle. Cette fonctionnalité est particulièrement utile pour partager la même information entre plusieurs couches d'automatisation, comme les points de terminaison de l'API d'une certaine couche. Pour la valeur de la variable, les mêmes règles s'appliquent que pour la variable setVariable
commande.
Veuillez noter que les variables globales sont accessibles aux autres couches d'automatisation tant que la couche d'origine est active. Cette disposition vous permet de changer de variables globales en activant une couche différente avec des définitions de variables globales distinctes. La meilleure pratique dans ce scénario est de définir l'option "Switch Layer Off" de la couche d'automatisation sur "Manually" et de définir les variables globales dans le script "On Live".
setGlobal($myGlobalText, "This is a text")
setGlobal($myGlobalNumber, 15.73)
setGlobal($myGlobalBoolValue, false)
concat($resultVariableName, )
Cette commande de script concatène des chaînes de caractères et stocke le résultat sous forme de chaîne.
// 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($resultVariableName, )
Cette commande permet d'effectuer des calculs mathématiques simples, y compris l'addition (+), la soustraction (-), la multiplication (*) et la division (/). Veuillez noter que les calculs sont effectués dans l'ordre dans lequel ils apparaissent et ne suivent PAS la règle 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
Le présent si
compare deux expressions numériques à l'aide d'un comparateur spécifié. Si la comparaison est vraie, la ou les commandes suivantes sont exécutées. Dans le cas contraire, les commandes suivantes sont ignorées jusqu'à ce qu'une commande autre
ou endif
est atteint.
Les comparateurs valides sont les suivants :
“==” | équivaut |
“!=” | n'est pas égal |
">" | supérieur à |
"<" | moins de |
">=" | supérieur ou égal à |
"<=" | inférieur ou égal à |
// 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
Le présent ifString
compare deux expressions de chaînes de caractères à l'aide d'un comparateur spécifié. La comparaison est basée sur le code ASCII de chaque lettre des chaînes. Si la comparaison est vraie, les commandes suivantes sont exécutées. Dans le cas contraire, les commandes suivantes sont ignorées jusqu'à ce qu'une instruction autre
ou endif
est atteint.
Pour les comparateurs valides, voir la commande 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 de la couche en tant que chaîne Expression>) - ifLayerIsOff(<API ID de la couche en tant que chaîne Expression>) [else] endif
Ces si
testent si une certaine couche est actuellement active ou non. Si la condition spécifiée est remplie (la couche est activée ou désactivée), les commandes suivantes sont traitées. Dans le cas contraire, les commandes suivantes sont ignorées jusqu'à ce qu'une instruction autre
ou endif
est atteint.
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 de la couche en tant que chaîne Expression>) - ifLayerSetIsInactive(<API ID de la couche en tant que chaîne Expression>) [else] endif
Ces si
Les déclarations testent si une certaine Jeu de couches est en cours ou non. Si c'est le cas, les commandes suivantes sont traitées. Dans le cas contraire, les commandes suivantes sont ignorées jusqu'à ce qu'une commande autre
ou endif
est atteint.
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
Cette commande complexe vous permet de tester n'importe quel paramètre d'une couche que l'application HTTP API fournit. Vous devez spécifier une couche par son ID API, le chemin clé dans les données JSON renvoyées par l'API HTTP, un comparateur (sous la forme d'une chaîne entre guillemets, par exemple, "=="
) et une valeur.
Les valeurs valables du comparateur sont les suivantes :
“==” | équivaut |
“!=” | n'est pas égal |
">" | supérieur à |
"<" | moins de |
">=" | supérieur ou égal à |
"<=" | inférieur ou égal à |
// 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
Le site boucle
vous permet d'exécuter du code plusieurs fois. Si vous ne précisez pas le nombre d'itérations, la boucle s'exécutera indéfiniment. La commande pause
vous permet de quitter la boucle à tout moment. endloop
est nécessaire pour marquer la fin du bloc de commande qui doit être bouclé.
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()
Le site httpRequest()
déclenche l'URL donnée. Cela offre une grande flexibilité dans l'utilisation de cette commande de script. Dans le cas d'un mimoLive
Il peut même déclencher des actions dans d'autres documents ou des scripts distants. Pour plus d'informations sur les mimoLive
Pour les commandes de l'API HTTP, veuillez consulter la page HTTP API pour explorer tous les appels d'API possibles.
// activation d'une couche
httpRequest("http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B/setLive")
httpRequestJSON($resultVariableName, )
Cette commande lit la réponse de l'appel HTTP au format JSON et stocke les données dans la variable de résultat spécifiée. Ensuite, vous pouvez accéder aux données via la commande getJSONData()
commande.
getJSONData($resultVariableName, $jsonDataVariable, )
Cette commande permet de récupérer une valeur de données spécifique à partir d'une structure JSON stockée dans une variable. Vous devez spécifier la variable contenant les données JSON ($jsonDataVariable
), le chemin d'accès aux données dans la structure JSON (), et la variable dans laquelle le résultat doit être stocké (
$resultVariableName
). Cela permet une extraction précise des données pour un traitement ultérieur ou une utilisation dans votre script.
// obtenir toutes les données d'une couche
httpRequestJSON($myLayerData, "http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B")
// obtenir la valeur de la molette de volume
getJSONData($volumenDial, $myLayerData, "data.attributes.volume")// Maintenant, la variable $volumenDial contiendra une valeur entre 0 et 1.
> Point d'arrêt du débogueur
Lorsque le débogueur de script est activé et que le mode de débogage est défini sur "En continu", l'exécution du script s'arrête à ce marqueur et attend que l'opérateur mimoLive clique sur le bouton "Étape suivante". Pour plus d'informations sur les possibilités de débogage, reportez-vous à la section "Meilleures pratiques - Débogage des scripts".
Types de données
API Points finaux
Le paramètre doit être un point de terminaison API pour une couche, une variante de couche, un ensemble de couches, une source ou une destination de sortie. Vous pouvez obtenir ces points de terminaison API en cliquant avec le bouton droit de la souris sur l'objet dans le document mimoLive. Un menu contextuel devrait apparaître avec un élément de menu " Copier le point de terminaison API dans le presse-papiers ".
Cette action copiera le point de terminaison de l'API pour cet objet dans le presse-papiers. Si vous le collez ailleurs, il ressemblera à ceci :
/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
Pour les commandes liées à la couche, vous pouvez réduire la API Les points d'accès à la partie importante uniquement en supprimant le préfixe "/api/v1/documents//layers/" . Votre script sera ainsi plus court, comme le montre l'illustration ci-dessous :
// 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")
Meilleures pratiques
Points d'extrémité de l'API
Comment obtenir les points de terminaison de l'API
- En cliquant avec le bouton droit de la souris sur le calque et en sélectionnant "Copy API Endpoint" (copier le point de terminaison de l'API)
- en utilisant la commande getAPIEndpoint() (voir documentation)
Adressage des points d'extrémité de l'API
Vous pouvez utiliser le point de terminaison API complet ou supprimer la partie "/api/v1/documents//" pour vous assurer que votre script fonctionne également lorsqu'il est copié dans un autre document. Toutefois, l'identifiant du document est important si vous souhaitez utiliser un point API dans un autre document mimoLive.
Débogage des scripts
Un débogueur de scripts est intégré au calque d'automatisation. Vous pouvez passer le calque en mode débogage en activant le paramètre de calque "Debug".
TBD.
Idées de script
Diffuser une annonce toutes les 10 minutes
En combinaison avec un "PIP Window" et une "Media Playlist source" contenant plusieurs courts clips publicitaires, vous pouvez lire une publicité toutes les 10 minutes. Veillez à décocher l'option "Non-Stop" dans la source Media Playlist. Ainsi, chaque fois que la PIP Si la fenêtre est réglée sur "live", elle lira une publicité à partir de la source de la liste de lecture et s'éteindra d'elle-même. Au bout de 10 minutes, la publicité suivante est diffusée.
Lancez un stinger avant de passer à une certaine couche.
Vous devez préparer une courte vidéo d'introduction qui aura une transition vers l'intérieur jusqu'à ce qu'elle couvre tout l'écran (par exemple, après 1 seconde). Au bout d'une seconde, vous passez en direct le calque que vous souhaitez révéler. Placez ce calque sous le calque qui lit la vidéo stinger. Maintenant que la vidéo stinger couvre l'écran, la commutation du calque situé en dessous n'est plus visible. La vidéo stinger doit continuer à révéler le calque du dessous. Veillez à ce que la vidéo stinger soit rendue avec le codec vidéo ProRes4444 afin qu'elle comporte la transparence nécessaire à la transition.
Créer une ouverture de spectacle complexe
Comme vous pouvez activer et désactiver les calques les uns après les autres sur une longue période, vous pouvez avoir plusieurs calques de texte ou d'annotation, un calque d'insertion affichant des graphiques ou même des tiers inférieurs qui remplissent l'écran pour créer votre propre ouverture de spectacle animée. Soyez créatif !
Déclencher une télécommande HTTP URL en tapant sur la surface de la télécommande
Si vous devez déclencher un HTTP Demande par un bouton sur votre Surface de contrôle à distance vous pouvez ajouter un calque d'automatisation à votre pile de calques et régler l'option "Désactiver le calque" de ce calque sur "Automatiquement". Vous pouvez maintenant insérer une seule commande httpRequest() dans le champ de script "On Live". Sur votre surface de contrôle à distance, ajoutez le bouton Live de ce calque à la mise en page. Une fois que vous aurez appuyé sur ce bouton sur votre surface de contrôle à distance, la commande HTTP sera effectuée.