Agilize a sua produção com a camada de automatização do mimoLive
A camada de automatização mimoLive foi originalmente desenvolvida como uma prova de conceito, mas desde então provou ser uma ferramenta incrivelmente útil para os utilizadores. Esta camada pode ser utilizada para automatizar a ativação e desativação de camadas numa sequência específica ou em momentos pré-determinados, transportar informação de uma camada para outra, iniciar e parar Destinos de saídae muito mais!
Pode ser especialmente útil para criar produções complexas com várias camadas e entradas, uma vez que elimina a necessidade de comutação e sincronização manuais. Com esta camada, os utilizadores podem concentrar-se na criação de conteúdos cativantes enquanto o software trata da sincronização e sequenciação da sua produção. Agora, na versão 2 desta camada, alargámos os comandos para levar a automatização no mimoLive a um nível totalmente novo.
Exemplo: Camada de automatização
Os scripts de automação no mimoLive não são executados em tempo real
Tenha em atenção que o tempo dos scripts de automatização no mimoLive pode não ser exato devido à natureza assíncrona dos pedidos HTTP chamados pelo motor de renderização de vídeo. Esses scripts dependem de solicitações HTTP para a API e a duração dessas solicitações não pode ser determinada com precisão, resultando em possíveis discrepâncias de tempo. Tenha isto em conta quando utilizar scripts de automatização no seu fluxo de trabalho de produção.
Pré-requisito
Para que esta camada funcione, é necessário ativar a função HTTP Servidor no mimoLive para ativar o Controlo Remoto API. Ir para mimoLive -> Preferências -> Controlos remotos: Marque a opção "Permitir acesso ao controlo remoto". (Atualmente, a camada de automatização no mimoLive só funciona sem uma palavra-passe)
Configurar a camada de automatização
Existem duas opções sobre a forma como a camada se deve comportar depois de ser activada:
Opção | Comportamento |
---|---|
Desligar automaticamente a camada | Para esta opção só existe um guião disponível. Quando este guião tiver sido processado, a camada desliga-se. Esta opção pode ser utilizada se uma sequência tiver de ser executada uma vez. |
Desligar a camada manualmente (por exemplo, pelo operador) | Neste caso, existem três guiões disponíveis. Quando a camada é activada, o script "On Live" é processado. Uma vez feito isto, o script "While Live" é processado num ciclo interminável. Quando a camada é desligada, o script "Turned Off" (Desligado) é processado. Se não tiver necessidade de uma determinada fase, pode deixar o guião associado vazio. |
Código fonte Comentários
Para o ajudar a lembrar-se da função do seu script, recomendamos a utilização de comentários no seu script:
// First sleep for 5 seconds...
sleep(5)
// ...then start the stopwatch layer:
layerOn("7C4665C4-0E17-4F63-BCFF-B59D68D75956")
Os comentários têm de estar numa linha separada.
Comandos de scripting
A linguagem de script é proprietária e inclui vários comandos. Esses comandos estão listados numa folha de consulta na pré-visualização das camadas, à direita. Como a lista pode ser um pouco pequena para ler, pode expandir a pré-visualização utilizando o botão localizado acima e à direita da área de pré-visualização.
layerOn()
Este comando permite-lhe ativar uma camada ou uma variante de camada.
// 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 da camada como Expressão de cadeia de caracteres>)
Este comando permite-lhe desativar uma camada ou uma variante de camada.
// 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(<Camada da API Definir ID como expressão de cadeia de caracteres>)
Este comando pode ser utilizado para acionar a chamada para um determinado Conjunto de camadas.
// 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 destino de saída da API como expressão de cadeia de caracteres>)
Utilize este comando para ativar um destino de saída.
// inicie um Destino de Saída pelo seu id
outputOn("1953186E-4176-4849-A8ED-5B47EE1627BD")
// inicie um destino de saída pelo seu URL longo do ponto final da API
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// inicie um Destino de Saída com uma variável definida
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOn($myOutputDestinationtID)
outputOff(<ID de destino de saída da API como expressão de cadeia de caracteres>)
Utilize este comando para desativar um destino de saída.
// pare um Destino de Saída pelo seu id
outputOff("1953186E-4176-4849-A8ED-5B47EE1627BD")
// pare um destino de saída pelo seu URL longo do ponto final da API
outputOn("/api/v1/documents/1677022440/output-destinations/1953186E-4176-4849-A8ED-5B47EE1627BD")
// pare um Destino de Saída com uma variável definida
setVariable($myOutputDestinationtID, "1953186E-4176-4849-A8ED-5B47EE1627BD")
outputOff($myOutputDestinationtID)
getLayerData($resultVariableName, , )
Esse comando combina vários comandos em uma etapa de script: Lê as informações de camada do servidor HTTP e armazena um campo de dados específico das respostas JSON em uma variável. Precisa do caminho exato para o valor que pretende ler. Para o parâmetro de entrada das camadas, este caminho começa normalmente com "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, , )
Este comando obtém o Ponto Final da API para um objeto mimoLive específico pelo seu nome de apresentação. Tenha em atenção que o nome de apresentação pode ser facilmente alterado pelo operador mimoLive na interface de utilizador mimoLive, o que por sua vez irá quebrar o script de automatização se já não conseguir encontrar o objeto específico. Por outro lado, este comando pode ser usado para encontrar pontos finais da API programaticamente sem a necessidade de codificar os pontos finais da API no script.
As opções válidas para são: "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)
dormir(<Segundos> como número)
O comando sleep() faz uma pausa na execução do script durante o intervalo de tempo indicado, expresso em segundos.
// 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(<Time as String Expression (Tempo como expressão de cadeia de caracteres)>)
O comando sleepUntil() permite que o script faça uma pausa até que o tempo especificado seja atingido. Se a hora já tiver passado, o script espera até ao dia seguinte. O formato para a hora é HH:MM ou HH:MM:SS num período de 24 horas.
// 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()
Este comando de script faz uma pausa no script até que a próxima fração de hora "ao minuto" seja atingida.
// 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, <valor>)
Para definir uma variável local, utilize o comando definirVariável
comando. Precisa de especificar um nome de variável (começando com um $
) e o valor que esta variável deve conter. O valor pode ser um número, texto (entre aspas), ou os valores booleanos verdadeiro
e falso
.
setVariable($myText, "This is a text")
setVariable($myNumber, 15.73)
setVariable($myBoolValue, false)
setGlobal($variableName, <valor>)
Uma variável global pode ser utilizada tanto na camada atual como em quaisquer camadas de automatização acima dela. Esta funcionalidade é particularmente útil para partilhar a mesma informação em várias camadas de Automatização, como os pontos finais da API de uma determinada camada. Para o valor da variável, aplicam-se as mesmas regras que as da variável definirVariável
comando.
Tenha em atenção que as variáveis globais estão acessíveis a outras camadas de Automatização, desde que a camada de origem esteja ativa. Esta disposição permite-lhe mudar as variáveis globais activando uma camada diferente com definições de variáveis globais distintas. A melhor prática neste cenário é definir a opção "Desligar camada" da camada de automatização para "Manualmente" e definir as globais no script "Em direto".
setGlobal($myGlobalText, "This is a text")
setGlobal($myGlobalNumber, 15.73)
setGlobal($myGlobalBoolValue, false)
concat($resultVariableName, )
Este comando de script concatena cadeias de caracteres e armazena o resultado como uma cadeia de caracteres.
// 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, )
Este comando efectua cálculos matemáticos simples, incluindo a adição (+), a subtração (-), a multiplicação (*) e a divisão (/). Tenha em atenção que os cálculos são efectuados pela ordem em que aparecem e NÃO seguem a regra 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
Este se
A instrução compara duas expressões numéricas utilizando um comparador especificado. Se a comparação for verdadeira, o(s) comando(s) seguinte(s) é(são) executado(s). Caso contrário, os comandos subsequentes são ignorados até que um senão
ou endif
é atingido.
Os comparadores válidos são:
“==” | iguais |
“!=” | não é igual |
">" | superior a |
"<" | menos de |
">=" | maior ou igual a |
"<=" | inferior ou igual 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
Este ifString
compara duas expressões de cadeia de caracteres utilizando um comparador especificado. A comparação baseia-se no código de carácter ASCII de cada letra nas cadeias de caracteres. Se a comparação for verdadeira, os comandos seguintes são executados. Caso contrário, os comandos subsequentes são ignorados até que um senão
ou endif
é atingido.
Para comparadores válidos, consulte o 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 da camada como Expressão de cadeia de caracteres>) - ifLayerIsOff(<API ID da camada como Expressão de cadeia de caracteres>) [else] endif
Estes se
testam se uma determinada camada está atualmente ativa ou não. Se a condição especificada for cumprida (a camada está activada ou desactivada), os comandos seguintes são processados. Caso contrário, os comandos subsequentes são ignorados até que um senão
ou endif
é atingido.
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 da camada como Expressão de cadeia de caracteres>) - ifLayerSetIsInactive(<API ID da camada como Expressão de cadeia de caracteres>) [else] endif
Estes se
testam se um determinado Conjunto de camadas está atualmente ativo ou não. Em caso afirmativo, os comandos seguintes são processados. Caso contrário, os comandos subsequentes são ignorados até que um senão
ou endif
é atingido.
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
Este comando complexo permite-lhe testar qualquer parâmetro de uma camada que o HTTP API fornece. Tem de especificar uma camada pelo seu ID da API, o caminho da chave nos dados JSON devolvidos pela API HTTP, um comparador (como uma cadeia de caracteres entre aspas, por exemplo, "=="
), e um valor.
Os valores válidos do comparador são:
“==” | iguais |
“!=” | não é igual |
">" | superior a |
"<" | menos de |
">=" | maior ou igual a |
"<=" | inferior ou igual 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
O laço
permite-lhe executar código várias vezes. Se não especificar o número de iterações, o ciclo será executado indefinidamente. O comando pausa
permite-lhe sair do ciclo em qualquer altura. ciclo final
é necessário para marcar o fim do bloco de comandos que deve ser repetido.
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()
O httpRequest()
acciona o URL fornecido. Isto oferece uma grande flexibilidade na forma como pode utilizar este comando de script. Em mimoLive
Pode até desencadear acções noutros documentos ou scripts remotos. Para mais informações sobre mimoLive
Comandos da API HTTP, consulte a HTTP API para explorar todas as chamadas API possíveis.
// ativar uma camada
httpRequest("http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B/setLive")
httpRequestJSON($resultVariableName, )
Este comando lê a resposta da chamada HTTP como JSON e armazena os dados na variável de resultado especificada. Depois disso, você pode acessar os dados através do comando getJSONData()
comando.
getJSONData($resultVariableName, $jsonDataVariable, )
Este comando recupera um valor de dados específico de uma estrutura JSON armazenada numa variável. Você precisa de especificar a variável que contém os dados JSON ($jsonDataVariable
), o caminho para os dados dentro da estrutura JSON (), e a variável onde o resultado deve ser armazenado (
$resultVariableName
). Isto permite uma extração precisa dos dados para processamento posterior ou utilização no seu script.
// obter todos os dados de uma camada
httpRequestJSON($myLayerData, "http://127.0.0.1:8989/api/v1/documents/188462841/layers/BA868701-8131-49CB-8EDD-8C7E6E7CD60B")
// obter o valor do seletor de volume
getJSONData($volumenDial, $myLayerData, "data.attributes.volume")// Agora, a variável $volumenDial terá um valor entre 0 e 1.
> Ponto de paragem do depurador
Quando o depurador de scripts está ativado e o modo de depuração está definido para "Continuamente", a execução do script fará uma pausa neste marcador e aguardará até que o operador mimoLive clique no botão "Passo seguinte". Consulte "Melhores Práticas - Depurar Scripts" para obter mais informações sobre as possibilidades de depuração.
Tipos de dados
API Pontos finais
O parâmetro deve ser um Ponto Final API para uma Camada, uma Variante de Camada, um Conjunto de Camadas, uma Fonte ou um Destino de Saída. Pode obter estes Pontos Finais da API clicando com o botão direito do rato no objeto no documento mimoLive. Deve aparecer um menu de contexto com um item de menu 'Copy API Endpoint to Clipboard'.
Esta ação copiará o API Endpoint deste objeto para a área de transferência. Se o colar noutro local, terá um aspeto semelhante a este:
/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
Para comandos relacionados com a camada, pode reduzir o API Endpoints para a parte importante apenas removendo o prefixo "/api/v1/documents//layers/" . Isto tornará o seu script mais curto, como mostrado aqui:
// 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")
Melhores práticas
Pontos de extremidade da API
Como obter pontos de extremidade da API
- Clique com o botão direito do rato na camada e seleccione "Copiar ponto final da API"
- utilizando o comando getAPIEndpoint() (ver documentação)
Endereçar pontos de extremidade da API
Pode utilizar o ponto final API completo ou remover a parte "/api/v1/documents//" para garantir que o seu script também funciona quando copiado para outro documento. No entanto, o ID do documento é importante se quiser abordar um ponto API num documento mimoLive diferente.
Scripts de depuração
Existe um depurador de scripts incorporado na camada de automatização. Pode mudar a camada para o modo de depuração definindo o parâmetro de camada "Depurar" como ligado.
TBD.
Ideias de scripting
Apresentar um anúncio de 10 em 10 minutos
Em combinação com um "PIP Janela" e uma "Fonte de lista de reprodução multimédia" que contenha vários clips de filmes publicitários curtos, pode reproduzir uma publicidade de 10 em 10 minutos. Certifique-se de que desmarca a opção "Non-Stop" na fonte Media Playlist. Desta forma, sempre que o PIP Se a janela for definida como em direto, reproduzirá um anúncio da fonte da lista de reprodução e desliga-se. Passados 10 minutos, será reproduzido o anúncio seguinte.
Executar um ferrão antes de mudar para uma determinada camada
É necessário preparar um vídeo curto que tenha uma transição até cobrir todo o ecrã (por exemplo, após 1 segundo). Após 1 segundo, ativa a camada que pretende revelar. Coloque esta camada por baixo da camada que está a reproduzir o vídeo de efeito. Agora que o vídeo com a ferrão está a cobrir o ecrã, a mudança da camada abaixo não pode ser vista. O vídeo da adrenalina deve continuar a revelar a camada por baixo. Certifica-te de que o vídeo com a adaga é processado no codec de vídeo ProRes4444, para que tenha a transparência necessária para a transição.
Criar uma abertura de espetáculo complexa
Como pode ativar e desativar camadas uma após a outra durante um longo período de tempo, pode ter várias camadas de texto ou de anotações, uma camada de colocação com gráficos ou até mesmo terços inferiores que preencham o ecrã para criar o seu próprio programa de abertura animado. Seja criativo!
Acionar um controlo remoto HTTP URL através de um toque na superfície do controlo remoto
Se for necessário acionar um HTTP Pedido através de um botão no seu Superfície de controlo remoto pode adicionar uma camada de automatização à sua pilha de camadas e definir a opção "Desligar camada" dessa camada para "Automaticamente". Agora, pode introduzir um único comando httpRequest() no campo de guião "On Live". Na superfície de controlo remoto, adicione o botão Em direto desta camada ao esquema. Quando premir este botão na superfície de controlo remoto, o HTTP será efectuado.