Extrai o quadro (em formato de imagem) exatamente a cada minuto (ou segundo) de um vídeo (por ffmpeg)

3

Motivação: gostaria de buscar o quadro e, em seguida, tirar imagens de alta qualidade e exatas de tempo (imagens) de um vídeo.

O vídeo tem duração de 00: 48: 43.71 e 23,98 fps (podemos pensar que são 24 fps, não é?).

Com referência a esta página da Web: Crie uma miniatura imagem a cada X segundos do vídeo

Eu escrevi alguns comandos que pegam um quadro a cada hora, a cada minuto e a cada segundo.

Após exterminar as imagens, as capturas de tela são tiradas da meia meia , meia meia e meia segunda . Você vai entender em breve.

Por exemplo, o comando para capturar um quadro a cada minuto, na verdade, é extrair o quadro no meio minuto , o que significa que a 00:00:30, 00:01:30, 00 : 02: 30 e assim por diante. É por isso que eu nomeio para o nome do arquivo da seguinte forma:

ffmpeg -i "video.mp4" -start_number 0 -vf fps=1/60 "B 00-%02d-30.000.png"

(adicionar o prefixo "B" é para evitar sobrescrever por comandos diferentes).

Por exemplo, para pegar um quadro a cada segundo, das 00:03:00 às 00:04:00, o elogio é:

ffmpeg -i "video.mp4" -start_number 0 -vf fps=1 -ss 00:03:00 -to 00:04:00 "C 00-03-%02d.500.png"

Para verificá-los, podemos extrair todos os quadros de 00:03:29 a 00:03:31:

ffmpeg -copyts -ss 00:03:29 -i "video.mp4" -start_number 0 -to 00:03:31 "D 00-03-29.%03d.png"

Podemos verificar se os seguintes arquivos de imagem são idênticos:

D 00:03:29.012.png é idêntico a C 00:03:29.500.png .

D 00:03:29.024.png é idêntico a B 00:03:30.000.png .

D 00:03:29.036.png é idêntico a C 00:03:30.500.png .

Essas são as minhas descobertas de tentativas e erros esta manhã. Aqui vem a minha pergunta:

Vamos pegar "extrair um quadro exatamente a cada minuto" como exemplo, como podemos obter / qual é o comando para obter os quadros 00: 00: 00.000, 00: 00: 01.000, 00: 00: 02.000 e assim por diante?

Acabei de ouvir falar de ffmpeg esta manhã. Ainda não sei o que -copyts significa (depois de ler os documentos ) e quando preciso colocar -ss position antes de -i e quando colocá-lo na parte de saída. Então, por favor me corrija se eu estiver usando os comandos errados.

    
por midnite 08.07.2015 / 09:51

1 resposta

2

O filtro fps foi projetado para descartar / duplicar quadros de maneira inteligente para corresponder aos fps de saída com base nos fps de entrada. Se você pedir a saída de um quadro a cada minuto, ele selecionará um quadro no centro da janela 00: 00-01: 00 e soltará todos os outros, portanto, por que você obtém quadros às 00:30, 01:30, etc ..

Já pensou em fazer um script bat / bash que faça isso?

for i in 0..50
   ffmpeg -ss %i:oo -i input.mp4 -vframes 1 out-%i.png

Você também pode fazer o seguinte se quiser obter capturas de tela à 01:00, 02:00 [..] em vez de 00:30, 01:30 [..]:

ffmpeg -ss 00:30 -i input.mp4 -start_number 0 -vf fps=1/60 "B 00-%02d-00.000.png"
    
por 08.07.2015 / 14:37