|
|
|
|
Strumenti |
26-09-2010, 09:21 | #1 |
Junior Member
Iscritto dal: Sep 2010
Messaggi: 4
|
Cronometro o timer su video?
Se ho un video e voglio metterci un cronometro o un timer che programma devo usare? (Io ho sony vegas) Spiegatemi passo x passo come si deve fare.
Grazie |
26-09-2010, 11:01 | #2 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 1780
|
Qualcosa tipo questo?
http://www.youtube.com/watch?v=W5GKeNl5CS8 |
26-09-2010, 12:06 | #3 | |
Junior Member
Iscritto dal: Sep 2010
Messaggi: 4
|
Quote:
|
|
26-09-2010, 12:37 | #4 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 1780
|
Quel timer è stato ottenuto con Avisynth, ho provato tempo fa a farne uno uguale ed è piuttosto semplice.
Avisynth è un programma che funziona da frameserver cioè si interpone tra la fonte video ed il software di montaggio applicando i suoi filtri al video quindi non viene usato direttamente ma richiamato tramite uno script. Non so se Vegas accetta gli script con formato .avs, controlla se tra i tipi di file accettati c'è questa estensione, con le versioni vecchie mi pare che funzionasse altrimenti devi appoggiarti ad altri software tipo VirtualDub. Il funzionamento è semplice, crei lo script col blocco note, lo salvi con estensione .avs e lo carichi col programma di videoediting. Lo script per creare il timer è questo: Codice:
function counter(clip clip, int n ) { n = n / clip.framerate() sec = int(n) secs = string(sec) secs = strlen(secs) < 2 ? "0" + secs : secs ms = string(int(10 * (n - sec))) clip.subtitle( "Nome " + secs + ":" + ms,-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) Se hai dei problemi chiedi pure. |
26-01-2014, 21:54 | #5 | |
Member
Iscritto dal: Dec 2008
Messaggi: 45
|
Quote:
Come ottengo il conteggio dei secondi e dei minuti? mm.ss
__________________
grazie! reggio |
|
27-01-2014, 19:54 | #6 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 1780
|
Ti spiego come funziona questo script.
Tutto si basa sulla funzione definita counter che nella prima riga stabilisce la base dei tempi n. N si incrementa ogni frame e viene trasformata nella variabile sec come numero intero quindi tutti i valori compresi tra 0 e 0,9 daranno come risultato sec=0, tutti i valori tra 1 e 1,9 daranno come risultato sec=1 e così via. I decimi di secondo vengono calcolati in modo simile, moltiplicando per 10 il risultato della sottrazione n-sec e prendendo solo l'intero senza virgola. Quindi dato che la base dei tempi si incrementa in pratica ogni frame, più è alto il framerate più preciso sarà il conteggio dei decimi di secondo che in realtà non vengono incrementati in modo lineare ma solo quando il loro intero cambia di valore. Il risultato finale sarà sempre preciso, i valori intermedi no. Per lo stesso motivo con questo script non si possono contare i centesimi o i millesimi, ovvero si possono contare ma i valori visualizzati saranno quelli corrispondenti a quel singolo frame quindi ammesso che il video scorra a 25 fps gli incrementi saranno di 4 centesimi o di 40 millesimi di secondo. Comunque per simularli puoi aggiungere queste due righe: ms2= string(int(100*(n-sec))) ms2= strlen(ms2) <2 ? ms2 + "0" : ms2 ed aggiungere alla visualizzazione del sottotitolo anche il valore ms2, così lo script completo diventerà: Codice:
function counter(clip clip, int n ) { n = n / clip.framerate() sec = int(n) secs = string(sec) secs = strlen(secs) < 2 ? "0" + secs : secs ms = string(int(10 * (n - sec))) ms2= string(int(100*(n-sec))) ms2= strlen(ms2) <2 ? ms2 + "0" : ms2 clip.subtitle( "Nome " + secs + ":" + ms + ms2,-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) Codice:
directshowsource("PERCORSO DEL VIDEO") ShowSMPTE(x=105, y=320, font="Arial", size=20, text_color=$ffffff)
__________________
no pain, no gain
|
14-02-2014, 05:51 | #7 | |
Member
Iscritto dal: Dec 2008
Messaggi: 45
|
Quote:
In questo caso ho usato il cod sotto, ma avendo un video di prova da 29fps, il risultato del primo contatore non è corretto e non ho capito come variare il codice per passare dal 25 a 29fps e ottenere un formato min-min:sec-sec (00:00) e un formato sec-sec:decimi-decimi (00:00) ... Scarterei invece il secondo timer perchè io NON voglio contare dall'inizio e nemmeno con tutti quei valori 00:00:00:00:... Codice:
function counter(clip clip, int n ) { n = n / clip.framerate() sec = int(n) secs = string(sec) secs = strlen(secs) < 2 ? "0" + secs : secs ms = string(int(10 * (n - sec))) ms2= string(int(100*(n-sec))) ms2= strlen(ms2) <2 ? ms2 + "0" : ms2 #clip.subtitle( "Nome " + secs + ":" + ms,-1 ,POSIZIONE VERTICALE ,FRAME INIZIO,FRAME FINE, "arial", 20, $FFF000,$000000) clip.subtitle( "Timer " + secs + ":" + ms + ms2,-1 ,55,0,330, "arial", 36, $FFF000,$000000) } clip = directshowsource("C:\Users\Public\Videos\Sample Videos\Farfalla.avi") animate( 3,222 , "counter", clip , 3 , clip , 99) Subtitle("...il timer non scorre correttamente...",40,50,1,1000,"Arial",40,$FF0000) #directshowsource("C:\Users\Public\Videos\Sample Videos\Farfalla.avi") ShowSMPTE(x=205, y=320, font="Arial", size=50, text_color=$ffffff) Subtitle("...questo conta bene ma ha troppi 00.00.00 ...",20,350,1,1000,"Arial",35,$ffffff) Subtitle("...e poi non può partire dal 3° secondo del film ...",20,400,1,1000,"Arial",35,$ffffff) PS: Ma puoi consigliarmi link dove trovare tanti piccoli progetti AVS per capire come fare le varie funzioni? In rete ho trovato pochissimo se si esclude il manuale che però non riesco a "tradurre" in funzioni utili ... L'ideale sarebbe avere tanti piccoli esempi da copiare, studiare e unire, sai darmi qlc dritta?
__________________
grazie! reggio Ultima modifica di reggio : 14-02-2014 alle 05:56. |
|
15-02-2014, 09:55 | #8 | |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 1780
|
In realtà il codice così come è costruito prescinde dal framerate, quando arrivi al frame che corrisponde al secondo intero viene visualizzato il numero intero.
Puoi provare ad avanzare di un frame alla volta e arrivando al trentesimo dovresti visualizzare il primo secondo intero nel formato 01:000 Ricordati che il framerate esatto non è 29 ma 29,97 fps quindi dato che lo script lavora con numeri interi lo arrotonda a 30. Quote:
Semplici script si trovano ma bisogna cercare, specialmente se rivolti all'editing vero e proprio, ci vuole pazienza...
__________________
no pain, no gain
|
|
16-02-2014, 10:50 | #9 | |
Member
Iscritto dal: Dec 2008
Messaggi: 45
|
Quote:
considera che, come vedi dal codice sopra, i timer dovrebbero essere allineati e invece ... quello giallo non ha proprio senso Riesci a capire cosa non và? 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)?
__________________
grazie! reggio |
|
16-02-2014, 18:16 | #10 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 1780
|
Allora...
L'errore è questo: animate( 3,222 , "counter", clip , 3 , clip , 99) Devo spiegarti qualcos'altro su questo script. Alla fine della funzione counter c'è il filtro subtitle che può essere definito oltre che col tipo di font, colore, posizione e gli altri valori propri del carattere, anche con le variabili int first_frame, int last_frame che stabiliscono quando la stringa deve essere visualizzata. nel caso del tuo script i valori sono 0 e 330 quindi dopo il frame 330 il filtro cessa di visualizzare. La funzione animate invece ha qualcosa in più: Animate(clip clip, int start_frame, int end_frame, string filtername,start_args, end_args) Start_frame e end_frame stabiliscono l'intervallo nel quale la funzione agisce, nel tuo caso dal frame 3 al frame 222. Start_args, end_args stabiliscono l'intervallo dei valori che il filtro deve applicare, nel nostro caso alla funzione counter. L'errore che hai fatto è che hai inserito 3 e 99. Questo vuol dire che il filtro per la durata che va dal frame 3 al 222 applicherà l'intervallo tra questi valori con il risultato che vedi. In pratica se tra start_frame e end_frame c'è una differenza di 219 frame come nel tuo caso, la solita differenza deve esserci anche tra start_args e end_args quindi avresti dovuto inserire ugualmente 3 e 222 oppure anche altri valori ma la cui differenza sia sempre 199. Se per esempio vuoi far apparire il contatore dal terzo secondo fino al sesto, e vuoi che il conteggio parta da zero i valori da inserire nella funzione subtitle sono 90 (3° secondo a 29.97fps) e 180 mentre nella funzione animate devi inserire 90 e 180 in start_frame e end_frame e 0 e 90 in start_args e end_args. Come vedi la differenza è sempre 90 frame. Se invece vuoi che nonostante il conteggio tra i secondi 3 e 6 vuoi che la visualizzazione duri un tempo diverso, puoi inserire un valore a piacere sempre nella funzione subtitle.
__________________
no pain, no gain
|
17-02-2014, 21:55 | #11 | |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 1780
|
Quote:
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) 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: clip.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.
__________________
no pain, no gain
Ultima modifica di Esavoc : 18-02-2014 alle 16:55. |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:13.