Anzitutto dividiamo il problema in due casi:
1) l'audio è in ritardo rispetto al video
2) l'audio è in anticipo rispetto al video
Primo caso (il più semplice)
Poniamo di avere questo problema all'interno del file film.avi; ecco come procedere:
1) calcoliamo a quanto ammonta il ritardo (personalmente utilizzo mplayer per fare questo, pigiando il tasto + durante la riproduzione finchè audio e video risultano allineati). Poniamo che sia di 0.6 secondi.
2) Da terminale entriamo nella directory che ospita film.avi col comando cd
3) isoliamo il video del filmato così:
Codice: Seleziona tutto
ffmpeg -i film.avi -an -vcodec copy video.aviCodice: Seleziona tutto
ffmpeg -i film.avi -ss 0.6 -vn -acodec copy audio.mp35) ricongiungiamo audio e video:
Codice: Seleziona tutto
ffmpeg -i video.avi -i audio.mp3 -vcodec copy -acodec copy titolo_del_file.aviSecondo caso
Poniamo di avere questo problema all'interno del file film.avi; ecco come procedere:
1) calcoliamo a quanto ammonta il ritardo (personalmente utilizzo mplayer per fare questo, pigiando il tasto - durante la riproduzione finchè audio e video risultano allineati). Poniamo che sia di 0.6 secondi.
2) Da terminale entriamo nella directory che ospita film.avi col comando cd
3) Qui le cose si comlplicano perchè, a differenza di un flusso audio, ffmpeg non è in grado di tagliare con buona precisione un flusso video. Tagliamolo dunque di un tempo x superiore a quello di desincronizzazione x>0.6. Per esempio tagliamolo di 1 secondo:
Codice: Seleziona tutto
ffmpeg -i film.avi -ss 1 -an -vcodec copy video.avi4) Isoliamo e tagliamo il file audio con l'opzione -ss pari alla differenza tra il tempo effettivamente sottratto al video col comando precedente e il tempo di desincronizzazione originale, e cioè: 1.4-0.6=0.8. Quindi:
Codice: Seleziona tutto
ffmpeg -i film.avi -ss 0.8 -vn -acodec copy audio.mp3In poche parole non abbiamo fatto altro che ricondurre il secondo caso al primo.
5) ricongiungiamo audio e video:
Codice: Seleziona tutto
ffmpeg -i video.avi -i audio.mp3 -vcodec copy -acodec copy titolo_del_file.aviNOTA: non ho sperimentato il metodo con tutti i tipi di file, ma visto che ffmpeg ha talvolta difficoltà nella gestione di alcuni codec, è possibile che non sempre funzioni.
Ma coi file più comuni funziona nel 99% dei casi.
NOTA 2: se qualcosa non funziona potete provare a inserire l'opzione -ss dubito dopo il comando ffmpeg e subito prima dell'opzione -i. Ad esempio:
Codice: Seleziona tutto
ffmpeg -ss 1 -i film.avi -an -vcodec copy video.avi