Mesclar segmentos de diferentes vídeos ffmpeg

2

Posso usar o ffmpeg para criar um vídeo que use segmentos diferentes de vídeos diferentes?

1.webm, 2.webm, 3.webm, 4.webm 

Esses são meus quatro arquivos de vídeo. Eu quero os 10 segundos de cada vídeo. Os segmentos são especificados por mim.

ffmpeg -i 1.webm -1 2.webm -i 3.webm -i 4.webm -ss 00:00:00 -t 10 -ss 00:00:10  \
-t 10 -ss 00:00:20 -t 10 -ss 00:00:30 -t 10;

O acima não é um comando real que funciona. Posso obter algo assim programaticamente?

    
por Pavan K 15.08.2013 / 16:56

1 resposta

2

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 .

    
por 15.08.2013 / 22:21