Concatenar vídeos
🤖/video/concat concatena vários vídeos.

Os vídeos de entrada podem ter dimensões e streams diferentes. O Robot lida com isso sem problemas. Se necessário, ele transcodificará os vídeos de entrada antes da concatenação, sem custo adicional.
É possível concatenar um número praticamente infinito de arquivos de vídeo usando 🤖/video/concat.
Exemplo de uso
Se você tem um formulário com 3 campos de entrada de arquivo e quer concatenar os vídeos carregados em uma ordem específica, instrua a Transloadit usando o atributo name de cada campo de entrada. Use esse atributo como valor da chave fields no JSON e defina as como video_[[index]]. A Transloadit concatenará os arquivos com base na ordem crescente dos índices:
{
"steps": {
"concatenated": {
"robot": "/video/concat",
"use": {
"steps": [
{
"as": "video_1",
"fields": "first_video_file",
"name": ":original"
},
{
"as": "video_2",
"fields": "second_video_file",
"name": ":original"
},
{
"as": "video_3",
"fields": "third_video_file",
"name": ":original"
}
]
}
}
}
}Parâmetros
interpolateboolean | Record<string, boolean>Controla se as Assembly Variables são interpoladas em campos individuais de instruções.
Por padrão, a maioria dos campos de instruções dos Robots interpola Assembly Variables. Defina isso como
falsepara tratar todos os campos de instruções como texto literal, ou defina o caminho de um campo individual comofalsepara tratar apenas esse campo como texto literal. Para campos específicos de um Robot que são literais por padrão, defina isso comotrueou defina o caminho desse campo comotruepara voltar a usar a interpolação.Use nomes de campos como
pathou caminhos com pontos comoffmpeg.vfpara objetos aninhados.output_metaRecord<string, boolean> | boolean | Array<string>Permite especificar um conjunto de metadados cujo cálculo exige mais CPU e que, por isso, vem desativado por padrão para manter o processamento das suas Assemblies rápido.
Para imagens, você pode adicionar
"has_transparency": trueneste objeto para extrair se a imagem contém partes transparentes e"dominant_colors": truepara extrair um array de códigos de cores hexadecimais da imagem.Para imagens, você também pode adicionar
"blurhash": truepara extrair uma string BlurHash — uma representação compacta de um placeholder da imagem, útil para exibir uma prévia desfocada enquanto a imagem completa carrega.Para vídeos, você pode adicionar o parâmetro
"colorspace": truepara extrair o espaço de cores do vídeo de saída.Para vídeos, você também pode adicionar
"interlaced": truepara detectar se o vídeo é entrelaçado. Isso combina a flag computacionalmente baratafield_orderdo ffprobe com uma passagem de amostragemidetlimitada sobre os primeiros quadros da origem, expondointerlaced,field_ordere um objeto de diagnósticointerlace_detectionemfile.meta. Isso é computacionalmente caro e cobrado de acordo.Para áudio, você pode adicionar
"mean_volume": truepara obter um único valor que representa o volume médio do arquivo de áudio.Você também pode definir isso como
falsepara pular a extração de metadados e acelerar a transcodificação.user_metaRecord<string, any>(padrão:{})Adiciona metadados JSON personalizados a cada arquivo emitido sem modificar seu conteúdo. Objetos e arrays aninhados são suportados.
A herança depende do Robot. Os valores são mesclados com o
user_metaexistente no arquivo de saída; o Step atual substitui as chaves de nível superior com o mesmo nome. Atribua explicitamente as chaves necessárias quando um Robot criar novas saídas.Nos Steps de processamento,
${file.*}se refere à primeira entrada e${result.*}ao arquivo emitido. Os valores são avaliados para cada saída após a execução do Robot, antes da extração subsequente de metadados e do armazenamento temporário. Em:original, os valores são avaliados para cada upload antes da extração de metadados.Os Steps subsequentes leem
${file.user_meta.key}. Consulte Metadados personalizados para ver um exemplo completo e as regras de herança.resultboolean(padrão:false)Se os resultados deste Step devem estar presentes no Assembly Status JSON
queuebatchDefinir a fila como “batch” rebaixa manualmente a prioridade dos Jobs deste Step, para evitar o consumo de vagas prioritárias de Jobs em Jobs que não precisam de tempo zero de espera na fila
force_acceptboolean(padrão:false)Forçar um Robot a aceitar um tipo de arquivo que ele teria ignorado.
Por padrão, os Robots ignoram arquivos que não conhecem. O 🤖/video/encode, por exemplo, ignora tranquilamente imagens de entrada.
Com o parâmetro
force_acceptdefinido comotrue, você pode forçar os Robots a aceitar todos os arquivos enviados a eles. Isso normalmente leva a erros e só deve ser usado para depuração ou para lidar com casos extremos.ignore_errorsboolean | Array<meta | execute>(padrão:[])Ignorar erros durante fases específicas do processamento.
Definir isso como
["meta"]fará com que o Robot ignore erros durante a extração de metadados.Definir isso como
["execute"]fará com que o Robot ignore erros durante a fase principal de execução.Definir isso como
trueequivale a["meta", "execute"]e fará com que erros sejam ignorados nas duas fases.usestring | Array<string> | Array<object> | objectEspecifica quais Steps usar como entrada.
- Você pode escolher qualquer nome para os Steps, exceto
":original"(reservado para uploads de usuários tratados pela Transloadit) - Você pode fornecer vários Steps como entrada usando arrays:
{ "use": [ ":original", "encoded", "resized" ] } - Você também pode marcar os Steps de entrada com
aspara transmitir intenção semântica aos Robots:{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
DicaProvavelmente é tudo o que você precisa saber sobre
use, mas você pode ver os casos de uso avançados.- Você pode escolher qualquer nome para os Steps, exceto
ffmpegobjectUm objeto de parâmetros a ser passado para o FFmpeg. Se uma predefinição for usada, as opções especificadas são mescladas sobre as da predefinição. Para ver as opções disponíveis, consulte a documentação do FFmpeg. As opções especificadas aqui têm precedência sobre as opções da predefinição.
ffmpeg_stackv6 | v7 | v8 | string(padrão:"v6.0.0")Seleciona a versão do stack do FFmpeg a ser usada na codificação. Atualmente, recomendamos usar “v7”. As versões exatas “v6.0.0”, “v7.0.0” e “v8.0.0” são valores legados que continuam sendo aceitos por compatibilidade retroativa. Valores “v5.x” descontinuados também são aceitos.
widthstring | number | nullLargura do novo vídeo, em pixels.
Se o valor não for especificado e o parâmetro
presetestiver disponível, será aplicada a largura fornecida (English) porpreset.heightstring | number | nullAltura do novo vídeo, em pixels.
Se o valor não for especificado e o parâmetro
presetestiver disponível, será aplicada a altura fornecida (English) porpreset.presetandroid | android-high | android-low | android_high | android_low | dash-1080p-video | dash-1080p_video |Converte um vídeo de acordo com configurações predefinidas (English).
Você pode usar o valor
'empty'aqui se especificar seus próprios parâmetros do FFmpeg usando o Robot ou se não quiser que a Transloadit defina nenhuma configuração de codificação.video_fade_secondsstring | number(padrão:1)Quando usado, este parâmetro adiciona um efeito de fade in e fade out de vídeo entre cada seção do vídeo concatenado. O valor usado é de ponto flutuante, portanto, se você quiser um efeito de atraso de vídeo de 500 milissegundos entre cada seção do vídeo, selecione
0.5. No entanto, valores inteiros também podem ser representados.Este parâmetro não adiciona um efeito de fade de vídeo no início ou no fim do vídeo. Se quiser fazer isso, crie um Step adicional com 🤖/video/encode e use nosso parâmetro
ffmpegconforme mostrado nesta demonstração (English).Observe que este parâmetro é independente da adição de fades de áudio entre as seções.
audio_fade_secondsstring | number(padrão:1)Quando usado, este parâmetro adiciona um efeito de fade in e fade out de áudio entre cada seção do vídeo concatenado. O valor usado é de ponto flutuante, portanto, se você quiser um efeito de atraso de áudio de 500 milissegundos entre cada seção do vídeo, selecione
0.5. No entanto, valores inteiros também podem ser representados.Este parâmetro não adiciona um efeito de fade de áudio no início ou no fim do vídeo. Se quiser fazer isso, crie um Step adicional com 🤖/video/encode e use nosso parâmetro
ffmpegconforme mostrado nesta demonstração (English).Observe que este parâmetro é independente da adição de fades de vídeo entre as seções.
chapter_markersboolean(padrão:false)Quando definido como
true, o vídeo concatenado conterá marcadores de capítulo nas posições em que os vídeos de entrada são unidos. Cada capítulo terá como título o nome base do arquivo de vídeo de entrada correspondente.Isso é útil para a navegação em players de vídeo que permitem saltar para posições com base em capítulos.
sort_byauto | basename | import_order(padrão:"basename")Controla como as entradas agrupadas são ordenadas quando nenhum alias numerado explícito para o tipo de entrada é usado. Aliases numerados terminam com um sufixo numérico, como
_1.O padrão
"basename"mantém o comportamento legado de ordenação natural por basename.Defina como
"import_order"para preservar a ordem dos Steps de importação baseados em array quando todos os arquivos de entrada carregarem metadados completos de ordem de importação."auto"tem a mesma preferência de ordem de importação, com ordenação natural por basename como fallback.transitionnone | crossfade | fade_to_black(padrão:"none")Especifica o efeito de transição a ser aplicado entre os clipes de vídeo concatenados.
"none"(padrão): sem efeito de transição. Os vídeos são unidos em sequência."crossfade": aplica uma transição de crossfade em que o final de um clipe se mistura gradualmente ao início do próximo. O crossfade é aplicado tanto ao vídeo quanto ao áudio."fade_to_black": aplica uma transição de fade para preto em que cada clipe desaparece gradualmente até a tela ficar preta antes de o próximo clipe aparecer gradualmente a partir da tela preta.
Ao usar
"crossfade"ou"fade_to_black", o parâmetrotransition_durationcontrola a duração da transição. Observe que as transições de crossfade reduzem a duração total da saída, pois os clipes se sobrepõem durante a transição.transition_durationstring | number(padrão:1)A duração do efeito de transição em segundos. Só se aplica quando
transitionestá definido como"crossfade"ou"fade_to_black".Por exemplo, o valor
1.0cria uma transição de 1 segundo entre os clipes. O valor pode ser de ponto flutuante para precisão inferior a um segundo (por exemplo,0.5para 500 milissegundos) e deve ser maior que0sempre que as transições estiverem ativadas.Para transições de crossfade, esta é a duração da sobreposição em que ambos os clipes ficam visíveis. Para transições fade_to_black, este é o tempo total do fade out e do fade in (metade para cada um). A transição aplicada é limitada à metade da duração do clipe mais curto em cada par de transição.