lunedì 24 novembre 2008

Unire file video avi dalla riga di comando con Linux e Transcode

Unire due video in un solo file, è un'operazione che a me capita spesso di dover svolgere e... udite - udite...
trovo che sia molto più facile e veloce, farlo dalla riga di comando.
Facciamo un esempio. Se abbiamo il primo e secondo tempo di un film e vogliamo unire i due video in un unico filmato, possiamo farlo con un solo comando, utilizzando avimerge .
Avimerge è uno dei potenti strumenti inclusi nel pacchetto transcode e probabilmente, non lo troveremo di default nella nostra distro.
Quindi, se non lo abbiamo già fatto, installiamo transcode con il comando:

# apt-get install transcode [invio]

Per utilizzare avimerge è sufficiente spostarsi nella cartella contenente i due video da unire e digitare:

$ avimerge -i video-1.avi video-2.avi -o video-intero.avi [invio]

Fatto... aspettiamo qualche secondo e ci ritroveremo il nostro bel film nella cartella corrente, insieme ai due file originali, che a questo punto potremmo anche cancellare.

Ovviamente con Linux, avremmo potuto ottenere lo stesso risultato adottando altri metodi, però io ho trovato molto comodo e veloce il comando sopra citato.

Buona unione a tutti ;-)

13 commenti:

Anonimo ha detto...

sono seriamente sconvolto dalla velocità con cui Linux effettua questa operazione, o meglio, per logica è questa la velocità (meno di un minuto) ma per chi lo h sempre fatto con Windows (oltre un ora) questa è una cosa grandiosa!!!!!

Unknown ha detto...

@Nickycalo
Si, effettivamente all'inizio si rimane positivamente sorpresi, poi ci si abitua e allora non si riesce più a tornare indietro ;-)

P.S. Grazie per aver deciso di seguire il mio blog, mi fa molto piacere.

mork ha detto...

da notare che se vi son vari file da congiungere, si velocizza il comando con un avimerge -i *.avi -o filecompleto.avi

ciao
m

Unknown ha detto...

@mork
Giusto... nel caso di molti spezzoni video da unire, risulta essenziale. Ovviamente è fondamentale rinominare i file da concatenare in maniera opportuna ;-)

NanoDiCacca ha detto...

È possibile unire più di due file semplicemente pettendo i nomi con le esenzioni uno in fila all'altro (attenzione a mettere per bene le parti in ordine 1,2,3.... e cosi via)

Se avete dei file con degli spazi mettete i nomi tra le virgolette cosi evitate di rinominarli ogni volta.

Bubino75 ha detto...

Scusate è possibile usare questo comando per unire dei file .ts anziché dei .avi? Sarebbe molto comodo. Io con win uso il comando copy e sto cercando qualcosa di simile (da riga di comando senza usare sw con gui dedicate).
Se non fosse questo comando mi potete indirizzare su quello corretto?
Grazie, ciao

Unknown ha detto...

@Bubino75
io ottengo il risultato utilizzando questo sistema:
http://toonik.blogspot.com/2009/12/convertire-video-avi-in-mpg-con-ffmpeg.html
è un po' macchinoso, ma funziona.
Ovviamente, nel tuo caso devi sostituire l'estensione AVI con TS.
Poi, se trovi un metodo migliore, faccelo sapere.

Bubino75 ha detto...

@Toonik
In realtà io non devo fare una conversione, ma semplicemente unire un certo numero di file con estensione TS generati dalla registrazione effettuata con il decoder del digitale terrestre.
Questo problema l'ho già affrontato sui sistemi operativi WIN e dopo aver provato vari software con risultati poco soddisfacenti ho risolto con il classico uovo di colombo: il comando copy che unisce i vari spezzoni generando un unico file (a me non interessa eliminare il pubblicità tanto in fare di riproduzione sul pc, con vlc lo mando avanti veloce)
Adesso stavo cercando la stessa cosa per ubuntu.
Ho fatto un po di prove a partire da quella che hai descritto tu nel tuo articolo (unire gli spezzoni con mencoder), ma il risultato è un file ts che non viene letto da vlc.
Sono passato poi a projectX che genera un file riproducibile con vlc, ma non navigabile dal punto di vista dell'avanti veloce o saltando da un punto all'altro (in questo caso fa vedere il fotogramma corrispondente al punto selezionato e poi si blocca. Secondo me gli manca qualche indice visto che i singoli spezzoni sono navigabili). In pratica il filmato deve essere mandato in play e basta senza possibilità di saltare pubblicità e quanto altro.
L'ultima prova che sembra aver dato il risultato sperato, ma devo ancora verificarlo è quella di cui hai parlato nel tuo articolo, che anche in un commento a questo post era stata denigrata. L'uso del comando cat di linux, senza però la passata finale con memcoder.
In pratica ho concatenato tutti gli spezzoni in un file unico. Il file generato è riproducibile con vlc ed è navigabile.
Ho fatto solo poche prove e non ho visto tutto il filmato, ma sembra tutto ok compresa la sincronizzazione audio/video, vi confermò quanto appena scritta appena rivedrò tutto il film.
Grazie, ciao
Alessandro

Unknown ha detto...

@Bubino75
Sì, in effetti mi riferivo a cat.
Funziona egregiamente, sembra veloce e preciso. Attenzione però, con alcuni formati (esempio AVI) non ottieni il risultato desiderato. In quel caso è necessaria la pre e post conversione in un formato... commestibile ;-)

Bubino75 ha detto...

@Toonik
Confermo quando hai detto, nel mio caso il cat va piu che bene anche come sincro audio/video
Terrò da conto i consigli sui formati avi
Ciao e grazie del supporto
Alessandro

Unknown ha detto...

@Bubino75
Ciao Alessandro, è stato un piacere ;-)

Bubino75 ha detto...

Ciao,
torno a disturbare in quanto provando a convertire utilizzando ffmpeg il file ts generato con il comando cat unendo piu spezzoni ricevo un messaggio di errore e la conversione non viene effettuata
(secondo me il comando cat per questo scopo ha fatto un po di casino :p)
[mpeg2video @ 0xa037ca0]mpeg_decode_postinit() failure
Last message repeated 2 times
[mp3 @ 0xa03a830]Header missing
[mpeg2video @ 0xa037ca0]mpeg_decode_postinit() failure
Last message repeated 7 times
[mpegts @ 0xa01ebc0]max_analyze_duration reached
[NULL @ 0xa03c350]start time is not set in av_estimate_timings_from_pts

ho provato quindi ad installare winff per vedere se con l'interfaccia grafica piu facile ma purtroppo niente, tra i formati in cui convertire non ho nemmeno a disposizione l'mpeg.

Tu sapresti indicarmi come effettuare questa operazione con ProjectX?

Su win ho provato con il software XMedia Recode e a parte il fatto di aver sbagliato il formato audio del file fimale (mp3) ho ottenuto un mpeg che si vede bene ma non si sente...

A parte quest'ultima parte, riesci a darmi una mano?

Ovviamente tutto questo è per vedere la registrazione sulla tv e non sullo schermo del netbook ;)

Grazie per la pazienza!

Ciao

Unknown ha detto...

Ciao Alessandro,
innanzitutto verifica di avere installato nel tuo sistema i codecs extra dai repository Medibuntu; se non l'avessi ancora fatto ecco come procedere: http://toonik.blogspot.com/2010/12/aggiungere-repository-medibuntu.html

Altra cosa importante, quando usi ffmpeg (e non solo) fai attenzione a non elaborare file che siano memorizzati in dispositivi formattati con il filesystem FAT32 di Microsoft, in quanto è limitato e causa molti problemi.

A livello procedurale invece, prima la conversione dei file:

$ ffmpeg -i video.ts -sameq video.mpg [invio]

poi la concatenazione dei video:

$ cat primo-tempo.mpg secondo-tempo.mpg > film-intero.mpg [invio]

Riguardo a ProjectX o XMedia Recode, non li conosco bene, quindi non saprei cosa dirti, inoltre, non vorrei mettere troppa carne sul fuoco, altrimenti rischiamo di confondere gli altri lettori... spero sarai d'accordo ;-)