Newsgroup: it.comp.software.divx
Titolo: framerate e lettori stand-alone

e' da tanto che me lo chiedo...
che tecnica usano i lettori stand-alone, quando il filmato
ha un framerate diverso da 25 fps?
dato che ho collegato il lettore tramite scart a un vecchio tv,
suppongo che esso gli debba mandare un segnale pal di 25 frame
interlacciati per secondo (50 semiquadri al secondo); giusto?
eppure, il lettore puo' riprodurre anche filmati con framerate
diversi, ad esempio 29.97 (30000/1001), ma anche 15, 20, 24,
23.976 ecc.
come fa?
ma quello che piu' mi interessa sapere e' se conviene
preventivamente convertire il filmato a 25 fps in fase di
codifica (usando un qualche algoritmo, che magari e'
migliore della tecnica usata dal lettore) oppure conviene
lasciarlo com'e'?

 23.976 ecc.
Ma li vedi tutti bene? Non noti scatti specialmente nelle scene
movimentate? Io sapevo che non operano nessuna conversione.
bye, giubbe
-- 
HomePage e FAQ: 
http://giubbe.altervista.org
Inutile scrivere in privato, non ricevo le email

 Io sapevo che non operano nessuna conversione.
cosa intendi con "conversione"?
io penso che il lettore si limiti a togliere o introdurre frame
in modo da far tornare i conti... intendi questo?
nel caso di un filmato a 29.97, dovrebbe saltare un frame ogni 6
(e qualche volta ogni 5, per far tornare i conti)... per questo
dicevi che dovrebbero notarsi dei salti?
esiste una tecnica migliore?
mi sembrava di avere letto qualcosa su questo problema, tempo
fa... ma finora non me ne sono mai preoccupato... (anche perche'
framerate diversi da 25 mi capitano ogni morte di papa)

 in modo da far tornare i conti... intendi questo?
Penso che non faccia proprio niente, se facesse come dici tu applicherebbe
il pulldown 3:2 e non noteresti nulla.
Un mio amico mi ha prestato un'antenna rice-trasmittente audio/video, posso
fare qualche prova costruendo un filmato a 29.86.
Di sicuro un video 29.76 su tv pal presenta scatti nelle scene veloci, l'ho
visto personalmente con un dvd ntsc.
bye


 visto personalmente con un dvd ntsc.
probabilmente gli scatti di cui parli sono dovuti al fatto che il
lettore elimina un frame ogni 6 (all'incirca)...

 ha scritto nel messaggio
news:5E0Ie.3039$
HM1....@twister1.libero.it

Se lo converti, sfalsi l'audio col video.. il mio nortek salta vistosamente
con XviD e DivX a 23fps.. poi con un XviD 592x320, l'immagine mi viene
proprio schiacciata..
Bye
-- 
psss.: Se vuoi scrivermi in privato,
togli Sir. e cita il messaggio ; ]
-- 

lettore elimina un frame ogni 6 (all'incirca)...
Non mi torna. Tu dici che con lettore il PC e proiettore la TV posso fare
le prove o è inattendibile? 


 le prove o è inattendibile? 
ma in quel caso, il segnale PAL chi lo genera?
il lettore per PC (diciamo bsplayer) genera una sequenza di frame che
viene passata alla scheda video... poi che succede?

 con XviD e DivX a 23fps..
23 fps, mai provato.
secondo la mia ipotesi pero' non dovrebbe saltare; dato che 23 e'
minore di 25, il nortek dovrebbe duplicare 2 frame ogni 25 (in media
uno ogni 12 e mezzo); e' un caso strambo, 23 e' un numero primo :-)
quindi si dovrebbe notare un effetto di "incantamento"... insomma,
l'opposto dei salti...

 viene passata alla scheda video... poi che succede?
La mia idea che il ricetrasmettitore faccia ciò che fa un semplice cavo, al
limite posso provare anche questo.
La scheda Video genera il segnale PAL a 25 fps e lo passa alla TV. Mi rendo
conto ora che la scheda video potrebbe avere dentro di sè un algoritmo come
quello descritto da te, quindi non è molto siginificativo come test. Io
volevo vedere un qualcosa sicuramente a 29.76 immesso in un circuito a 25
fps, ma non so come fare.
Bye 


 fps, ma non so come fare.
nemmeno io
ciao e grazie

 dice qui sopra, non va usato un algoritmo di tipo IVTC.
E' vero tutti gli algoritmi proposti vanno beve quando si è passati dal
cinema alla televisione (in generale da pellicola 24 fps a televisione
29.76). Se la trasmissione è in origine a 29.76 c'è poco da fare, ottieni
comunque degli scatti nelle scene veloci.
Sinceramente non saprei cosa fare in tali casi, io proverei ugualmente un
algoritmo di invese telecine (io conoscevo solo il IVTC...) e farei il
confronto visivo con uno lasciato inalterato.


 piacerebbe saperlo...).
ho trovato una semplice spiegazione qui:
http://en.wikipedia.org/wiki/Telecine
in realta' il problema e' questo: le riprese dei film vengono fatte a
24 fotogrammi al secondo; per vedere un film alla televisione, i sistemi
europei (PAL, SECAM) usano segnali a 25 fotogrammi al secondo, mentre
quello americano (NTSC) a 29.97;
il sistema piu' usato per il PAL e' abbastanza barbaro: si visualizza il
filmato cosi' com'e', quindi viene un po' velocizzato (un film di
due ore esatte viene riprodotto in 1 h, 55 m, 12 s);
il sistema piu' usato per NTSC 29.97, e' quello menzionato da Giubbe,
cioe' "3:2 pulldown" che funziona in questo modo:
per prima cosa, si considera il filmato come se avesse un framerate
di 23.976, invece di 24 (al contrario di quanto visto sopra per il PAL,
cio' ha l'effetto di rallentare impercettibilmente il filmato);
questo stratagemma si chiama "pulldown";
ma perche' si fa cosi'?
il motivo e' di tipo matematico: 29.97 e' il rapporto tra 30000 e 1001,
mentre 23.976 e' il rapporto tra 24000 e 1001, quindi, il rapporto tra
i due framerate e' pari a 30:24=5:4
a questo punto, il problema diventa questo: a ogni 4 frame del filmato
devono corrispondere esattamente 5 frame di segnale televisivo;
qui entra in gioco il fatto che il segnale televisivo e' interlacciato,
cioe' ogni fotogramma e' composto di due "campi", uno per le righe
pari e l'altro per le dispari;
la tecnica usata e' la seguente: consideriamo una sequenza di 4 frames
del film, e numeriamoli da 0 a 3; indichiamo con:
T0 il "campo top" del primo frame
B0 il "campo bottom" del primo frame
T1 il "campo top" del secondo frame
B1 il "campo bottom" del secondo frame
T2 il "campo top" del terzo frame
B2 il "campo bottom" del terzo frame
T3 il "campo top" del quarto frame
B3 il "campo bottom" del quarto frame
il film originale e' fatto cosi':
(T0-B0), (T1-B1), (T2-B2), (T3-B3)
il segnale NTSC viene costruito in questo modo:
(T0-B0), (T1-B1), (T1-B2), (T2-B3), (T3-B3)
ecco che 4 frame sono diventati 5...
e questo spiega perfettamente perche' nel documento che ho citato
nel post precedente si dice di guardare la sequenza di frame e di
verificare che ci siano 2 frame interlacciati seguiti da 3 frame
progressivi, seguiti da 2 frame interlacciati, ecc.
---------------------
If, in every
5 frames, you see 2 interlaced frames and 3 non-interlaced (progressive)
frames, then it has been telecined and can be IVTC'd (Inverse Telecined).
---------------------
i filtri del tipo IVTC cercano di fare il contrario, cioe' partono da
filmati 29.97 e, per ogni sequenza di 5 frames, ricostruiscono i 4
frames progressivi originali; probabilmente il processo e' complicato
dal fatto che non e' certa la linea di confine tra i gruppi di 5 frames...
comunque, tornando al problema iniziale, se ho un filmato 29.97 nativo
(che non e' stato ottenuto con il processo "pulldown 3:2") mi pare che
non abbia senso applicare l'algoritmo IVTC...
quello che mi chiedo, adesso, e' se esista un algoritmo efficace per
ridurre il framerate a 25 fps da un filmato 29.97 nativo, o se l'unico
modo e' un "frame dropping uniforme" (l'algoritmo che avevo descritto
ieri)...

 Troverai inoltre alcune sorprese sulla conversione.
ci sono metodi che sto cercando?
ok, vado a leggerlo, avevo gia' quell'articolo salvato su pc :-)
ma non l'avevo letto tutto, solo le parti che mi interessavano
in quel momento :-)

 ieri)...
Come ti dicevo non lo so, ma dalle FAQ si ricava questo algoritmo avisynth
che fa più o meno quello che dici tu:
      SeparateFields() --> (1)
      Weave() --> (2)
      SmoothDeinterlace(doublerate=true) --> (3)
      ConvertFPS(50) # or ChangeFPS(50) --> (4)
      LanczosResize(720,576)
      SeparateFields() --> (5)
      SelectEvery(4,1,2) --> (6)
      Weave() --> (7)
(1) raddoppia i frame (59.52 fps)
(2) riporta i frame nella situazione precedente (dimezza i frame 29.76 fps)
(3) deinterlaccia dicendo che i frame rate è doppio 
(4) passa da 29.76 a 50
(5) passa a 100 fps
(6) acchiappa i frame 1,2,5,6,9,10
(7) ottiene 25 fps mettendo insieme i frame (1,2) (5,6) e così via. Il
numero è riferito al passo precedente (2 e 5 sono consecutivi).
In verità non mi è molto chiaro, specialmente i punti 1,2,3, ma funziona
^_^
Una spiegazione dettagliata di avisynth la trovi qui:
http://members.lycos.co.uk/alexebasta/


 In verità non mi è molto chiaro, specialmente i punti 1,2,3, ma funziona
mi sa che i punti 1 e 2 non facciano nulla (sono l'uno l'opposto
dell'altro)
dunque, ho recuperato il filtro SmoothDeinterlace, e' il porting (a opera
di Xesdeeni2001) del filtro per VD scritto da tale Gunnar Thalin
in fondo al file di testo allegato, ho trovato questo:
# NTSC DVD (59.94 fps) to PAL DVD (50 fps)
LoadPlugin("SmoothDeinterlacer.dll")
LoadPlugin(PluginPath + "MPEG2DEC.dll")
InputVideo = MPEG2Source("NTSCDVD.d2v")
SmoothDeinterlace(tff=true, doublerate=true)
BilinearResize(720, 576)
ConvertFPS(50)
SeparateFields()
SelectEvery(4, 1, 2)
(tff sta per "top field first"... ma questi sono dettagli...)
adesso mi resta da capire come funziona il tutto...
comunque ti ringrazio moltissimo, credo che questi tizi abbiano
escogitato una soluzione abbastanza efficace (che stavo cercando)
ciao

 dell'altro)
L'unica cosa che mi viene in mente è che possa servire per ilo riordino
necessario in quei casi citati da Benny.
Bye, lieto di esserti stato di aiuto.


 l'opposto dei salti...
Bè quei film, ti incartano gli occhi x non parlare del cervello dopo 2 ore
di visione...


 Bye, lieto di esserti stato di aiuto.
certamente.
non ho avuto molto tempo e non ho ancora fatto alcuna prova, ma credo di
avere capito quasi tutto;
nella guida di "alexebasta" che mi hai segnalato, nella sezione "FPS",
ho trovato questo metodo:
------------------
Esempi di conversione NTSC->PAL:
Codice:
AviSource("NTSC_clip.avi") # Get clip
Bob() # Separate fields and interpolate them to full height.
BicubicResize(768, 576) # Resize to PAL square-pixel frame size.
                        #(Use 720,576 for CCIR.)
ConvertFPS(50) # Convert field rate to PAL, using Blend Mode.
SeparateFields.SelectEvery(4, 0, 3) # Undo Bob, even field first.
#Use SelectEvery(4, 1, 2) for odd field first.
Weave # Finish undoing Bob.
------------------
con questo esempio ho capito come funziona l'altro...
i punti cruciali di questo metodo sono: "Bob" e "ConvertFPS"
Avisynth ha tre filtri per cambiare framerate a un filmato:
AssumeFPS, ChangeFPS e ConvertFPS (si trovano nel file "fps.cpp"
del codice sorgente):
- il primo non fa niente, cioe' ha come effetto che nell'header
  il framerate dichiarato viene cambiato, ma la sequenza dei frame
  non viene modificata, quindi il filmato viene velocizzato o
  rallentato (e' la soluzione adottata per i film trasmessi in PAL)
- il secondo coincide con l'algoritmo che ho descritto qualche
  giorno fa, cioe' puo' duplicare o rimuovere frames in modo
  uniforme, in modo che la durata del filmato resti inalterata;
- il terzo produce tanti frames quanti il secondo, ma usando un
  metodo piu' complesso, cioe' mescolando in qualche modo frame
  adiacenti; ha due modalita' di funzionamento: "blend full
  frames" e "switch to next frame" (questo secondo e' attivato da
  un parametro "zone" che indica di usare la modalita' "blend"
  per il numero specificato di righe, oltre le quali si switcha
  al prossimo...)
ora, la tecnica di conversione NTSC->PAL che ho riportato sopra
usa ConvertFPS ma invece che sui frames, sul filmato ottenuto
mediante "Bob", cioe' la sequenza di frames ottenuti dai campi
interpolati a tutto schermo; il framerate di tale filmato sara'
doppio di quello di partenza (quindi 59.94); gli ultimi due
filtri (SelectEvery e Weave) creano il filmato finale 25 fps
interlacciato;
il metodo che abbiamo visto nei post precedenti e' un ulteriore
miglioramento di questa tecnica: invece di usare "Bob" usa
"SmoothDeinterlace(doublerate=true)", che funziona in modo
simile a "Bob", ma con questo miglioramento:
- nei frame che l'algoritmo rileva come "aree statiche",
  invece di creare un frame per ogni campo interpolandoli a
  tutto schermo, lascia il frame cosi' com'e' (composto dai
  due campi);
- negli altri casi si comporta come "Bob".
questa tecnica da' in generale un aumento di definizione che
dovrebbe portare a un risultato finale migliore.
per finire, voglio ricordare che i metodi di conversione che
sono stati menzionati (quello che usa "Bob" e quello che usa
"SmoothDeinterlace") sono stati progettati per ottenere PAL
25 fps interlacciati a partire da NTSC 29.97 "interlacciati
nativi" (ripeto: "interlacciati nativi").
i metodi sfruttano il fatto che il filmato di partenza e'
interlacciato (ed e' nato cosi');
se invece si parte da un film NTSC 29.97 ottenuto da un film
24 fps progressivi, mediante un processo "telecine" (tipo
"2:3 pulldown"), allora non bisogna usare questi metodi, ma
filtri di tipo "ivtc".
e' tutto.

 di visione...
ci credo.
un framerate di 23 non mi e' mai capitato... secondo me esiste un modo per
portarli a 25 in modo che la visione (su tv) dei risultati sia "accettabile",
ma non saprei dirti se c'e' un programma che lo fa; penso pero' che si possa
scrivere uno script Avisynth...

 filtri di tipo "ivtc".
Grande, come sempre!
Con il tuo permesso modificherò le FAQ con queste informazioni, anche
perchè da lì si evince che è meglio usare sempre il metodo appena
descritto.
Bye


 descritto.
certo.
mi era sfuggito che nella FAQ 12 c'e' un link alla guida di
"xesdeeni2001" (l'autore del porting di "SmoothDeinterlacer")...
l'avevi preso da li' il metodo che avevi postato?

 l'avevi preso da li' il metodo che avevi postato?
Si (lo avevo scritto).


 fa; penso pero' che si possa scrivere uno script Avisynth...
Ok, ma i frames mancanti chi ce li mette? In questo modo si potrebbe
allungare il video ma l'audio poi?


 allungare il video ma l'audio poi?
il video non si allunga; si aumenta il numero dei frame di un fattore
25/23, ma dato che il framerate nominale viene cambiato da 23 a 25,
la durata del video resta inalterata.
vediamo un esempio.
supponiamo di partire da un filmato 23 fps di un'ora esatta; il numero
totale dei frame e': 3600*23=82800.
dopo il processo di espansione, il numero di frame diventa:
82800*(25/23)=90000.
dato che il framerate nominale (nell'header dell'AVI) lo cambiamo da
23 a 25, la durata del filmato e' sempre di un'ora esatta:
90000/25=3600.
quindi l'audio va lasciato cosi' com'e' e rimuxato al nuovo filmato.
l'altra possibilita' e' quella di cambiare il framerate nominale
senza alterare i frames (quello che si fa con i film in PAL); in
questo modo, un filmato di un'ora esatta diventa piu' corto:
82800/25=3312 secondi, cioe' 55 minuti e 12 secondi.
in questo modo pero', il filmato viene velocizzato in modo abbastanza
sensibile;
inoltre, come dicevi te, l'audio va modificato...
ad esempio, in questo caso, se la traccia audio non compressa si
chiama "audio.wav" ed e' campionata a 44100 Hz, si calcola:
44100*25/23 =(circa) 47935
quindi si puo' usare un programma come "sox" (o analogo):
sox -r 47935 audio.wav -r 44100 nuovo.wav resample
il file "nuovo.wav" cosi' ottenuto, avra' una durata pari a
55 minuti e 12 secondi, quindi rimuxandolo al video, saranno
sincronizzati.
il problema e' che, dopo un resample di questa portata (25/23),
l'audio risulta sensibilmente piu' acuto... probabilmente
esistono metodi per attenuare questo effetto, ma io di questo
argomento non ne so abbastanza...