Encontre a duração do vídeo depois de aplicar a câmera lenta

0

Estou tentando aplicar o efeito de câmera lenta a uma série de vídeos. Além disso, esses vídeos serão redimensionados, preenchidos e desbotados. A seguir está o comando que estou usando para aplicar câmera lenta.

ffmpeg -i 1.mp4 -filter_complex "
[0:v]trim=0:5,setpts=PTS-STARTPTS[tv1];
[0:v]trim=5:7,setpts=PTS-STARTPTS[tv2];
[0:v]trim=start=7,setpts=PTS-STARTPTS[tv3];
[tv2]setpts=PTS*2[slow];
[tv1][slow][tv3]concat=n=3:v=1:a=0[out]" -map [out] -c:v libx264 test.mp4

Eu tenho duas perguntas.

  1. Referindo-se a [tv2] , embora ela seja aparada e aplicada o efeito de câmera lenta a partir do quinto segundo, na verdade, ela aplica o efeito do quarto segundo. Qual é o motivo disso?

A seguir está o comando que estou usando para outro processamento logo após concatenar no comando acima.

[concat0]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=out:st=16:d=2:alpha=1,setpts=expr=PTS-STARTPTS+10/TB[va0];

Não preciso especificar o setpts e estou usando a duração acumulada dos vídeos antes do vídeo atual. Aqui é o comando completo que estou usando para isso.

  1. Como posso calcular a duração do vídeo depois de aplicar o efeito de câmera lenta? Por exemplo, qual seria o incremento da duração do resultado de vídeo do primeiro comando que mencionei aqui em segundos ou mesmo microssegundos?
por Chamath 28.05.2015 / 11:37

1 resposta

0

Pergunta 1 - O comando está incompleto porque você não leva em conta a faixa audio , você alterou o PTS somente no vídeo faixa. Para ver a diferença, tente isto:

# no-good, starts from 4th second audio with a frozen video frame
ffmpeg -i in.mp4 -vf trim=5:7 out.mp4
#
# works as expected, both audio and video start at 5th second
ffmpeg -i in.mp4 -vf trim=5:7 -af atrim=5:7 out.mp4

Pergunta 2 - Isso também não funcionará como esperado pelo mesmo motivo, mas uma vez que você conserte a edição anterior, aqui está um truque não muito elegante, mas eficaz, para correlacionar o "antes" e "depois":

# overlay the input video with a timer, pulled to the right 200 pixels
ffmpeg -i in.mp4 -f lavfi -i testsrc=n=3 -vf overlay=x=200 in-with-time.mp4
#
# do all your manipulation, and finaly overlay with another timer at x=0
ffmpeg -i in-with-time.mp4 -f lavfi -i testsrc=n=3 -filter_complex "..stuff...,overlay[out]" out.mp4

Isso fornece a você por quadro o tempo original e resultante com precisão de 1 milissegundo.

    
por 03.06.2015 / 18:19