Produz um vídeo feito de vários trechos de vídeo do vídeo de entrada

0

Eu queria saber se era possível produzir um vídeo feito de várias extrações do vídeo de entrada. Por exemplo, a saída de um vídeo feito dos primeiros 10s de cada minuto da entrada.

Eu sei que você pode fazer isso programaticamente, chamando ffmpeg várias vezes com -ss e -t para criar os fragmentos e depois mesclá-los, mas é possível fazer isso em um comando usando filtros de vídeo?

    
por mad 20.05.2013 / 14:48

2 respostas

1

Resolvido! Aqui está a solução final:

A cada 2 segundos de cada minuto, áudio e vídeo.

ffmpeg -i fullmovie.mp4 
-vf "select='gte(mod(t\,60),0)*lte(mod(t\,60),2)',setpts='N/(FRAME_RATE*TB)'" 
-vcodec libx264  -crf 23 -acodec libfaac -ac 1 -ab 56k 
-af "aselect='gte(mod(t\,60),0)*lte(mod(t\,60),2)',asetpts='N/(SAMPLE_RATE*TB)'" trailer.mp4
  • selecionar filtros avalia a expressão para cada quadro de entrada, descarta-o se o resultado for 0 e o mantém se o resultado for 1
  • minha expressão retorna 1 para os primeiros 2 segundos de cada minuto
  • os setpts modificam o PTS de cada quadro / amostra de acordo com o número de o quadro / amostra e o framerate / samplerate
por 21.05.2013 / 15:43
0

Não, no momento isso não é realmente possível. Você teria que escrever um script que chamasse ffmpeg várias vezes com as opções -ss e -t fornecidas - pelo menos essa é a maneira mais direta.

Não se esqueça de que a posição de -ss é importante:

When used as an input option (before -i), seeks in this input file to position. When used as an output option (before an output filename), decodes but discards input until the timestamps reach position. This is slower, but more accurate.

Eu teria dito que você poderia usar o filtro select , que permite que você avalie expressões como "selecione apenas quadros entre 10 e 20 segundos", mas não consegui que funcionasse sem duplicar quadros e produzir a saída correta (ou seja, cortada).

    
por 20.05.2013 / 18:45

Tags