É possível no FFMPEG alterar a escala ao longo do tempo?


11

Ok, então, usando o filtro de sobreposição, é possível alterar a localização x / y de um vídeo ao longo do tempo usando a variável "t". Por exemplo, overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0pode ser usado para começar a deslizar um elemento sobreposto da parte superior esquerda para a parte superior direita, após 2 segundos.

O que eu quero fazer é usar um princípio semelhante para dimensionar elementos. Gostaria de poder alterar a escala de um vídeo ao longo do tempo usando uma expressão (como scale=w=iw*t, ou algo nessa linha).

Isso é possível?

quando executo essa expressão através de -filter_complex, recebo

Erro ao avaliar a expressão 'iw * t'.

Talvez a expressão para out_w: 'iw * t' ou para out_h: '- 1' seja auto-referente.

Sinto que há uma boa chance de precisar corrigir o FFMpeg se quiser obter essa funcionalidade, mas pensei em perguntar primeiro, para ver se alguém saberia esse tipo de coisa!

Alguém sabe como essa tarefa pode ser realizada?

Obrigado pela ajuda!


Parece mais um erro de sintaxe agora, mas eu não usei esse recurso antes, então infelizmente não posso ajudar aqui.
PTS

1
Não é algo definido no que se refere ao filtro de sobreposição.
v010dya

1
Você poderia apenas escrever um filtro. wiki.multimedia.cx/index.php?title=FFmpeg_filter_howto
denjello

1
@alexspeller, o filtro de escala não suporta a edição da linha do tempo, portanto, não é diretamente possível. Vou verificar se há uma solução alternativa.
Gyan

1
Tecnicamente possível com saída H.264 / 5. Não sei como os jogadores / editores irão lidar com isso.
Gyan

Respostas:


2

Pelo que entendi, 't' é avaliado uma vez. Você já leu isso: https://ffmpeg.org/ffmpeg-filters.html#zoompan ?

Documentos do Ffmpeg:

9.170.1 Exemplos

  • Aumente o zoom até 1,5 e gire ao mesmo tempo em algum ponto próximo ao centro da imagem:

zoompan = z = 'min (zoom + 0,0015,1,5)': d = 700: x = 'if (gte (zoom, 1,5), x, x + 1 / a)': y = 'if (gte (zoom, 1,5), y, y + 1) ': s = 640x360

  • Aumente o zoom até 1,5 e gire sempre no centro da imagem:

zoompan = z = 'min (zoom + 0,0015,1,5)': d = 700: x = 'iw / 2- (iw / zoom / 2)': y = 'ih / 2- (ih / zoom / 2)'

  • O mesmo que acima, mas sem fazer uma pausa:

zoompan = z = 'min (max (zoom, pzoom) +0,0015,1,5)': d = 1: x = 'iw / 2- (iw / zoom / 2)': y = 'ih / 2- (ih / zoom / 2) '

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.