Clips Corner :: Creazione sottotitoli in After Effects
Creazione sottotitoli in After Effects
di Paperinik
lunedì 03 novembre 2008
Introduzione
Durante la produzione di un video può capitare di dover inserire dei sottotitoli in determinate sequenze, causa traduzione del parlato in altra lingua, descrizione dei luoghi e delle immagini o più semplicemente la classica sottotitolazione di un videoclip musicale. Questo articolo vuole descrivere un sistema semplice quanto efficace per creare i nostri sottotitoli in After Effects e, di conseguenza, in Premiere Pro tramite Dynamic Links o in qualsiasi altro software di editing del mercato, tramite esportazione con trasparenza.
La creazione in After Effects
Pensate alla sottotitolazione di un videoclip musicale come il seguente:
(l'utilizzo del brano “People help the people” dei Cherry Ghost è esclusivamente a scopo didattico)
Ebbene, abbiamo impiegato solo una decina di minuti di lavoro per la realizzazione e la sincronizzazione dei sottotitoli dell'intero video, che dura in totale circa 4 minuti. Questo grazie al sistema che andiamo a descrivere.
After Effects mette a disposizione uno degli strumenti più potenti ed allo stesso tempo flessibili che ci siano: le expressions. Generalmente gli utilizzatori tendono ad avere timore di questo strumento che prevede, come noto, l'inserimento di codice in JavaScript. Possiamo assicurare che è un timore infondato e che, quando inizieremo ad utilizzarle, non ne potremo più fare a meno. Seguendo inoltre i nostri articoli dedicati ed i nostri tutorials, si potranno trovare una moltitudine di applicazioni interessanti che faranno capire quanto possano alleggerire il lavoro del compositor nella motion graphic o nel compositing.
Dopo questa premessa veniamo al caso specifico e vediamo subito una interessante applicazione delle expressions di After Effects. Prendiamo per l'occasione un caso tipico: la creazione di sottotitoli in un videoclip musicale.
Se non utilizzassimo le expressions la creazione comporterebbe inevitabilmente una lunga serie di layer text per ogni frase del nostro materiale audio/video ed ogni layer andrebbe di conseguenza sincronizzato con il parlato/cantato. Altra strada potrebbe essere la modifica con keyframes del parametro Source Text del layer text, aggiornando di volta in volta il testo e sincronizzando i keyframes così generati con la traccia audio. Comunque un lavoro lungo e sfiancante che non permette una modifica veloce del mio testo e, soprattutto, rende non facilmente riutilizzabile il mio progetto, qualora volessi creare una seconda traduzione dei miei sottotitoli.
Ma ecco che ci vengono in soccorso le expressions. Quello che in genere abbiamo a nostra disposizione quando dobbiamo fare questo tipo di lavori è un testo già preparato, quale miglior modo per risparmiare tempo quindi se non quello di inserire questo testo direttamente nella mia expression? Ma procediamo con ordine.
Prima cosa da fare è quella di importare il nostro video (oppure solo l'audio) per creare una composition di riferimento, la qualità del materiale non è importante in questo momento in quanto ci servirà esclusivamente per sincronizzare i nostri sottotitoli. Anzi, il primo consiglio che diamo è quello di utilizzare un audio/video molto leggero in modo che durante le varie RAM preview che faremo, non intralci o rallenti il nostro lavoro di sincronizzazione.
Il secondo passo è creare in questa composition un nuovo Null Object che rinomineremo (selezionandolo e premendo CTRL+SHIFT+Y) in "Controller" e che conterrà uno Slider Control, il quale non è altro che un cursore vuoto prelevabile dalla lista effetti cartella Expression Controls, senza alcun riferimento a parametri di After Effects ed utilizzabile esclusivamente in congiunzione con le expressions. Rinominiamo questo Slider Control dal nome di default in "TXT Number" (selezionandolonella finesta Effect Controls e premendo INVIO).
Adesso creiamo un nuovo layer text con le caratteristiche e la formattazione che vogliamo, consigliamo un allineamento al centro per quanto riguarda i sottotitoli di tipo classico. Apriamo il campo expression sul parametro Source Text (facendo ALT+click sullo stopwatch relativo) ed inseriamo le seguenti linee, ponendo attenzione alla corretta sintassi e al maiuscolo/minuscolo presente:
Le linee di codice sopra sono tutto quello che ci serve per implementare i nostri sottotitoli. Possiamo modificarne la morfologia, per così dire, mettendo ogni linea di testo a capo col tasto INVIO, per permetterne una più semplice lettura del testo inserito. Ricordiamo che in JavaScript una linea ha termine solo nel momento in cui il compilatore trova un simbolo di ";" (punto e virgola). Le nostre tre linee di codice possono quindi essere scritte anche nel seguente modo:
txt = ["testo 1","testo 2","testo 3\rsu due linee"];
assegna alla nostra variabile "txt" un array (ovvero una schiera, un gruppo) di valori di testo, separati da virgole e racchiusi tra virgolette, in questo caso:
testo 1
testo 2
testo 3\rsu due linee
il tutto a sua volta racchiuso tra due parentesi quadre. La prima cosa interessante che notiamo è la sintassi dell'ultimo valore di testo, ovvero:
testo 3\rsu due linee
la combinazione di caratteri \r sta ad indicare che in quel punto c'è un rimando a capo e che la prossima parola o frase si troverà nella seconda linea di testo. Ogni volta che avremo necessità di spezzare il nostro testo in due linee, dovremo utilizzare questo metodo.
ha lo scopo di catturare il sottotitolo giusto ed assegnarlo alla variabile "subtitle". Per fare questo va a leggere il valore numerico presente nello Slider Control "TXT Number", posizionato nel Null Object "Controller" creato in precedenza; l'espressione Math.floor restituisce il primo intero inferiore rispetto al valore immesso, questo per evitare che siano presenti decimali nella nostra variabile "subtitle", dovuti allo spostamento manuale dello Slider Control. Quindi letteralmente la linea di codice si potrebbe leggere: prendi il valore dello Slider posizionato nello Slider Control “TXT Number” applicato al Null Object “Controller”, presente in questa composizione, trova il numero intero inferiore più vicino (es.: numero 2.34 valore restituito 2) ed assegnalo alla variabile “subtitle”.
La terza ed ultima linea infine:
txt[subtitle]
assegna al Source Text, del nostro layer text, un valore di testo preso dalla variabile "txt" ed indicizzato dal parametro "subtitle". Quindi nel caso che subtitle abbia:
valore 0, il testo risultante a video sarà:
testo 1
valore 1, il testo risultante a video sarà:
testo 2
valore 2, il testo risultante a video sarà:
testo 3
su due linee
Questo è tutto quello che ci serve sapere per realizzare i nostri sottotitoli in After Effects.
Un esempio pratico: la sottotitolazione di un videoclip musicale
Vediamo un esempio che chiarisca meglio di ogni altra cosa come si utilizza il codice sopra descritto. Ammettiamo di voler sottotitolare un videoclip musicale e di avere a disposizione il testo del brano. Carichiamolo in un editor di testo puro, come ad esempio il Blocco note di Windows, ed andiamo a sistemarne la sintassi in modo da permettere poi, con un semplice copia/incolla, l'inserimento diretto nella nostra expression.
Testo originale:
God knows what is hiding in that\rweak and drunken heart I guess you kissed the girls\rand made them cry those Hardfaced Queens of misadventure God knows what is hiding in those\rweak and sunken eyes a Fiery throng of muted angels Giving love and getting nothing back ...
testo modificato per adattarlo alla sintassi dell'expression di After Effects:
"", "God knows what is hiding in that\rweak and drunken heart", "I guess you kissed the girls\rand made them cry", "those Hardfaced Queens of misadventure", "God knows what is hiding in those\rweak and sunken eyes", "a Fiery throng of muted angels", "Giving love and getting nothing back", ...
Come è possibile notare da subito, sono presenti le virgolette che racchiudono ogni linea del brano ed all'interno delle frasi più lunghe il parametro \r che porta a capo la seconda parte della frase. Ogni linea termina con una "," (virgola) in modo che After Effects riconosca i diversi valori dell'array. La prima linea è particolare, sono " " due virgolette senza testo dentro ed è un modo per dire ad After Effects che quello è un testo nullo; messa come primo valore nell'array questo sarà identificato dal valore 0 (zero) nello Slider Control "TXT Number" e sarà utilizzato ogni qualvolta sia necessaria una pausa nei sottotitoli, pensiamo ad un assolo senza cantato, non sarebbe ortodosso lasciare l'ultimo sottotitolo, inoltre con questo sistema evitiamo di andare ad agire sull'opacità del layer text per eliminarlo temporaneamente dal video.
Una volta preparato il nostro testo sull'editor Blocco note, selezioniamo tutto e facciamo copia/incolla nella nostra expression, precedentemente inserita, facendo attenzione di inserire il testo nel giusto punto, ovvero sostituendo solamente le parti evidenziate in rosso
dopo l'inserimento avremo la nostra expression trasformata in:
txt = [ "", "God knows what is hiding in that\rweak and drunken heart", "I guess you kissed the girls\rand made them cry", "those Hardfaced Queens of misadventure", "God knows what is hiding in those\rweak and sunken eyes", "a Fiery throng of muted angels", "Giving love and getting nothing back", "People help the people", "And if your homesick,\rgive me your hand and I’ll hold it", "People help the people", "And nothing will drag you down", "Oh and if I had a brain,\rOh and if I had a brain", "I’d be cold as a stone\rand rich as the fool", "That turned, all those\rgood hearts away", "God knows what is hiding,\rin that world of little consequence", "Behind the tears, inside the lies", "A thousand slowly dying sunsets", "God knows what is hiding in those\rweak and drunken hearts", "I guess the loneliness came knocking", "No on needs to be alone, oh save me", "People help the people", "And if your homesick,\rgive me your hand and I’ll hold it", "People help the people", "Nothing will drag you down", "Oh and if I had a brain,\rOh and if I had a brain", "I’d be cold as a stone\rand rich as the fool", "That turned, all those\rgood hearts away", "People help the people", "And if your homesick,\rgive me your hand and I’ll hold it", "People help the people", "Nothing will drag you down", "Oh and if I had a brain,\rOh and if I had a brain", "I’d be cold as a stone\rand rich as the fool", "That turned,\rall those good hearts away" ]; subtitle = Math.floor(thisComp.layer("Controller").effect("TXT Number")("Slider")); txt[subtitle]
Questo è tutto quello che ci serve a livello di codice, adesso andiamo a sincronizzare i sottotitoli appena inseriti col video di riferimento. Il sistema sperimentato non è una assioma, è solo un modo empirico per ottimizzare i tempi di lavorazione nel caso specifico. Dopo aver caricato il nostro video di riferimento, oppure solo l'audio, selezioniamo il layer del testo e generiamo delle RAM preview durante il play delle quali andremo a posizionare dei markers premendo il tasto "*" (asterisco) del tastierino numerico. Questo in occasione di ogni cambio di frase, cercando di tenere in vista il testo del brano ed anticipando leggermente l'ingresso del sottotitolo successivo. Tutto dipende dal brano, in genere il fatto di anticipare leggermente funziona nel 99% dei casi. Spostiamo via via la Workarea sulle parti non ancora sincronizzate (premendo il tasto B per definire il nuovo inizio), si può così ricoprire l'intero videoclip, come pure un intero film del resto. Nulla vieta di estrapolare il timecode da un player esterno o dal software di editing e di applicarlo direttamente in After Effects, i sistemi possono essere vari, scegliere quello che più aggrada e che velocizza il lavoro.
Una volta generati i markers sul layer di testo ci spostiamo con i tasti J (indietro) e K (avanti) nella timeline, saltando velocemente da un marker all'altro e posizionando in corrispondenza di ognuno il valore della linea di testo nel Null Object "Controller". Consigliano di generare dei keyframes di tipo Hold per i valori di "TXT Number" (selezionare il keyframe e CTRL+ALT+H, oppure tasto destro > Toggle Hold keyframe).
Quindi la sequenza di azioni sarà:
1. selezionare il Null Object "Controller" e visualizzare lo Slider Control "TXT Number"
2. posizionarsi all'inizio del brano
3. cliccare sul valore dello slider di "TXT Number" ed inserire il numero 0 (testo nullo)
4. spostarsi con il tasto K al primo marker
5. cliccare sul valore dello slider di "TXT Number" ed inserire il numero 1 (prima linea di testo)
6. premere K per spostarsi al prossimo marker
7. cliccare sul valore dello slider di "TXT Number" ed inserire il numero 2 (seconda linea di testo)
ripetere i passi 6 e 7 fino alla fine del brano, inserendo i numeri progressivi 3, 4, 5 etc... e il numero 0 (zero) nel caso si voglia creare un vuoto.
Forniamo il progetto AEP in modo che sia possibile prendere esempio e studiarsi la disposizione degli elementi al suo interno, nonché riutilizzare il codice appena visto.
Esportazione dei sottotitoli
Vediamo come è possibile utilizzare i sottotitoli appena generati al di fuori di After Effects. Se abbiamo installata la suite Adobe CS3 o superiore, Production o Master, in Premiere Pro possiamo importare la composition coi sottotitoli sfruttando i Dynamic Link. Importare quindi il file progetto AEP direttamente in Premiere Pro e selezionare la composition che ci interessa, facendo attenzione al fatto che la composition dovrà avere le stesse caratteristiche del video sopra il quale verrà posizionata.
Se abbiamo disabilitato il layer audio/video guida, adesso la nostra traccia sottotitoli si fonderà perfettamente con la traccia video sottostante.
Nel caso si utilizzino software di editing diversi da quelli Adobe sarà comunque possibile visualizzare i nostri sottotitoli esportandoli in formati che prevedano un canale Alpha, come AVI RGB non compresso 32-bit, in modo da poterli applicare in trasparenza sopra la traccia video allo stesso modo del caso precedente. In questo caso potremmo pure optare per un video che si adatti alla massima larghezza ed altezza dei sottotitoli e non quanto il quadro di destinazione, in modo da risparmiare spazio su disco.
Conclusioni
E' più difficile da spiegare che da mettere in pratica. Il metodo descritto si potrebbe definire "semi-automatico" e, una volta presa la mano, la creazione dei sottotitoli sarà molto veloce ma, cosa più importante, sarà riutilizzabile, nel senso che se adesso volessi inserire dei sottotitoli in un'altra lingua mi basterebbe semplicemente duplicare il layer text e sostituire il testo all'interno della mia expression.