04.01.07

Dividere un AVI (divx / xvid) in 2 o più parti con Mencoder

Pubblicato su Guide, Mencoder, Video Editing tagged , , , a 18:34 di mastro

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 200 8) - 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? :D

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

28 Commenti »

  1. anonimo detto,

    6 Aprile, 2007 a 23:21

    ma non bastava un avisplit?

  2. mastro detto,

    7 Aprile, 2007 a 2:38

    @anonimo
    si.. in effetti :D però con mencoder puoi anche ricodificare nel frattempo e suppongo funzioni con più formati.. diciamo così.. sono abituato ad usare mencoder e mi ci trovo bene :D

  3. Anonimo detto,

    16 Aprile, 2007 a 20:49

    ciao

    ho provato più volte ad usare queste combinazione su file mpeg-ps

    nice -n 3 mencoder -ss 15:00 -endpos 5:00 -idx -ovc copy -oac copy -of mpeg “/origine.mpg” -o “/destinazione.mpg”

    ma l’opzione “-ss 15:00″ non funziona (persiste a “copiarlo” dall’inizio

    hai qualche suggerimento
    grazie :)

  4. mastro detto,

    16 Aprile, 2007 a 22:42

    @Anonimo
    ciao..
    non ti saprei dire.. è molto strano! il tuo comando mi sembra corretto.. unico dubbio su quel “-of mpeg”

    perché lo hai messo? se dai “copy” che senso ha poi dirgli di codificare l’uscita in “mpeg”?

    se fosse quel formato a dare problema prova prima a ricodificare tutto il video in un altro formato

  5. bruno detto,

    2 Maggio, 2007 a 15:40

    Ciao ragazzi. E’ possibile con mencoder inserire in un file video (che nn ha audio) un file musicale ad esempio come sottofondo ad 1 video di paesaggi? Grazie anticipatamente.
    Bruno

  6. mastro detto,

    3 Maggio, 2007 a 23:02

    @bruno
    ti rispondo in privato perché è off-topic rispetto all’argomento trattato dall’articolo

  7. Francesco detto,

    15 Giugno, 2007 a 18:07

    E’ molto bella questa guida, però io ho un problema:

    quando provo a fare il secondo tempo mi dice che:

    The sb option must be an integer
    Error parsing option on the command line: -sb

    Exiting… (error parsing command line)

    il comando che do è il seguente:

    mencoder -sb 700mb -ovc copy -oac copy grandevideo.avi -o secondo-tempo.avi

    come mai mi dice così?

  8. mastro detto,

    15 Giugno, 2007 a 20:18

    @Francesco
    credo che ci sia un errore nella guida..
    ho verificato e da lo stesso errore anche a me..

    provvederò a correggere al più presto.. :) devo solo capire dov’è il problema

  9. Francesco detto,

    15 Giugno, 2007 a 21:35

    Grazie mille mastro! ;)

  10. mastro detto,

    15 Giugno, 2007 a 22:39

    @Francesco
    grazie a te.. non mi ero accorto del problema perché non avevo mai usato quel particolare comando…

    credo che non accetti 700mb.. probabilmente vuole il numero in byte.. però anche così a me da un errore.. è possibile che ci sia un bug in mencoder… mi rifaccio vivo appena ne so qualcosa di più..

  11. Francesco detto,

    16 Giugno, 2007 a 8:51

    Si in effetti anche io ho provato a dare il numero in byte, stessa cosa che succede a te, un altro errore! Allora a presto!

    p.s. uso mencoder proprio per questa sua funzionalità, mi andrebbe bene anche tagliare in base al tempo, ma ho provato a tagliare un film esattamente a metà del tempo, eppure una parte veniva da 640mb e l’altra da 760.. per questo sarebbe meglio poter usare la funzione che taglia in base alla dimensione.

    Grazie, Francesco

  12. mastro detto,

    16 Giugno, 2007 a 17:05

    @Francesco
    il motivo è che la compressione si adatta al contenuto, quindi non è detto che 10 mega siano sempre 10 minuti (esempio) :) possono essere 8 o 12 in base al contenuto…
    un’alternativa sarebbe dividere con il tempo andando per “tentativi”, ma è obiettivamente una rottura!
    il secondo errore, che hai avuto anche tu, è qualcosa del tipo: questo non è un file Avi (giusto?) il che mi fa pensare che ci sia un baco in mencoder…
    e quello non lo posso risolvere da solo :)

  13. Francesco detto,

    16 Giugno, 2007 a 17:34

    Si esatto! Quindi come facciamo? Se si riuscisse a risolvere ne sarei felice perchè è veramente valido mencoder.. Se no avresti qualche consiglio da darm su qualche altro programma?
    Grazie!

  14. mastro detto,

    16 Giugno, 2007 a 17:47

    @Francesco
    ho appena modificato la guida segnalando questa cosa e consigliando un sostituto :)

  15. Francesco detto,

    16 Giugno, 2007 a 19:34

    Grande Mastro ;)

  16. Francesco detto,

    16 Giugno, 2007 a 19:55

    Ho provato con avisplit:

    credo che però la sintassi sia:

    avisplit -i grandevideo.avi -s 700

    però ho notato che sfalsa l’audio dal video.. :(

  17. mastro detto,

    17 Giugno, 2007 a 0:22

    ups…
    mi son perso il -i per strada :D

    hum.. che sfalsa l’audio non è bene :/

    ecco perché usavo mencoder! :D

  18. Francesco detto,

    17 Giugno, 2007 a 0:36

    allora nel frattempo non ci resta che aspettare :D

  19. truegod detto,

    21 Settembre, 2007 a 17:12

    -endpos non indica che deve fermarsi al tempo indicato, bensì l’offset di tempo dopo cui fermarsi!!!

    Per spiegarmi, nell’esempio indicato di divisione in 3 file:
    Il primo dura 1 ora
    Il secondo durerebbe 2 ore, ma poiché non c’è abbastanza video da codificare dura 1 ora e 45 minuti, cioè da 1 ora fino alla fine
    il terzo è come ci si aspetta che sia

  20. mastro detto,

    21 Settembre, 2007 a 19:44

    @truegod
    caspita hai ragione!
    che svista :D
    correggo subito

  21. Un plagio per Natale « L’importante è avere un titolo detto,

    28 Dicembre, 2007 a 20:47

    [...] questo simpaticone ha ben pensato di plagiare un mio articolo [...]

  22. Palo@BC » Dividere un avi detto,

    8 Gennaio, 2008 a 15:34

    [...] il link … Posted by admin [...]

  23. Mencoder - Wooo! « Riscoprirsi liberi detto,

    7 Febbraio, 2008 a 11:40

    [...] Come usare questa spezia? Semplice, seguiamo la guida di mastro [...]

  24. mastro detto,

    3 Marzo, 2008 a 20:15

    @per chi ancora seguisse i commenti a questo articolo…
    ho spiegato a cos’è dovuto il non funzionamento dell’opzione -sb
    non c’è modo di spezzare tramite megabyte con mencoder al momento

  25. Togliere la pubblicità, o quel che non ci interessa, di un video con mencoder « L’importante è avere un titolo detto,

    10 Marzo, 2008 a 22:59

    [...] dividere un video in più parti con mencoder  [...]

  26. luckygala detto,

    19 Maggio, 2008 a 13:40

    se ho un file avi creato con mencoder (acquisisco con scheda tv il video e con la soundblaster l’audio…)…e dopo un po di minuti audio e video non risultano sincronizzati….posso con mencoder ovviare a questo problema?…ricodificando il filmato?
    grazie mille…
    scusate l’intromissione

  27. mastro detto,

    19 Maggio, 2008 a 13:43

    @luckygala
    i problemi di sincronizzazione audio/video non sono semplici da risolvere

    ma questo ti è successo dopo che hai diviso/riunito il video seguendo la mia guida?

    prova a lanciare il video con: mplayer -fps 25 nomevideo.avi

    prova con 25 e anche con 30 fps

    se riesci a ottenere un video sincronizzato puoi ricodificarlo usando quell’opzione (-fps)

  28. luckygala detto,

    19 Maggio, 2008 a 14:58

    grazie mille per la risposta…e il consiglio
    i problemi di sincronia li ho nella cattura e sfogliando la tua guida pensavo di ricodificare il file o a qualche altro suggerimento…
    oppure pensavo semplicemente di usare a/v delay di mplayer durante la riproduzione ma è effettivamente un po noioso….
    grazie di nuovo…se hai idee…

Lascia un Commento