Automação

Tabela de Conteúdos

Agilize a sua produção com a camada de automatização do mimoLive

Está atualmente a visualizar um conteúdo de marcador de posição de YouTube. Para aceder ao conteúdo real, clique no botão abaixo. Tenha em atenção que, ao fazê-lo, irá partilhar dados com fornecedores terceiros.

Mais informações

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

Automaçã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)

6102d04e 4eb3 4600 b410 0d2b2aef0767

Configurar a camada de automatização

Existem duas opções sobre a forma como a camada se deve comportar depois de ser activada:

OpçãoComportamento
Desligar automaticamente a camadaPara 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)
Captura de ecrã 2024 06 11 às 15.20.42

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 verdadeirofalso.

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

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()

httpRequest() acciona o URL fornecido. Isto oferece uma grande flexibilidade na forma como pode utilizar este comando de script. Em mimoLivePode até desencadear acções noutros documentos ou scripts remotos. Para mais informações sobre mimoLiveComandos 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.

Versão do software relacionado deste artigo:

n/a

A sua opinião

Como avalia a sua experiência com esta funcionalidade do mimoLive?

Manual do utilizador: Actualizações recentes

Selecione o idioma