Estou usando o ffmpeg para extrair imagens estáticas de um vídeo. A partir de um determinado momento, por um determinado período, 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 carimbo de data/hora/duração primeiro para que o ffmpeg inicie o demux nesse ponto.)
Porém, 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.). isso manualmente, substituindo o carimbo de data e hora e a duração e movendo as imagens de saída a cada vez, mas o ideal é inserir os carimbos de data e hora e as durações 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 carimbos de data/hora/durações?
Eu sou novo nisso e prefiro fazer isso apenas com ffmpeg, não com bash.
Responder1
Não vejo uma maneira de fazer isso facilmente com o ffmpeg. Existe um muxer de segmentos, mas você não pode definir a duração dos segmentos.
Não há nada que impeça você 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 então 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 exclusivo (1, 2, 3,…).