Effektivisera din produktion med mimoLives automatiseringslager
mimoLive Automation Layer utvecklades ursprungligen som ett proof of concept men har sedan dess visat sig vara ett otroligt användbart verktyg för användarna. Detta lager kan användas för att automatisera på- och avstängning av lager i en specifik sekvens eller vid förutbestämda tidpunkter, transportera information från ett lager till ett annat, starta och stoppa Utgångsdestinationeroch mycket mer!
Det kan vara särskilt användbart för att skapa komplexa produktioner med flera lager och ingångar, eftersom det eliminerar behovet av manuell växling och timing. Med detta lager kan användarna fokusera på att skapa engagerande innehåll medan programvaran hanterar timing och sekvensering av deras produktion. Nu, i version 2 av detta lager, har vi utökat kommandona för att ta automatiseringen i mimoLive till en helt ny nivå.
Exempel: Automatiseringslager
Automationsskript i mimoLive körs inte i realtid
Observera att tidpunkten för automatiseringsskript i mimoLive kanske inte är exakt på grund av den asynkrona karaktären hos HTTP-förfrågningar som anropas av videorenderingsmotorn. Dessa skript är beroende av HTTP-förfrågningar till API och längden på dessa förfrågningar kan inte fastställas exakt, vilket resulterar i potentiella tidsavvikelser. Tänk på detta när du använder automatiseringsskript i ditt produktionsarbetsflöde.
Förkunskapskrav
För att få detta lager att fungera måste du aktivera HTTP Server i mimoLive för att aktivera fjärrkontrollen API. Gå till mimoLive -> Inställningar -> Fjärrkontroller: Markera alternativet "Tillåt åtkomst till fjärrkontroll". (För närvarande fungerar automationslagret i mimoLive endast utan lösenord)
Ställ in automatiseringslagret
Det finns två alternativ för hur lagret ska bete sig efter att det kopplats live:
Alternativ | Uppförande |
---|---|
Slå av skiktet automatiskt | För detta alternativ finns endast ett skript tillgängligt. När detta skript har bearbetats kommer lagret att stänga av sig självt. Detta alternativ kan användas om en sekvens ska utföras en gång. |
Slå av lagret manuellt (t.ex. av operatören) | I detta fall finns det tre tillgängliga skript. När lagret kopplas live kommer "On Live"-skriptet att bearbetas. När detta är gjort bearbetas skriptet "While Live" i en oändlig slinga. När lagret stängs av bearbetas skriptet "Turned Off". Om du inte har behov av en viss fas kan du lämna det tillhörande skriptet tomt. |
Källa Kod Kommentarer
För att hjälpa dig att komma ihåg funktionen i ditt skript rekommenderar vi att du använder kommentarer i ditt skript:
// First sleep for 5 seconds...
sleep(5)
// ...then start the stopwatch layer:
layerOn("7C4665C4-0E17-4F63-BCFF-B59D68D75956")
Kommentarer måste skrivas på en separat rad.
Kommandon för skript
Skriptspråket är proprietärt och innehåller flera kommandon. Dessa kommandon listas i en fusklapp i förhandsgranskningen av lager till höger. Eftersom listan kan vara lite liten att läsa kan du expandera förhandsgranskningen med hjälp av knappen ovanför och till höger om förhandsgranskningsområdet.
layerOn()
Med detta kommando kan du slå på ett lager eller en lagervariant.
// 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 Layer ID som sträng Expression>)
Med detta kommando kan du stänga av ett lager eller en lagervariant.
// 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(<API-lager Ange ID som sträng Uttryck>)
Detta kommando kan användas för att utlösa återkallelsen för en viss Lageruppsättning.
// 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-utmatning Destinations-ID som stränguttryck>)
Använd detta kommando för att aktivera en utdatadestination.
// starta en Output Destination med dess id
outputOn("1953186E-4176-4849-A8ED-5B47EE1627BD")
// starta en Output Destination med dess långa API Endpoint URL
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// starta en Output Destination med en definierad variabel
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOn($myOutputDestinationtID)
outputOff(<API-utmatning Destinations-ID som stränguttryck>)
Använd detta kommando för att stänga av en utmatningsdestination.
// stoppa en utmatningsdestination med dess id
outputOff("1953186E-4176-4849-A8ED-5B47EE1627BD")
// stoppa en Output Destination med dess långa API Endpoint URL
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// stoppa en Output Destination med en definierad variabel
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOff($myOutputDestinationtID)
getLayerData($resultatVariabelNamn, , )
Detta kommando kombinerar flera kommandon i ett skriptsteg: Det läser lagerinformationen från HTTP-servern och lagrar ett specifikt datafält från JSON-meddelandena i en variabel. Du behöver den exakta sökvägen till det värde du vill läsa. För inmatningsparametrar för lager börjar denna sökväg vanligtvis med "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($resultatVariabelNamn, , )
Detta kommando hämtar API-slutpunkten för ett specifikt mimoLive-objekt genom dess visningsnamn. Tänk på att visningsnamnet enkelt kan ändras av mimoLive-operatören i mimoLive-användargränssnittet, vilket i sin tur kommer att bryta automatiseringsskriptet om det inte kan hitta det specifika objektet längre. Å andra sidan kan detta kommando användas för att hitta API-slutpunkter programmatiskt utan att behöva hårdkoda API-slutpunkterna i skriptet.
Giltiga alternativ för
// Get the API Endpoint for the Basketball Score layer
getObjectIDByName($myBasketballScoreLayerID, "layer", "My Basketball Score Keeper")
// switch this layer on
layerOn($myBasketballScoreLayerID)
sova(<Sekunder> som nummer)
Kommandot sleep() pausar exekveringen av skriptet under det angivna tidsintervallet uttryckt i sekunder.
// 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(<Tid as String Uttryck>)
Med kommandot sleepUntil() kan skriptet pausa tills den angivna tiden har uppnåtts. Om tiden redan har passerat väntar skriptet till nästa dag. Formatet för tiden är HH:MM eller HH:MM:SS i en 24-timmarsperiod.
// 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()
Detta skriptkommando pausar skriptet tills nästa "på minuten"-del av en timme har uppnåtts.
// 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($variabelNamn, <värde>)
För att definiera en lokal variabel använder du setVariabel
kommandot. Du måste ange ett variabelnamn (som börjar med ett $
) och det värde som variabeln ska innehålla. Värdet kan vara ett tal, text (inom citationstecken) eller de booleska värdena sant
och falska
.
setVariable($myText, "This is a text")
setVariable($myNumber, 15.73)
setVariable($myBoolValue, false)
setGlobal($variabelNamn, <värde>)
En global variabel kan användas både i det aktuella lagret och i alla Automation-lager ovanför det. Denna funktion är särskilt användbar för att dela samma information över flera Automationslager, t.ex. API-slutpunkterna för ett visst lager. För variabelns värde gäller samma regler som för setVariabel
kommando.
Observera att globala variabler är tillgängliga för andra Automation-lager så länge som det ursprungliga lagret är aktivt. Detta arrangemang gör att du kan byta globala variabler genom att aktivera ett annat lager med distinkta globala variabeldefinitioner. Bästa praxis i detta scenario är att ställa in alternativet "Switch Layer Off" för automationslagret till "Manually" och definiera de globala variablerna i skriptet "On Live".
setGlobal($myGlobalText, "This is a text")
setGlobal($myGlobalNumber, 15.73)
setGlobal($myGlobalBoolValue, false)
concat($resultVariableName, )
Detta skriptkommando sammanfogar strängar och lagrar resultatet som en sträng.
// 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($resultatVariabelNamn, )
Detta kommando utför enkla matematiska beräkningar, inklusive addition (+), subtraktion (-), multiplikation (*) och division (/). Observera att beräkningarna utförs i den ordning de visas och INTE följer PEMDAS/BODMAS-regeln.
// 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
Detta är om
jämför två numeriska uttryck med hjälp av en angiven komparator. Om jämförelsen är sann utförs följande kommando(n). Annars hoppas efterföljande kommandon över tills ett annat
eller . endif
är uppnådd.
Giltiga komparatorer är:
“==” | lika |
“!=” | inte lika med |
">" | större än |
"<" | mindre än |
">=" | större eller lika med |
"<=" | mindre eller kval än |
// 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
Detta är ifString
jämför två stränguttryck med hjälp av en angiven komparator. Jämförelsen baseras på ASCII-teckenkoden för varje bokstav i strängarna. Om jämförelsen är sann utförs följande kommandon. I annat fall hoppas efterföljande kommandon över tills ett annat
eller . endif
är uppnådd.
För giltiga komparatorer, se if-kommandot.
// 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 Layer ID som sträng Expression>) - ifLayerIsOff(<API Layer ID som sträng Expression>) [else] endif
Dessa om
testar om ett visst lager för närvarande är aktivt eller inte. Om det angivna villkoret är uppfyllt (lagret är på eller av), bearbetas följande kommandon. I annat fall hoppas de efterföljande kommandona över tills ett annat
eller . endif
är uppnådd.
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 Layer ID som sträng Expression>) - ifLayerSetIsInactive(<API Layer ID som sträng Expression>) [else] endif
Dessa om
uttalanden testar om en viss Lageruppsättning för närvarande är aktiv eller inte. Om så är fallet bearbetas följande kommandon. Annars hoppas de efterföljande kommandona över tills ett annat
eller . endif
är uppnådd.
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
Detta komplexa kommando gör att du kan testa alla parametrar i ett lager som HTTP API tillhandahåller. Du måste ange ett lager genom dess API-ID, nyckelsökvägen i JSON-data som returneras av HTTP API, en jämförelse (som en sträng inom citattecken, t.ex. "=="
), och ett värde.
Giltiga jämförelsevärden är:
“==” | lika |
“!=” | inte lika med |
">" | större än |
"<" | mindre än |
">=" | större eller lika med |
"<=" | mindre eller kval än |
// 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
The Loop
kommandot kan du köra kod flera gånger. Om du inte anger antalet iterationer kommer slingan att köras på obestämd tid. Den bryta
kommandot kan du när som helst avsluta loopen. slutloop
är nödvändigt för att markera slutet på det kommandoblock som ska loopas.
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()
The httpRequest()
kommandot utlöser den angivna URL:en. Detta ger en stor flexibilitet i hur du kan använda detta skriptkommando. I mimoLive
kan det även utlösa åtgärder i andra dokument eller fjärrskript. För mer information om mimoLive
HTTP API-kommandon kan du läsa mer i HTTP API dokumentation för att utforska alla möjliga API-anrop.
// slå på ett lager
httpRequest("http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B/setLive")
httpRequestJSON($resultVariableName, )
Detta kommando läser svaret från HTTP-anropet som JSON och lagrar data i den angivna resultatvariabeln. Efter detta kan du komma åt data via kommandot getJSONData()
kommando.
getJSONData($resultVariableName, $jsonDataVariable, )
Detta kommando hämtar ett specifikt datavärde från en JSON-struktur som lagrats i en variabel. Du måste ange den variabel som innehåller JSON-data ($jsonDataVariabel
), sökvägen till data inom JSON-strukturen (), och variabeln där resultatet ska lagras (
$resultatVariabelNamn
). Detta möjliggör exakt utvinning av data för vidare bearbetning eller användning i ditt skript.
// hämta alla data för ett lager
httpRequestJSON($myLayerData, "http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B")
// få värdet på volymratten
getJSONData($volumenDial, $myLayerData, "data.attributes.volume")// Nu kommer variabeln $volumenDial att innehålla ett värde mellan 0 och 1.
> Brytpunkt för felsökare
När skriptfelsökaren är aktiverad och felsökningsläget är inställt på "Kontinuerligt", kommer exekveringen av skriptet att pausa vid denna markör och vänta tills mimoLive-operatören klickar på knappen "Nästa steg". Se "Bästa praxis - Felsökning av skript" för mer information om felsökningsmöjligheterna.
Datatyper
API Slutpunkter
Parametern ska vara en API-slutpunkt för ett skikt, en skiktvariant, en skiktuppsättning, en källa eller en utdatadestination. Du kan få fram dessa API-slutpunkter genom att högerklicka på objektet i mimoLive-dokumentet. En snabbmeny bör visas med menyalternativet "Kopiera API-slutpunkt till urklipp".
Den här åtgärden kopierar API-slutpunkten för det här objektet till urklippet. Om du klistrar in den någon annanstans kommer den att se ut ungefär så här:
/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
För lagerrelaterade kommandon kan du minska API Slutpunkter till den viktiga delen endast genom att ta bort prefixet "/api/v1/documents//layers/" . Detta kommer att göra ditt skript kortare som visas här:
// 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")
Bästa praxis
API-slutpunkter
Hur man hämtar API-slutpunkter
- Genom att högerklicka på lagret och välja "Kopiera API-slutpunkt"
- genom att använda kommandot getAPIEndpoint() (se dokumentation)
Adressering av API-slutpunkter
Du kan antingen använda den fullständiga API-slutpunkten eller ta bort delen "/api/v1/documents//" för att se till att ditt skript fungerar även när det kopieras till ett annat dokument. Dokument-ID:t är dock viktigt om du vill adressera en API-punkt i ett annat mimoLive-dokument.
Felsökning av skript
Det finns en skriptfelsökare inbyggd i Automation-lagret. Du kan växla lagret till felsökningsläge genom att ställa in lagrets parameter "Debug" till on.
TBD.
Idéer för skript
Kör en annons var 10:e minut
I kombination med en "PIP Window"-lagret och en "Media Playlist-källa" som innehåller flera korta reklamfilmklipp kan du spela upp en reklam var 10:e minut. Se till att avmarkera alternativet "Non-Stop" i källan Media Playlist. På så sätt kan du varje gång PIP När Window är inställt på live spelas en annons upp från Playlist-källan och stängs sedan av. Efter 10 minuter spelas nästa annons upp.
Kör en stinger innan du byter till ett visst lager
Du måste förbereda en kort stinger-video som kommer att ha en In-transition tills den täcker hela skärmen (t.ex. efter 1 sek). Efter 1 sekund växlar du live till det lager du vill visa. Placera detta lager under det lager som spelar upp stinger-videon. Nu när stinger-videon täcker skärmen kan växlingen av lagret nedanför inte ses. Stinger-videon bör fortsätta med att avslöja lagret nedanför. Se till att stinger-videon renderas i videokodeken ProRes4444 så att den har den transparens som krävs för övergången.
Skapa en komplex programöppnare
Eftersom du kan slå på och av lager efter lager under en längre tidsperiod kan du ha flera text- eller anteckningslager, placeringslager som visar grafik eller till och med lägre tredjedelar som fyller skärmen för att skapa din egen animerade showöppnare. Var kreativ!
Utlös en fjärrkontroll HTTP URL genom att trycka på fjärrkontrollens yta
Om du behöver utlösa en HTTP Begäran via en knapp på din Yta för fjärrkontroll kan du lägga till ett automatiseringslager i lagerstacken och ställa in alternativet "Stäng av lager" för det lagret till "Automatiskt". Nu kan du lägga in ett enda httpRequest()-kommando i skriptfältet "On Live". På din fjärrkontroll lägger du till Live-knappen för detta lager i layouten. När du trycker på den här knappen på fjärrkontrollen kommer HTTP begäran kommer att utföras.