ffmpeg torna-se super lento ao usar duração em vez de -r

0

O que eu estou fazendo:

Ainda estou trabalhando no meu script de apresentação de slides. Ou seja, eu uso demuxer de concat do ffmpeg (files.txt) para fornecer ffmpeg com um monte de .jpgarquivos para uma apresentação de slides.

No passado eu queria que todas as imagens fossem mostradas por 3 segundos cada, então usei (usei mal?) A flag de framerate do ffmpeg -r 1/3para alcançar a dita duração, que funcionou perfeitamente e muito rápido (aproximadamente 10 segundos para todas as 600 imagens).

O que eu quero fazer agora:

Agora, eu queria que o slideshow fosse mais dinâmico, variando a duração (mais longo para os mais interessantes e assim por diante, você sabe). Então, decidi abandonar o flag framerate e definir o duration 3direito no arquivo concat. Claro, para cada arquivo com o número correto de segundos. O que funciona - mais ou menos.

Meu único problema é: agora leva muito tempo para o ffmpeg executar esse script. Não só por um pouco, mas demora cerca de 30 vezes mais tempo. Mesmo que eu já use -c:v libx264 -preset ultrafast.

Então, não é mais prático de usar. Eu sinto falta de algo ou existe um terceiro método?

Editar:

Ffmpeg só notei cai este aviso: More than 1000 frames duplicated. O que não pode ser o caso, quando uma imagem estática é mostrada por no máximo 5 segundos a 25 fps (valor padrão).

Atenciosamente!

Max M.
fonte
Tente com menos imagens e verifique a taxa de quadros do vídeo resultante. Pode ser muito alto.
Daniel B
Qual é a menor duração que você usa?
Gyan
@DanielB Eu só testei com cerca de 30 arquivos e demorou cerca de 20 segundos. Então eu não joguei todos os 600 arquivos no ffmpeg, ainda.
Max M.
@Gyan Mínimo de 2 segundos, máximo de 5 segundos. Nenhum decimal ou <1 segundo.
Max M.
25 fps é 75 vezes 0,33 fps. Portanto, o aviso não é nem injustificado nem surpreendente. Tente 1 fps.
Daniel B

Respostas:

0

Quando você usa a durationdiretiva em um arquivo demuxer de concat, o que você está configurando é o deslocamento de registro de data e hora aplicado ao próximo arquivo, relativo ao registro de data e hora inicial calculado para o arquivo atual. Para que isso funcione, a entrada -rnão pode ser usada. O que, por sua vez, significa que cada imagem recebe a taxa de quadros padrão de 25 fps. Neste momento, isso não pode ser alterado. No entanto, você pode reduzir a taxa de quadros. Como você não tem segundos fracionários, pode reduzir para 1 fps.

ffmpeg -f concat -i list.txt -vf fps=1 out.mp4

Eu omiti todas as opções de codificação. Use o ffmpeg 4.0 ou posterior.

Gyan
fonte