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
.