Ho letto da
questo articolo che per poter "rallentare" il video sono necessarie fotocamere/videocamere che abbiano come valore di fps 50/60, è vero?
Diciamo che piu' e' alto il frame-rate, nativo meglio e', in quanto si hanno più fotogrammi a disposizione; ma si dovrebbe raggiungere una fluidita' soddisfacente anche partendo da video a 30 fps nativi (intanto sempre meglio che 24 o 25); inoltre e' preferibile preventivamente separare i fotogrammi interi in semi-quadri (o campi), quindi in pratica si lavora a 60 fps con altezza dimezzata (per cui ci perdi in definizione spaziale, su quella temporale ci "guadagni" e cio' e' funzionale a migliorare la fluidita' nel rallentare il video). Il segreto sta poi nel non limitarsi a rallentarlo ma a "mischiare" i fotogrammi, come dicevo...
La mia arriva a 30 fps. Inoltre potresti dirmi come creare l'effetto slow motion con AvySynth? Un'infarinatura di linguaggio di programmazione l'ha possiedo.
Beh, se possiedi gia' un'infarinatura, non dovrebbe esser difficile. Puoi installare Avisinth e dare un'occhiata anche al manuale allegato che e' fatto abbastanza bene; se sai l'inglese, ancora meglio: in alcune parti e' piu' esaustivo quello inglese e (forse) viceversa.
Le funzione 'cuore' su cui basare lo script da applicare alla parte da rallentare, e' questa:
selectevery()
Esempio:
Codice:
video1=avisource("C:\filmato.avi")
video1=video1.separatefields()
spezzoneVideo1=video1.split(100, 500)
spezzoneVideo1rallentato = spezzoneVideo1.selectevery(8, 0,1, 2,3,2, 5,4, 7,6,7)
spezzoneVideo1rallentato = spezzoneVideo1rallentato.weave()
return spezzoneVideo1rallentato
E' uno script un po' rudimentale, giusto per dare un'idea... adesso mi rendo conto che sono un po' arrugginito non usandolo da un po'.
La funzione
separatefields divide i fotogrammi interi in campi, per cui se il tuo video e' 640*480 a 30fps; con questa funzione diventa 640*240 a 60 fps, per cui non si pone piu' il problema che 30fps sarebbero pochi (il prezzo è la metà altezza in definizione).
split credo sia intuitivo... prende la parte di "video1" che va dal fotogramma 100 a 500 (supponendo che si vuole rallentare tale parte).
selectevery: nell'esempio ho usato quello che si fa nel "rallentamento" per portare il frame-rate da 24 a 30 fotogrammi: significa che 8 sono i fotogrammi considerati; cioè ogni 8 fotogrammi di "spezzoneVideo1", se ne aggiungono 2, ovvero vengono duplicati il 2 e il 7 in questo caso e come vedi il 5 e 4 sono invertiti e anche dal 3 al 2 o dal 7 al 6 si ha un ordine non cronologico ed è questo che inganna l'occhio dando maggiore fluidita' rispetto a non fare tale inversione. Nel tuo caso, visto che vuoi un rallentamento ben maggiore dovrai vedere quanti fotogrammi duplicare/mischiare, ad esempio puoi selezionane 10 e raddoppiare la sequenza dei fotogrammi 0123456789 in 0102132435465768798.
weave semplicemente riunisce i campi ottenendo di nuovo l'altezza 'originale'; nel tuo caso tornerebbe un 640*480 30fps (ma interlacciati, non progressivi se erano progressivi); per deinterlacciare si puoi usare uno dei tanti filtri (anche virtualdub stesso ne ha uno).
return: passa in uscita il video specificato; in questo caso torna a virtualdub (se apri lo script .avs con vdub) solo lo spezzone rallentato; lo script che ho fatto e' quindi solo un esempio "grezzo", perche' andrebbero sommate le parti non rallentate, quindi video1.split(0, 99) e la parte finale...
Il tutto poi andrebbe convertito ad un framerate standard, per questo si puo' usare prima di "return" la funzione changeFPS() (ma nel manuale di Avisinth mi ricordo che ce ne sono diverse); oppure ripassando il video con un ulteriore "selectevery()" stesso, impostato in modo che il numero di fotogrammi rientri in uno 'standard' (30,60,120fps...)