ffmpeg - imagens de vídeo em seções diferentes e numeradas de forma incremental

0

Estou usando o ffmpeg para extrair imagens estáticas de um vídeo. A partir de um determinado momento, por uma determinada duração usando os parâmetros -ss e -t.

ffmpeg -ss 00:10:01 -t 2 -i /Volumes/OO_8/VideoSource.mkv -qscale:v 2 -start_number  /Users/Olivier/Pictures/ScreenCaptures/ViewsOfNature-%4d.jpeg

(Eu começo com o timestamp / duration primeiro para que o ffmpeg inicie o demux nesse ponto.)

No entanto, eu quero usar vários pontos de partida (por exemplo, às 00:01:12, extrair as imagens por 2 segundos; às 00:11:00 minutos, extrair as imagens por 4 segundos; etc.) Posso fazer isso manualmente, substituindo o registro de data e hora e a duração e movendo as imagens de saída de cada vez, mas, idealmente, desejo inserir as marcas de data e hora de uma só vez e não substituir as imagens de saída. Existe uma maneira de fazer isso? Talvez com um arquivo externo com os timestamps / durações?

Eu sou novo nisso, e prefiro fazê-lo apenas com ffmpeg, não use bash.

    
por OlivierOO 23.05.2015 / 11:53

1 resposta

1

Eu não vejo uma maneira de fazer isso com o ffmpeg facilmente. Há um muxer de segmento, mas você não pode definir a duração dos segmentos.

Não há nada que o impeça de fazer assim, o que acredito ser bastante simples. Basta criar um arquivo de texto contendo uma lista separada por vírgulas de pontos iniciais e durações:

$ cat split.txt
00:01:05,5
00:06:10,2
00:08:25,1

E depois no Bash:

count=1
while read -r -d ',' start duration; do
  ffmpeg -ss "$start" -i input.mp4 -t "$duration" "$count-output-%04d.jpg"
  (( count++ ))
done < split.txt

Isso criará arquivos de saída começando com um número único (1, 2, 3,…).

    
por 23.05.2015 / 12:16

Tags