ffmpeg: Como escolher um padrão específico de quadros de um fluxo?

1

Alguém pode me ajudar a converter um fluxo de vídeo de 30 fps em 24 fps?

O material original é um filme. Parece ser filmado em 24 fps, porque o fluxo parece consistir em uma série de 4 quadros seguidos por um duplicado e, em seguida, novamente. 4 frames, 1 dupe, 4 frames, 1 dupe, 4 frames, 1 dupe, etc., fazendo 24 frames por segundo e 6 duplicatas por segundo.

Quando eu peço ao ffmpeg para converter este material para 24 fps, coisas estranhas acontecem.

Quando eu converto um clipe de 20 segundos 3 minutos no filme, para mpeg2video a 24 fps (usando o sinalizador -r 24), recebo um filme suave, exceto por um dos primeiros quadros que é uma duplicata. No entanto, quando eu primeiro tentar copiar o mesmo clipe em um arquivo separado e, em seguida, tentar converter isso para mpeg2video, recebo um movimento staccato de alguns quadros, em seguida, um dupe, em seguida, mais alguns quadros, um dupe, etc etc ., com números aparentemente aleatórios de quadros entre os enganados. Então - o mesmo clipe, mas suave no primeiro caso, e staccato no segundo!

No entanto, quando eu uso ffmpeg para converter exatamente o mesmo arquivo para x264, recebo o mesmo movimento staccato por cerca de 30 quadros, e então o movimento se torna totalmente suave!

O que poderia estar acontecendo aqui?

Existe alguma maneira específica de dizer ao ffmpeg para usar apenas 4 quadros, então pular um, e dar um loop em tudo através do filme?

Obrigado.

    
por Hunnicatt 17.06.2017 / 15:46

1 resposta

0

Existe o problema específico em questão, para o qual você pode usar o filtro de seleção, ou o problema geral, de remover quadros duplicados presentes em um padrão desconhecido introduzido durante o processo de telecinagem.

Para o primeiro,

ffmpeg -i in.mp4 -vf select='mod(n+1,5)',setpts=N/24/TB out.mp4

Para este último, o filtro mpdecimate pode ser útil

ffmpeg -i in.mp4 -vf mpdecimate,setpts=N/24/TB out.mp4
    
por 17.06.2017 / 16:34

Tags