Quote:
E poi se volessi ottenere un formato
min-min:sec-sec (00:00) e un formato sec-sec:decimi-decimi (00:00) come dovrei fare (con il timer giallo)?
|
Per risolvere il problema della visualizzazione dei decimi alla fine ho modificato sostanzialmente lo script, restando fermi i punti detti nel post precedente riguardo i valori di subtitle ed animate.
Il nuovo script è questo:
Codice:
function counter(clip clip, int n )
{
n = n / clip.framerate()
sec = int(n)
mi=int(sec/60)
mis=string(mi)
mis = strlen(mis) < 2 ? "0" + mis : mis
sd = leftstr(string(n-int(n/60)*60,"%06.3f"),5)
sd1=leftstr(string(sd),2)
sd2=rightstr(string(sd),2)
clip.subtitle(mis + ":"+sd1+ ":"+sd2,-1,POSIZIONE VERTICALE ,FRAME INIZIO,FRAME FINE, "arial", 20, $FFF000,$000000)
}
clip = directshowsource("PERCORSO DEL VIDEO")
animate( FRAME INIZIO,FRAME FINE , "counter", clip , FRAME INIZIO , clip , FRAME FINE)
Il problema che si creava col vecchio script era dovuto ai secondi dato che era sostanzialmente un timer per tempi brevi non avevo preso in considerazione che arrivato al 59° secondo non tornava a zero ma proseguiva il conteggio incrementando di uno, quindi 60, 61, 62 ecc.
L'altro problema era dovuto ai centesimi di secondo, se guardi bene erano ricavati semplicemente dividendo per 100 il valore dei secondi ma l'incremento che si aveva era non corrispondente al vero tranne che per il passaggio da un secondo al successivo.
Quindi cercando in giro tra i vari timer proposti ho trovato una soluzione più fattibile.
La variabile
sec ora serve solo come numero incrementale e viene convertita in minuti dalla riga
mi=int(sec/60), le due successive sevono per la conversione da numerico a stringa e per l'inserimento dello zero davanti ai primi 9 conteggi.
Per contare i secondi ed i decimi ho usato un'altra strategia.
Ho utilizzato la funzione
leftstr che consente di utilizzare solo un numero definito di caratteri di una stringa.
In questo caso ho preso i primi 5 caratteri della stringa
sd che contiene i valori di
n convertiti in
mod 60 ed ho stabilito il formato con
%06.3f cioè la stringa deve essere di 6 bit con lo zero a sinistra e 3 numeri decimali in virgola mobile.
Come ti ho detto è un sistema che ho trovato in rete, dubito che ci sarei arrivato da solo...
Però il formato risultante è
ss.dd essendo sostanzialmente un numero con la virgola quindi ho creato altre due variabili stringa che contengono i primi due caratteri corrispondenti al formato
ss e gli ultimi due in formato
dd intervallati dal simbolo
:.
Ora il risultato è soddisfacente, in dipendenza di cosa vuoi visualizzare basta che modifichi la linea:
c
lip.subtitle(mis + ":"+sd1+ ":"+sd2,-1,POSIZIONE VERTICALE ,FRAME INIZIO,FRAME FINE, "arial", 20, $FFF000,$000000) ricordandoti che:
mis sono i minuti
sd1 sono i secondi
sd2 sono i decimi ed i centesimi.