Você não pode fazer isso em um único comando. No entanto, supondo que você rode no Linux e tenha Bash (ou similares) como seu shell, bastam dois comandos. Por favor, note que isso só funciona se todos os vídeos tiverem os mesmos codecs de vídeo e áudio e a mesma base de tempo (fps, etc.).
1. Crie uma lista de vídeos e horários de início
Primeiro, você precisa criar uma lista de edição contendo o seguinte. Vamos chamá-lo de videos :
1.webm 00:00:00
2.webm 00:00:10
3.webm 00:00:20
Observe que isso não suporta nomes de vídeo com espaços.
2. Divida os vídeos
Agora criaremos uma pasta temporária para armazenar nossos vídeos menores. Vamos chamá-lo de tmp . Então você pode dividir seus arquivos assim:
while read video time; do ffmpeg -i $video -ss $time -t 10 -c copy tmp/$video; done < videos
Aqui, -t 10 significa que cortaremos 10 segundos do vídeo, começando no timestamp definido por -ss . Você também pode usar -to em vez de -t para cortá-lo até em um determinado ponto.
Se todos os seus vídeos de entrada tiverem codecs de vídeo e áudio diferentes, você precisará recodificar os vídeos neste momento. Para isso, você deve substituir a parte -c copy pelas configurações específicas de vídeo e codec de áudio, por exemplo, -c:v libx264 -c:a libfaac para vídeo e áudio H.264 / AAC.
3. Concatenar os vídeos
Agora, usando o concat protocol podemos mesclar os arquivos novamente:
ffmpeg -f concat -i <(for f in tmp/*.webm; do echo "file '$f'"; done) -c copy output.webm
Isso é tudo que você precisa. Ele funciona criando dinamicamente um arquivo de concatenação na hora. Caso contrário, você teria que criá-lo manualmente de acordo com a documentação concat .
Por fim, você pode limpar sua pasta tmp .