Como aumentar o FPS do vídeo e acelerar corretamente com o ffmpeg?

0

Eu tenho um vídeo de 5 qps com keyint 120 e 2,5 horas que eu quero acelerar 6 vezes, fazendo com que seus fps = 30

Eu fiz isso com este comando que encontrei em algum lugar deste site

ffmpeg -i "...local_Record.mkv"  -filter:v "fps=30, setpts=PTS/6" "...output1.mkv"

A saída ficou lenta, tocando por 3-5 segundos e depois congelando. Se eu pular para trás ou para frente, ele descongela por mais 3 a 5 segundos e depois congela novamente. Depois de carregá-lo no youtube, descobri que ele não está lá, no entanto youtube mostra seu comprimento como original de 2,5 horas. Ele também mostra que seu percentual de processamento é de 95% para 12+ horas já (o que significa que este vídeo está 100% com defeito e não será processado, desde 90 mb e 20 min, e o youtube pode processar vídeos de 5 gb e hora longa em 10 minutos)

Então eu tentei recodificar o vídeo que recebi com este comando

ffmpeg -i "...mkv" -c:v libx264 -crf 18 -preset veryfast -max_muxing_queue_size 1024 output.mp4

O que me deu 133 mb resultado que também é mostrado no youtube como 2.5 horas de duração e nunca termina o processamento (pode ser jogado, mas é invisível, no gerenciador de vídeo ambos os vídeos dizem que 95% processado)

Como fazer isso corretamente, para que o vídeo não fique atrasado e o youtube possa ter o tamanho correto?

edit - Eu encontrei qual era o problema - havia algum som no container mesmo que não houvesse nenhum som (gravei com obs sem som ativado). Então, depois que eu removi o som com o mmg, o mpc abriu corretamente mostrando que seus 26 minutos de duração e o youtube o processaram com sucesso em alguns minutos

    
por jstq 02.09.2018 / 11:34

1 resposta

1

O pedido deve ser revertido,

ffmpeg -i in -filter:v "setpts=PTS/6,fps=30" out

Com o filtro fps primeiro, o ffmpeg irá inserir 25 quadros duplicados por segundo para converter 5 fps para 30 e, em seguida, acelerar 6x. Com a ordem correta, o ffmpeg comprime o fluxo para ter 30 quadros-fonte por segundo, e então todo o filtro fps acaba fazendo * é alterar os metadados do fluxo para 30 fps.

* assumindo uma fonte de taxa de quadros constante.

Observe também que o YT recodifica todos os vídeos, portanto, o keyint codificado não é transferido pelo YT.

Se você tiver áudio, precisará acelerar também,

ffmpeg -i in -vf "setpts=PTS/6,fps=30" -af "atempo=6" out

Note que atempo até recentemente tinha um limite de 2, então para versões mais antigas do ffmpeg, você usaria

ffmpeg -i in -vf "setpts=PTS/6,fps=30" -af "atempo=2,atempo=2,atempo=1.5" out
    
por 02.09.2018 / 12:09