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 é mais custoso para a 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 imagens,
"thumbhash": trueem vez disso extrai um ThumbHash codificado em base64 emmeta.thumbhash, junto commeta.has_alpha(se existe um canal alfa, mesmo quando totalmente opaco). Ele descreve pixels orientados por EXIF e usa o primeiro quadro de imagens animadas. A extração é feita em regime de melhor esforço: imagens acima de 40 megapixels, formatos não suportados ou uma decodificação com falha/limitada não geram placeholder. Uma extração bem-sucedida adiciona uma cobrança de metadados equivalente a 20% dos bytes desse arquivo. Nenhuma sobretaxa de ThumbHash se aplica quando desativado ou quando nenhum hash é gerado.Defina essa opção no Step que produz a imagem, como
/upload/handlepara originais enviados por upload ou/image/resizepara saídas processadas. Defini-la apenas em/transloadit/storenão solicita a extração: o armazenamento preserva os metadados do produtor. O Transloadit Storage persiste um hash gerado com sua versão imutável e o retorna em resultados armazenados e em leituras nativas de ativos. Uploads diretos para o S3 não geram placeholders. Um placeholder contém informações da imagem, portanto proteja-o com os mesmos controles de acesso da imagem completa.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 barata do ffprobefield_ordercom 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 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 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.
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:0)Ao concatenar pelo menos dois arquivos, um valor positivo aplica um fade-out ao vídeo de cada entrada e um fade-in a todas as entradas após a primeira. Não há fade-in no início da saída, mas o fade-out também é aplicado à última entrada.
O valor é uma duração em segundos. Por exemplo,
0.5significa 500 milissegundos. Omita este parâmetro ou defina-o como0para desativar esses fades por entrada. Eles não sobrepõem os clipes nem inserem tempo adicional entre eles.As durações dos fades de vídeo são arredondadas para baixo até quadros inteiros e limitadas à duração de cada entrada.
Este parâmetro só se aplica quando
transitioné"none". Ele é ignorado quandotransitioné"crossfade"ou"fade_to_black"; usetransition_durationpara esses efeitos. Os fades de áudio são controlados separadamente poraudio_fade_seconds.Para adicionar um fade-in no início da saída, use um Step de codificação de vídeo adicional com o parâmetro
ffmpeg, como mostrado na demonstração de fade de vídeo (English).audio_fade_secondsstring | number(padrão:0)Ao concatenar pelo menos dois arquivos, um valor positivo aplica um fade-out ao áudio de cada entrada e um fade-in a todas as entradas após a primeira. Não há fade-in no início da saída, mas o fade-out também é aplicado à última entrada.
O valor é uma duração em segundos. Por exemplo,
0.5significa 500 milissegundos. Omita este parâmetro ou defina-o como0para desativar esses fades por entrada. Eles não sobrepõem os clipes nem inserem tempo adicional entre eles.Os fade-outs de áudio começam em um limite de segundo inteiro e podem terminar antes do fim da entrada.
Este parâmetro só se aplica quando
transitioné"none". Ele é ignorado quandotransitioné"crossfade"ou"fade_to_black"; usetransition_durationpara esses efeitos. Os fades de vídeo são controlados separadamente porvideo_fade_seconds.Para adicionar um fade-in de áudio no início da saída, use um Step de codificação de vídeo adicional com o parâmetro
ffmpeg. A demonstração de fade de áudio (English) mostra o filtro de áudio correspondente do FFmpeg.chapter_markersboolean(padrão:false)Quando definido como
true, o vídeo concatenado conterá um marcador de capítulo no ponto em que cada vídeo de entrada começa na saída. Cada capítulo terá como título o nome base do arquivo de vídeo de entrada correspondente. Quandotransitionestiver ativado, o capítulo do clipe seguinte começa no início de sua transição, considerando a sobreposição entre os clipes.Isso é útil para a navegação em players de vídeo que permitem saltar para posições com base em capítulos.
Na saída MP4, os marcadores de capítulo adicionam uma faixa
bin_datacom as informações dos capítulos. Isso é normal e não afeta a reprodução de vídeo nem de áudio.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. Os dois efeitos sobrepõem clipes adjacentes e reduzem a duração total da saída pela duração da transição aplicada em cada junção. A duração aplicada é limitada à metade do clipe mais curto de cada par.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
"fade_to_black", o vídeo desaparece gradualmente durante aproximadamente os primeiros 20% da transição e reaparece gradualmente nos 80% restantes (cerca de 0,2 segundo para o fade out e 0,8 segundo para o fade in em uma transição de 1 segundo). O áudio recebe crossfade durante toda a transição nos dois efeitos.A transição aplicada é limitada à metade do clipe mais curto de cada par de transição. Os dois efeitos encurtam a saída por essa duração aplicada em cada junção.
Publicações relacionadas no blog
- Aprimorando o FFmpeg para um desempenho de codificação superior
- Quatro novos Robots para aprimorar o processamento de mídia
- Novo modelo de preços para futuros clientes da Transloadit
- No-code real-time video uploading with Bubble & Transloadit (English)
- Novidades em vídeo: transições, capítulos, CMAF e mais