Split AVI files Linux


Method using AVISplit 




       avisplit - split AVI-files into chunks of a maximum size


       avisplit [ -i file -o base [ -s size ] [ -H num ] [ -t s1-s2[,s3-s4,..]
       -c -m -b num -f commentfile ] ] [ -v ]


       avisplit is Copyright (C) by Thomas Östreich.


       avisplit splits a single AVI-file into chunks of size size.
       Each of the created chunks will be an independent file, i.e. it can be
       played without needing any other of the chunk.


       -i file
              Specify the filename of the file to split into chunks.

       -o base
              Specify the base of the output filename(s) avisplit will then
              split to base-%04d.avi

       -s size
              Use this option to specify the maximum size (in units of MB) of
              the chunks avisplit should create. 0 means dechunk, create as
              many files as possible.

       -H num Create only the first num chunks then exit.

       -t s1-s2[,s3-s4,..]
              Split the input file based on time/framecode (hh:mm:ss.ms)

       -c     Together with -t. Merge all segments into one AVI-File again
              instead generating seperate files.

       -m     Together with -t. Force split at upper bondary instead of lower

       -b num Specify if avisplit should write an VBR mp3 header into the AVI
              file. Default is 1 because it does not hurt. num is either 1 or

       -f commentfile
              Read AVI tombstone data for header comments from commentfile.
              See /docs/avi_comments.txt for a sample.

       -v     Print only version information and exit.


       The command

       avisplit -s 700 -i my_file.avi

       will split the file my_file.avi into chunks which’s maximum size will
       not exceed 700 MB, i.e. they will fit onto a CD, each.  The created
       chunks will be named my_file.avi-0000, my_file.avi-0001, etc.

       avisplit -i my_file.avi -c -o out.avi -t

       will grab Minutes 10 to 11 and 13 to 14 from my_file.avi and merge it
       into out.avi


       When you split a file with avisplit and the A/V sync for the first file
       is OK but the sync on all successive files is bad then have a look at
       the output of tcprobe(1) (shortend).

        | V: 25.000 fps, codec=dvsd, frames=250, width=720, height=576
        | A: 48000 Hz, format=0x01, bits=16, channels=2, bitrate=1536 kbps,
        |    10 chunks, 1920000 bytes

       You’ll see the AVI file has only 10 Audio chunks but 250 video chunks.
       That means one audio chunk spans several video frames.  avisplit can
       not cut a chunk in half, it only handles complete chunks. If you do,
       say, avisplit -s 20, it is possible that the first file will have 6
       audio chunks and the second one only 4 meaning there is too much audio
       in the first AVI file.

       The solution is to remux the AVI file with
              transcode -i in.avi -P1 -N 0x1 -y raw -o out.avi
       (of course -N 0x1 is not correct for all AVI files).  Now look at
       tcprobe again

        | V: 25.000 fps, codec=dvsd, frames=250, width=720, height=576
        | A: 48000 Hz, format=0x01, bits=16, channels=2, bitrate=1536 kbps,
        |   250 chunks, 1920000 bytes

       The data in this file is exactly the same (its bit-identical) as it was
       in in.avi; the AVI file was just written in a different way, we do now
       have 250 audio chunks which makes splitting much easier and more
       accurate for avisplit.


       avisplit was written by Thomas Östreich
       <ostreich@theorie.physik.uni-goettingen.de> with contributions from
       many others.  See AUTHORS for details.


       aviindex(1), avifix(1), avimerge(1), tccat(1), tcdecode(1), tcdemux(1),
       tcextract(1), tcprobe(1), tcscan(1), transcode(1)



Method using FFMpeg


With ffmpeg you can split file using the following command:

ffmpeg -acodec copy -vcodec copy -ss START -t LENGTH -i ORIGINALFILE.mp4 OUTFILE.mp4

where START is starting positing in seconds or in format hh:mm:ss LENGTH is the chunk length in seconds or in format hh:mm:ss

So you will need to run this command few times depending on how long your video. If let’s say your video is 31 minutes long and you want so split into 15 min chunks here is how you run it:

ffmpeg -acodec copy -vcodec copy -ss 0 -t 00:15:00 -i ORIGINALFILE.mp4 OUTFILE-1.mp4

ffmpeg -acodec copy -vcodec copy -ss 00:15:00 -t 00:15:00 -i ORIGINALFILE.mp4 OUTFILE-2.mp4

ffmpeg -acodec copy -vcodec copy -ss 00:30:00 -t 00:15:00 -i ORIGINALFILE.mp4 OUTFILE-3.mp4

There is a python script that you can use that does this automatically(i.e. takes video file, chunk size in seconds and generates individual playable video files): http://icephoenix.us/notes-for-myself/auto-splitting-video-file-in-equal-chunks-with-ffmpeg-and-python/


I also suggest adding the “-acodec copy” option to specify that the raw audio codec data must be copied as is. Otherwise, your audio quality could suffer after being re-encoded. This will also speed up the splitting process. –  Gregg Jun 26 ’11 at 17:53


Error: “Unknown decoder ‘copy'”  


The order of the commands matters

ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 00:15:00 outfile1.avi

ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 00:30:00 outfile2.avi
ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 00:45:00 outfile3.avi
ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 01:00:00 outfile4.avi
ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 01:15:00 outfile5.avi
ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 01:30:00 outfile6.avi
ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 01:45:00 outfile7.avi
ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 02:00:00 outfile8.avi
ffmpeg -i video1.avi -acodec copy -vcodec copy -ss 0 -t 02:15:00 outfile9.avi



Leave a Reply