Con Linux ed in particolare con il tool mencoder (parte del progetto mplayer) è semplicissimo ( in realtà si può fare anche su windows, basta scaricare e installarsi mplayer/mencoder per windows). Quindi per prima cosa cercate ed installate “mencoder” (apt-get install mencoder sarà sufficiente)

AGGIORNAMENTO (3 marzo 2008) – vicenda opzione -sb

ho lasciato passare molto tempo sperando in una soluzione del problema con l’opzione -sb (seek byte). Alla fine penso che non verrà scritta a breve una soluzione… In sostanza l’opzione “seek byte” non ha alcuna intelligenza: pare un insulto ma è semplicemente una constatazione, fa quello che gli dite e cioè parte dal byte indicato! Questo a prescindere da dove si trovi quel byte: non cerca un keyframe (fotogrammi in cui l’immagine è memorizzata totalmente, tra un keyframe e l’altro sono memorizzati solo i cambiamenti) e non legge l’header (parte iniziale del video con le informazioni su di esso)! In sostanza è come se per mplayer/mencoder il file partisse dal punto indicato.

L’opzione -ss invece ha questo tipo di intelligenza e quindi legge l’header e cerca i keyframe.

Il manuale di mplayer da questo punto di vista è fuorviante perché ci invita a osservare l’opzione -sb sia quando leggiamo come utilizzare -endpos che quando leggiamo come usare -ss il che ci porta a pensare che -sb abbia lo stesso funzionamento. Ebbene -sb ha poco a che fare con queste altre 2! È utile solo a scopo di debugging..

Conclusione?

Se dovete spezzare un video secondo la sua dimensione non potete con mencoder… Usate avisplit (con i relativi problemi di sincronia audio/video) oppure spezzate il video usando le informazioni sul tempo!

Se ci fossero novità in questo senso non mancherò di aggiornare questo articolo

Se avete un DivX o un Xvid, o comunque un qualunque tipo di video, di grosse dimensioni potreste volerlo suddividere in file più piccoli, ad esempio per poterlo masterizzare in differenti CD-ROM.

i comandi sono da console, ma sono veramente semplici

Ecco come separare un grosso video (ad esempio un film) in due parti (secondo i tempi):

mencoder -endpos hh:mm:ss.ms -ovc copy -oac copy grandevideo.avi -o prima-parte.avi

mencoder -ss hh:mm:ss.ms -ovc copy -oac copy grandevideo.avi -o seconda-parte.avi

allora..

ho evidenziato questo: hh:mm:ss.ms che va sostituito con il tempo esatto a cui volete spezzare il video

se ad esempio volete spezzare il video ad 1 ora, 23 minuti, 42 secondi e 122 millesimi di secondo vi basterà scrivere 01:23:42.122

scrivete lo stesso identico orario in entrambi i comandi e il video verrà spezzato esattamente in quel punto

nota: se volete spezzare a 40 minuti esatti vi basta scrivere.. 40:00 notate che ho omesso ore e millisecondi (non è necessario scriverli, ma se volete non fa male metterci degli zeri)

Può essere utile però spezzare in base alla dimensione invece che in base al tempo, se vogliamo spezzare un video per farlo stare in 2 cd ad esempio vorremmo spezzare a 700mb

i comandi cambiano così:

mencoder -endpos 700mb -ovc copy -oac copy grandevideo.avi -o prima-parte.avi

mencoder -sb 700mb -ovc copy -oac copy grandevideo.avi -o seconda-parte.avi questo non funziona

IMPORTANTE

mi hanno segnalato nei commenti che questo la seconda parte non funziona, in particolare il comando -sb da errore, pare richieda un “intero”.. dalla pagina del manuale di mencoder questo non traspariva.. ad ogni modo ho pensato volesse i byte esatti, invece con i byte esatti da un altro errore che ho motivo di credere sia un bug di mencoder, provvederò a segnalarlo agli sviluppatori e mi rifarò vivo al più presto, nel frattempo (anche se la guida è fatta per mencoder vi riporto qui un metodo alternativo di spezzare un file AVI)

installate transcode pacchetto contenente il comando avisplit e date questo comando:

avisplit -s 700 -i grandevideo.avi

che spezzerà il video in pezzi da massimo 700 MB ( mi dicono che alcune volte sfalsa l’audio.. me spiace!! )
Vedere anche gli aggiornamenti ad inizio articolo

invece che il tempo a cui spezzare abbiamo messo i megabyte a cui vogliamo venga spezzato il video, (notate che nella seconda istruzione abbiamo usato -sb invece che -ss, che significa appunto che vogliamo indicargli una dimensione invece che un tempo)

per farvi capire cosa abbiamo fatto vi spiego quale sia il significato degli altri parametri che ho scritto:

  • -ovc copy dice a mencoder di copiare lo stream video senza ricodificarlo (ovvero lo lascia esattamente com’è)
  • -oac copy dice a mencoder di copiare lo stream audio senza ricodificarlo (ovvero lo lascia esattamente com’è)
  • grandevideo.avi è il file che noi vogliamo spezzettare
  • -o prima-parte.avi significa che il file di uscita deve chiamarsi prima-parte.avi
  • -endpos hh:mm:ss.ms dice che mencoder che deve smettere di ricodificare al tempo indicato (il tempo è conteggiato dall’inizio del filmato o da dove indicato con l’opzione -ss)
  • -endpos [byte] dice a mencoder di smettere di codificare ad un certo [byte] ( [byte] va sostituito a cose tipo -> 10b = 10 byte, 10kb = 10 kilobyte, 10mb = 10 megabyte ) – (tale dimensione è conteggiata dall’inizio del filmato o da dove indicato con l’opzione -ss)
  • -ss hh:mm:ss.ms dice a mencoder di iniziare a codificare dal tempo indicato
  • -sb [byte] dice a mencoder di iniziare a codificare dal [byte] indicato, nel modo spiegato prima

Se invece volete spezzare un file in più parti (non solo 2) allora dovete combinare le istruzioni precedenti, vi porto un esempio che spezza un file di 2 ore e 45 minuti in 3 file, i primi due da 1 ora e l’ultimo da 45 minuti

mencoder -endpos 01:00:00 -ovc copy -oac copy grandevideo.avi -o prima-parte.avi

mencoder -ss 01:00:00 -endpos 01:00:00 -ovc copy -oac copy grandevideo.avi -o seconda-parte.avi

mencoder -ss 02:00:00 -ovc copy -oac copy grandevideo.avi -o terza-parte.avi

notate come per il file intermedio vengono indicate sia inizio che fine, mentre il primo indica solo dove finire (l’inizio è sotto inteso se non è indicato come inizio del file di partenza ) e l’ultimo solo da dove iniziare (la fine e sotto intesa come fine del file di partenza)

per spezzare in più parti secondo le dimensioni anziché i tempi il modo è analogo

qui immagino di spezzare un file da 2 Gb (2 gb * 1024 = 2048 mb ) in 3 file da circa 700 mb l’uno (2048 / 3 = 682.66 mb), in realtà farò in modo che i primi 2 file siano da 700 mb esatti e l’ultimo i restanti ( 2048 – 1400 = 648 mb)

mencoder -endpos 700mb -ovc copy -oac copy grandevideo.avi -o prima-parte.avi

mencoder -sb 700mb -endpos 700mb -ovc copy -oac copy grandevideo.avi -o seconda-parte.avi

mencoder -sb 1400mb -ovc copy -oac copy grandevideo.avi -o terza-parte.avi

Per unire in un solo video tanti video più piccoli il procedimento è ancora più semplice (suppongo che i video debbano essere però codificati nello stesso modo

mencoder -ovc copy -oac copy parte1.avi parte2.avi parte3.avi -o video-riunito.avi

altrimenti potete ricodificarli

mencoder -ovc x264 -oac mp3lame parte1.avi parte2.avi parte3.avi -o video-riunito-e-ricodificato.avi

dubbi? domande? 😀

non dubito che ci siano tool grafici per fare la stessa cosa.. ma credo che non sia difficile copiare e incollare queste istruzioni adattando i valori in grassetto (e i nomi dei file) alle proprie esigenze

Guide correlate

rimuovere parti di un video con mplayer/mencoder