AviSynth ChangeFPS: combinando vídeos com diferentes framerates

4

Eu tenho duas gravações de vídeo da mesma cena, mas com diferentes taxas de quadros, que eu gostaria de combinar usando um script AviSynth. Um vídeo é gravado a 30fps, o outro a 120fps. O que eu gostaria de fazer é mantê-los temporariamente sincronizados, o que significa que, para cada quadro do vídeo de 30 fps, a saída deve exibir 4 quadros do vídeo de 120 fps. Eu gostaria que o vídeo de saída final fosse reproduzido a 30fps para que a duração fosse 4 vezes maior do que as gravações originais.

Da documentação do AviSynth, parece que ChangeFPS é a função que eu preciso, pois remove e duplica quadros, enquanto 'AssumeFPS' apenas altera a velocidade de reprodução (e meu plano é basicamente quadruplicar cada quadro do clipe de 30fps) ). No entanto, o filtro não parece fazer o que diz.

Se eu tentar:

clip30 = AviSource("0326.avi").ChangeFPS(120)
clip120 = AviSource("0326-120fps.avi")

isso não afeta a velocidade de reprodução ou a contagem de quadros do clipe de 30fps, mas remove cada quarto quadro do clipe de 120fps, o que não é de todo o que eu quero. Infelizmente, anexar .ChangeFPS (7.5) ao clipe120, em vez disso, não tem o mesmo efeito inverso - nesse caso, ele faz exatamente o que é esperado. Como alternativa, se eu tentar:

clip30 = AviSource("0326.avi").AssumeFPS(7.5)
clip120 = AviSource("0326-120fps.avi")

não há efeito algum, ambos os clipes são reproduzidos a 30fps, o que significa que apenas um quarto do clipe de 120fps foi exibido no momento em que o clipe de 30fps acabou.

Então, como posso combinar esses dois clipes da maneira que desejo? Não consegui encontrar nenhum outro filtro interno ou externo que me ajudasse a fazer isso. Parece-me que se ChangeFPS fizesse o que o manual diz, seria o correto para o trabalho.

    
por Daniel Saner 29.03.2012 / 11:42

1 resposta

2

Resolvi meu problema usando o primeiro snippet da minha pergunta (alterando a taxa de quadros do clipe de 30fps para 120fps), mas também definindo AssumeFPS(30) para o vídeo final combinado, anexando essa função ao final do último filtro Eu usei. Então, por exemplo:

clip30 = AviSource("0326.avi").ChangeFPS(120)
clip120 = AviSource("0326-120fps.avi")
StackHorizontal(clip30, clip120).AssumeFPS(30)

funciona bem. Agora eu tenho um vídeo que tem a duração do clipe de 120fps a 30fps (quatro vezes a duração da gravação original) com cada quadro de 30fps quadruplicado, exatamente como eu queria.

Eu realmente não sei porque o AssumeFPS(30) final foi necessário, já que o clipe que eu ganho sem ele também está em 30fps. Eu verifiquei a saída quadro a quadro no AviDemux, e sem essa chamada final para AssumeFPS , os quadros de clip30 não são quadruplicados como deveriam.

    
por 30.03.2012 / 15:14

Tags