Newsgroup: it.comp.os.linux.iniziare
Titolo: Sincronizzare traccia audio con video

Non so se questo argomento sia in tema su questo ng però
siccome per lo scopo uso un sistema linux, alla fine penso
che ci possa stare.
Il punto è che l'operazione in cui mi sono imbattuto forse
non è così usuale per chi frequenta questo gruppo, comunque
proviamo...
 
Allora ho un file audio/video impacchettato in "mkv".
Ha una traccia video di discreta qualità (il meglio che ho
trovato in rete per quel video).
Però ha 2 tracce audio, una in inglese, l'altra non ho fatto
bene caso, ma leggo scritto "Tamil", roba indiana/asiatica o
giù di lì. In soldoni non si capisce granchè.
 
Ho poi trovato una seconda versione dello stesso contenuto,
stavolta un "avi" con video da schifo, ma audio italiano
(non di qualità ma pazienza).
 
Allora l'idea sarebbe:
creo un nuovo file audio/video in cui inlcudo la traccia
audio in italiano e quella video di maggiore qualità.
In pratica ottengo un nuovo file audiovideo che si vede
decentemente e si sente in italiano.
 
Come ho fatto:
 
- Estrazione della traccia video dal file mkv con mkvextract
 
- Estrazione della traccia audio ita dal file avi con ffmepeg
  la traccia audio ottenuta senza ricodifcare nulla è un mp3.
 
- Muxaggio finale con mkvmerge
 
Prova riproduzione:
l'audio risulta all'inizio in anticipo sul video di un paio
di secondi.
 
Corrggo la sincronizzazione:
rifaccio il muxaggio con mkvmerge e aggiungo l'opzione
"-y 2200 audio-ita.mp3" che aggiunge un silenzio iniziale
di 2.2 secondi alla traccia audio.
 
Riprovo:
le battute iniziali del film sono sincronizzate in modo
accettabile.
Verifico però anche il resto del film e noto che alla fine
l'audio è in ritardo sul video di un sacco di secondi, circa
25 secondi.
 
Siccome non sono esperto di queste operazioni, cerco info
in rete, sembra che il problema possa essere la differenza
di bitrate o frame per second o qualcosa del genere tra la
traccia audio ita e il video.
Leggo anche che per correggere si può usare audacity e
applicare l'effetto "cambia tempo" che di fatto comprime
o "stira" allungandola la traccia audio. Questo dovrebbe
risolvere il problema del "ritardo progressivo" che porta
a 20 secondi di sfasamento sul finale.
 
Ho allora provato a caricare la traccia audio in audacity e
a impostare l'effetto "cambia tempo" accorciando la traccia
di quei 25 secondi, ma non funziona. O meglio il punto
finale che ho preso come riferimento (un "toc toc" su una
finestra) non viene anticipato di 25 secondi, ma di un altro
valore e alla fine non torna la sincronizzazione ovviamente.
 
Forse prima di muxare dovevo impostare un altro bitrate alla
traccia audio o un'altro fps (ma per le traccie audio ha poi
senso parlare di fps?).
 
Come fareste voi per ottenere la traccia audio ita
sincronizzata con la traccia video in modo poi da poter
muxare il tutto e ottentere un audio/video accettabile?
 
PS.
Segnalo due cose inoltre:
- audacity è lentissimo nell'applicare l'effetto "cambia
  tempo"
- audacity è lentissimo nell'esportare la traccia audio
  modificata
- ho provato anche "mkvtoolnix Gui" al posto di mkvmerge,
  lascio l'info per chi preferisse il punta e clicca.
 
Se ci fossero alternative più rapide (anche a riga di
comando) consigliate pure!
Tenete conto che non ne so quasi nulla dell'argomento, per
cui non date troppe cose per scontate :)
 
Grazie mille in anticipo!  :)

 comando) consigliate pure!
 
Be' ffmpeg e' veloce si', fammi sapere!
 
-- 
bye, Yoda
 

 vuole un momento con ffmpeg.
 
In effetti ffmpeg è più rapido, però come dicevo
su audacity potendo stabilire a priori come deve
venire fuori la traccia finale, anche visivamente
sarebbe molto comodo e rapido, poi l'editing vero
lo si lancia in una botta sola alla fine...
Ma non so se si può fare sta roba, era solo una
mia idea (che qualuno sicuramente avrà pensato prima
di me spero).
 
Cioè chi lavora ad esempio con studi di registrazione
ste cose deve poterle fare al volo, sincronizzare le
tracce stiracchiarle comprimerle e sincronizzarle
insomma... Quindi qualche diavoleria in tal senso deve
esserci penso.
 
Vedo anche avidemux e appena posso provo col comando
sopra di ffmpeg. Ora mi taccio! quanto cavolo ho scritto!
 
Grazie Maestro Yoda!  ;)

 meglio.
 
Si' guardalo, oppure forse fai prima in pratica. Ricordo che fa il
contrario di quello che uno pensa, perche' e' come accorciare l'unita'
di misura: se misuri una stanza con un metro fasullo piu' corto trovi
la stanza piu' grande e non piu' piccola.
 
Audacity non ricordo perche' non l'ho mai messo, poi lo guardo.
Pero' c'e' un fatto.. adesso mi spiego.
 
Ad esempio Lawrence d'Arabia in italiano e' pesantemente tagliato, io ne
trovai in dvd (mi sembra su ibs) una versione integrale nella quale, per
i pezzi che in ita mancano, c'e' la traccia audio ita che parlano in
inglese. Cioe' le e' stato aggiunto e saldato il pezzo eng perche' al
film nessuno fece mai il doppiaggio. Ci sono i sottotitoli ed e' tutto
perfetto -- Boh.. Magia Nera! ma quelli sono professionisti che fanno i
dvd per venderli.
 
Poi c'e' la stessa storia coi sottotitoli, per passarli da un video ad
un altro devi essere fortunato per trovarli giusti, generalmente sono
sfasati anche di molto. Per gli srt m'ero fatto un'utility: uno script
coi comandi awk-date-cut. I tempi li dilata o riduce perfettamente, ma
e' laborioso usarlo per il motivo stesso che dici tu: qua accelera e poi
la' rallenta, per cui occorre scriversi l'orario di tutti i vari pezzi
da accelerare o ritardare.
 
Considera infine che pero' tutte queste correzioni si possono fare anche
solo in riproduzione: VLC lo fa, per l'audio e per i sottotitoli.
 
C'era qui su icoli tempo fa uno che diceva che e' impensabile lavorare
con l'editing video da riga di comando.
Lui usava e consigliava Cinelerra, io lo misi ma.. lo tolsi tutto poco
dopo! non ero riuscito neppure a farlo partire, mille e mille volte
peggio ancora di Avidemux!  -- Ciao e se trovi qualcosa dillo
 
-- 
bye, Yoda
 

 Considera infine che pero' tutte queste correzioni si possono fare anche
[.......]
 
Considera anche un'altra cosa: i film al cinema vanno a un numero di
fotogrammi al secondo minore dei dvd [*].
Questo si traduce in una durata che per i film in dvd risulta di circa 4
minuti minore, per praticamente tutti i film; e questo senza il minimo
taglio, cioe' il film c'e' tutto eh.
 
In altre parole, se, ad esempio con VLC, li riproduci con velocita'
al 90% (batti [ ) torni ad avere il film come al cinema.
 
Insomma voglio dire: consideriamo anche se e come si puo' cambiare la
velocita' "fotograami al secondo" della traccia video, forse e' piu'
facile e semplice.
 
----------
[*] E' il minimo per non avere sovrapposizione d'immagine.. cioe' il
corrispondente, per la vista, che da' l'eco e non il rimbombo.
 
-- 
bye, Yoda
 

 peggio ancora di Avidemux!  -- Ciao e se trovi qualcosa dillo
 
Farò sapere.
Se nel frattempo passsa di qui qualche utente che sa come
fare ste cose e vuole dare qualche consiglio su softwares
e metodi benvenga.
 
Grazie degli spunti intanto!  :)

 Però il video non telo godi.  :\
 
Scommetto che questo film tuo disastrato ce l'ho gia', specie se e' un
western, purtroppo ne avevo di piu' in cassatte VHS [*], ma anche li'
per trasferirli in dvd ci vogliono schede professionali, altrimenti
vengono una schifezza; io ci ho rinunciato, anche perche' ci vuole
molto tempo.  Ciao
 
----------
[*] Ho un po' la fissa per i cult movie (certi oramai quasi introvabili
tranne che in streming dalla rete), esempio quelli con Humphey Bogart.
 
 
-- 
bye, Yoda
 

 specie se e' un western
 
No, non è un western e alla fine mi sa che non ne valga la
pena per due motivi:
 
- ricontrollando la sincro finale ho visto diverse scene
  che hanno un po' "spoilerato" la vicenda. Che non mi è
  sembrata granchè, poi magari mi sbaglio...
 
- sempre nel ricontrollo finale mi sono reso conto che il
  video con traccia inglese è fatto come quello italiano,
  del tipo che in qualche pezzo appare un'ombra che si alza
  e passa davanti alla proiezione.
  Sì, il video in inglese è migliore, ma non di molto alla
  fine, o non così tanto da cimentarsi in una sincronizzazione.
 
Detto questo l'operazione sembra abbastanza riuscita,
ho fatto con audacity ed effettivamente da linea di
comando non si sarebbe potuto fare per via del complicato
grado di sfasamento: non si trattava di sfasamento progressivo
semplice, ma a seconda dei pezzi lo sfasamento cambiava.
 
C'è anche una cosa da osservare secondo me, ma non sono
del mestiere:
quando il film originale viene montato devono avere
diverse tracce, in particolare, una per i vari "rumori",
"suoni" e musiche che accompagnano il video e una seconda
traccia per il parlato inglese.
Questa viene sincronizzata con il video: se il film è in
inglese, la traccia originale del parlato inglese dovrebbe
calzare a pennello.
Dopodichè viene messo tutto in mix e si ottiene la traccia
completa audio-eng (in cui la traccia del parlato e quella
dei rumori, suoni vari e musiche non sono più scomponibili).
 
Per ottenere la traccia audio completa in italiano, immagino
che prendano i vari audio del doppiaggio e vdano poi a
sincronizzare il parlato italiano al video originale completo
già di rumori e musiche.
Questo fà sì che lavorando solo con l'audio come ho fatto io,
se prendi la traccia ita e ti basi su dei rumori o su delle
musiche, ti ritrovi in alcuni punti il parlato fuori sincro,
parlo di sincro tra parlato ita e parlato eng.
Per tenere tutto in sincro, si deve raffinare la sincronizzazione,
ok mettere i rumori in sincro, ma poi è necessario andare anche a
prendere i pezzi in cui il parlato è sfasato e sincronizzarli
"localmente".
 
Come metodo di lavoro sono partito da sinistra, cioè dall'inizio
della traccia, a destra. Ho preso il primo riferimento più vicino
possibile all'inizio (nel caso particolare la parola "alive" da
sincronizzare sulla traccia italiana con la praola "vivo").
Da lì, avanti a spezzoni abbastanza ampi.
 
Con audacity non ho trovato metodo più speditivo del seguente:
 
- poniamo di avere le tracce sincronizzate sul riferimento "R1"
  in cui entrambe "dicono" la stessa cosa all'unisono.
 
- trovato nel seguito un buon riferimento "R2", lo marchiamo su
  entrambe le tracce con due etichette, avremo R2-ita e R2-eng.
  Questi due "punti" vanno portati allo stesso istante.
 
- si modifica solo la traccia italiana (se quella ingelse è
  già sincronizzata ok col video... comanda lei insomma e non
  si tocca). Se avessimo l'audio/video di un film in italiano
  in cui vogliamo appiccicare anche la traccia inglese allora
  si deformerà solo la traccia inglese senza toccare quella
  originale ita... insomma mi sono spiegato spero, è banale.
 
- non si modifica tutta la traccia, solo la porzione compresa
  tra R1 e R2-ita, in modo che alla fine risulti:
 
  R1-R2ita = R1-R2eng
 
  Che vorrebbe dire: il tempo da R1 a R2ita deve risultare
  uguale a quello che intercorre tra R1 e R2eng.
 
- infine si può eliminare l'etichetta che si era data a R2ita
  e si può tenere la sola R2eng rinominandola in R2.
  E così via:
  si va a cercare R3 e si và a considerare la porzione R2-R3ita
  deformandola come spiegato e senza toccare la parte precedente
  a R2 della traccia ita.
 
È chiaro che bisogna controllare al volo perchè se si sceglie
un pezzo Ri--Ri+1 troppo lungo c'è il caso che in mezzo la
sincronizzazione non torni e si debba poi rifare prendendo un
Ri+1 più vicin a Ri.
 
Come si fà ad applicare il procedimento in pratica con audacity?
 
. dobbiamo caricare le due tracce ita e eng e poniamo di
  avere già sincronizzato R1, si può fare anche con una
  traslzione della traccia italiana, però in questo caso
  biogna poi tagliare l'inizio aggiungere del silenzio
  iniziale alla traccia ita.
  Vediamo come sincronizzare il generico punto Ri+1 avendo
  già messo apposto il precedente Ri. E avendone già impostato
  un'etichetta (selezionare Ri, tracce aggiungi etichetta alla
  selezione, nominare Ri).
. zoom-in su Ri+1
. con lo strumento selezione, selezionare il punto in cui
  si ha Ri+1-ita (ovviamente sulla traccia italiana)
. dal menù tracce-aggiungi etichetta alla selezione
  e nominare l'etichetta "Ri+1_ita" ad esempio.
. fare la stessa cosa con Ri+1_eng sulla traccia inglese.
  Avremo due etichette ognuna relativa alla rispettiva traccia.
. evidenziare sempre con lo strumento selezione il pezzo
  Ri--Ri+1_eng
. da effetti,cambia tempo - leggiamo a sinistra quanto dura
  il pezzo selezionato in secondi, e centesimi di secondo.
  Serve una certa precisione e a me non bastava l'indicatore
  che la finestra di audacity ha in basso, arriva al secondo
  invece serve anche il centesimo in certi casi.
  Ci sarà un modo più furbo, ma non ne conosco. Il passaggio
  serve solo per annotare la lunghezza della parte in inglese.
  Fatto questo premere "annulla" (non OK!!), non dobbiamo
  modificare il tempo della parte inglese...
. Adesso evidenziamo la parte italiana aiutandoci con le
  etichette precedentemente impostate: selezioniamo quindi
  R1--Ri+1_ita.
. poi sempre da effetti - cambia tempo, andiamo ad impostare
  nella casellina a destra il valore temporale rilevato
  al punto precedente per la parte inglese.
  Sta volta applichiamo la "deformazione" della parte italiana
  selezionata dando OK. In pratica andiamo ad impostare che
  la parte italiana duri tanto quanto quella inglese di
  riferimento.
 
In questo modo le due parti Ri--Ri+1_ita (sulla traccia italiana)
e Ri--Ri+1_eng (sulla traccia inglese) dovrebbero avere la stessa
lunghezza, e siccome Ri lo avevamo già sincronizzato su entrambe
le tracce (cioè è coincidente su entrambe), ecco che le due parti
dovrebbero essere sincronizzate.
Per completezza possiamo rimuovere l'etichetta Ri+1_ita e rinominare
Ri+1_eng in Ri+1, che sarà il nostro successivo punto di partenza.
 
In pratica in questo modo la traccia ita sarà sincronizzata con
quella "eng", dall'inizio fino all'istante Ri+1.
A questo punto è chiaro che dovremo ripetere il procedimento
sulla parte successiva, mi pare abbastanza comprensibile.
Insomma si procede così fino alla fine della traccia, in cui
l'ultimo punto da sincronizzare sarà quanto più vicino alla
fine stessa, abbastanza ovvio...
 
Il procedimento è lento, forse per mia ignoranza sulle
possibilità di audacity o per mancanza delle necessarie
funzionalità dello stesso, mi informerò sul loro forum
eventualmente.
Infatti basterebbe poter trascinare l'estremo destro
della selezione (Ri+1_ita per capirci) in modo da farlo
appaiare ad Ri+1_eng.
Sarebbe un'operazione facile da fare visivamente e l'etichetta
impostata aiuta a capire quando i due punti sono perfettamente
appaiati.
Per fare questa semplice azione invece ho dovuto armeggiare
con l'effetto "cambia tempo" e relativa annotazione degli
intervalli... troppo scomodo!  :/
Senza contare che se l'intervallo è lunghetto bisogna aspettare
anche 20 30 secondi prima che lo scaling tempo venga applicato.
 
Non è detto che audacity quindi, sia lo strumento più
indicato per queste cose. Probabilmente ci sarà qualcosa
di più comodo, ma come ho detto mi riservo di chiedere
sul loro forum.
 
Ho scritto anche troppo, ma vista la faticaccia ci tenevo
a condividere siccome anche Yoda era interessato.
 
Al solito, se avete dritte per lo scopo, non esitate.
 
Saluti!    :)

 Al solito, se avete dritte per lo scopo, non esitate.
 
Quoto!
 
-- 
bye, Yoda
 

 anche 20 30 secondi prima che lo scaling tempo venga applicato.
 
Ho fatto una prova al volo con Ardour: 
ardour.org
 
 
Ok, questo è un software piuttosto "professionale", fa tante
cose, a me serviva molto meno, qua parliamo di uno studio di
registrazione.
Personalmente mi sono dovuto spulciare il manuale per capire
come funziona, almeno quel poco che serviva a me... e non l'ho
capito!  :D
Alla fine andando "a tentoni" sono riuscito a capire il meccanismo.
 
Il software permette di caricare la nostra traccia. Anche se non
la digerisce se è in mp3, quindi occorre prima convertirla con
ffmpeg ad esempio, in wav (ffmpeg -i audio-it.mp3 audio-ita.wav).
Il caricamento della traccia così convertita impiega davvero una
vita... Può essere che ci sia un modo più furbo e rapido per ottenere
lo stesso risultato: traccia audio caricata in ardour.
 
Si possono settare facilmente dei "marker" evidenziando ad
esempio un punto iniziale in sincro e uno finale fuori sincro...
e individuando così un intervallo temporale da modificare.
 
Con lo strumento selezione e la modalità magnetica basata sui
markers è molto facile selezionare precisamente la parte della
traccia che ci interessa. I markers potrebbero anche non essere
necessari... perchè poi non vi sono tempi da calcolare ecc come
in audacity.
 
A questo punto la nostra selezione non serve a granchè, non le
si può cambiate "tempo" finchè non la si trasforma in una "region".
Così il programma chiama questi spezzoni di traccia che considera
poi come entità editabili anche in gruppo, insomma in modo complesso.
Come ho detto è un programma molto professionale, almeno in apparenza
ed è normale che avendo molte possibilità possa risultare complesso
all'inizio. Comunque non più di tanto se sono riuscito a capirlo io
in mezz'ora! ;)
 
Un amico che ha messo in piedi un piccolo studio di registrazione
abbastanza "home made" mi diceva che utilizza protools per gestire
le registrazioni, il missaggio mastering ecc ecc..
Penso che Ardour sia comparabile con software del genere, ma è solo
la mia sensazione. Lo proporrò all'amico... Anche se non è un grande
smanettone: deve avere tutto pronto e che funzioni e stop, e ha anche
ragione alla fine...
 
Tornando alla mia poca operazione di sincronizzazione audio su audio,
come fare a trasformare la nostra selezione in "region":
click dx sulla selezione (abbiamo sempre attivo lo strumento selezione,
"range mode"). E dalla tendina che salta fuori sclego "separate".
In tal modo la selezione viene "separata" dalla traccia totale e vengono
create tre "regions": una prima della selezione, la selezione stessa e
una dopo fino alla fine della traccia.
 
Ora basta attivare lo strumento "stretch mode" e si può spostare il
margine destro della nostra parte da modificare in modo da metterlo
in sincro. Lo si fà col mouse: click sx vicino al bordo dx della regione
e trascino a dx o sx a seconda di come è fuori sincro. Al rilascio
del tast del mouse salta fuori un dialog box simile a quello di audacity
in cui si può inserire il valore numerico anche qui, se invece va già
bene come lo abbiamo modificato ad occhio (ma si riesce ad essere
precisi al centesimo di secondo comunque eh) diamo ok e il cambio tempo
alla parte di interesse viene applicato impiegando un po' di tempo, mi
sembra similmente ad audacity.
 
A questo punto la regione modificata può essere andata a sovrapporsi
a quella successiva se l'abbiamo allungata o può essersi formato un
"vuoto" tra le due se l'abbiamo ristretta.
Basta usare lo strumento "grab mode" per selezionare la regione a dx
di quella modificata e "traslarla" in modo che le due siano contigue
come prima, senza vuoti in mezzo e senza sovrapposizioni... i bordi
magnetici aiutano parecchio ad ottenere un risultato perfetto.
Ok.
 
L'ho spiegato anche troppo nel dettaglio, la procedura impiega non
più di 10 secondi (tempo utente :D ) per essere messa in pratica...
 
A onor del vero Un paio di volte ardour è andato in crash.
Ho usato la versione 4.7.0 prima. Poi ho trovato un pacchetto di una
più recente, la 5.4, ecco dove:
http://www.studioware.org/
 
 
In entrambi i casi si è bloccato tutto un paio di volte.
L'attuale versione è la 5.9, magari hanno risolto qualche bug.
Devo dire che il mio PC non è un granchè e questo programma, ma
anche audacity, in alcuni frangenti succhiano un bel po' di CPU
e anche RAM.
 
Direi che è tutto. MAgari prossimamente provo anche Cinelerra o
Kdenlive anche se coinvolgono il video. Mi pare più dispendioso,
ma magari mi sbaglio...
 
Saludos!  :)