mp3splt, oggsplt, flacsplt - utility for mp3, ogg vorbis and native flac splitting without decoding
mp3splt [OPTIONS] FILE_OR_DIR1 [FILE_OR_DIR2] ... [BEGIN_TIME] [TIME2] ... [END_TIME]
FILE_OR_DIR: mp3, ogg vorbis, native flac file to be split or a directory. If you want to specify STDIN as input, you can use "m-" (or "-") when input is mp3, and "o-" when ogg. Multiple files can be specified, all files will be split with the same criterion. If a directory is specified, a recursive scan is performed in that directory to find out all the supported file formats.
TIME FORMAT:
minutes.seconds[.hundredths] or EOF-minutes.seconds[.hundredths]
Multiple split points can be specified. After the minimal 2, another indefinite number of split points can be specified. Each split point will be an end time for the previous, and a begin for the following. If you want to reach the end of file, you can use "EOF" as last splitpoint. EOF-minutes.seconds[.hundredths] only works when input is seekable.
mp3splt is a free command-line utility that allows you to split mp3, ogg vorbis and native flac files from several splitpoints, without need of decoding and reencoding. It is useful to split large mp3, ogg vorbis and native flac to make smaller files or to split entire albums to obtain original tracks.
If you are splitting an album you can get splitpoints and filenames automatically from servers on internet like freedb.org, tracktype.org or from a local .XMCD (.CDDB) or .CUE file (see -c option), with the possibility to adjust them automatically with silence detection (see -a option).
You can also try to split files automatically with silence detection (see -s option), trim files using silence detection (see -r option), or by a fixed time length (see -t option)
Or if you have a file created either with Mp3Wrap or AlbumWrap, you can easily split it just with one command (see -w option).
IMPORTANT NOTE for FLAC: FLAC support is still experimental. Please use with caution. Missing FLAC features are stdin (input not seekable) and stdout.
NOTE for MP3: usually mp3splt understands if mp3 is VBR by checking the presence of a Xing or Info header and will consequently start in framemode, but if this is not present, mp3splt will start in standard mode. This means that splitting process will be quicker, but imprecise due to variable bitrate, you can split those VBR files only with framemode (see -f option).
NOTE for OGG: in some cases, mp3splt does not manage to split ogg vorbis streams correctly. Splitting the input file from 0.0 to EOF might fix the issues.
NOTES about TAGS: by default, mp3splt will put the original tags in the split files with one exception: the track number starts at 1 and is incremented along split files. When copying the original file tags, only one artist, album, title are supported. Custom tags for the split files can be set with the -g option. Setting exactly the same tags as the original file is possible with -g %[@O] (mp3 only) or -g %[@o].
NOTE about MP3 TAGS: in order to extract the original tags from mp3 files, libmp3splt must be compiled with 'id3tag' support. By default, the output files will have the same ID3 tag version as the input file; this behaviour can be changed with the -T option. If the input file has no tags and the -g option is used, then both ID3v1 and ID3v2 are written. Total tracknumber is not yet supported. Only writing ID3v2.4 is supported for custom tags; note that some software only support ID3v2.3 and will not be able to read them. However, it is possible to write the exact original tags using %[@O], keeping the same tags version as in the original file.
NOTE about the OUTPUT DIRECTORY: by default, mp3splt will put the split files in the directory of the input file. In order to change the output directory, you can use one of the following options: -d or -o. Please note that directories from the -o option will be created relative to the input file directory.
Mp3Wrap http://mp3wrap.sourceforge.net: This tool joins two or more mp3 files in one large playable file that usually contains the string MP3WRAP in filename and a special comment in ID3v2. If the file you are splitting is a Mp3Wrap file the splitting process will be very fast and you will obtain all files just with one command. If your filename contains MP3WRAP and you have errors or you don't want to use wrap mode, just remove it from the file.
AlbumWrap: mp3splt is compatible also with albumwrap files, which usually contain the string ALBW in filename and ID3v2 contains AlbumWrap. But, as AlbumWrap extractor, mp3splt doesn't give any warranty.
Note about "mp3splt.log":
The first line contains the name of the split file
The second line contains the threshold and the minimum silence length
The next lines contain each one three columns:
-the first column is the start position of the found silence (in seconds.fractions)
-the second column is the end position of the found silence (in seconds.fractions)
-the third column is the order of magnitude of the silence length; it is useful to find out most probable silence points
Furthermore, if you want to split using internal sheets, SOURCE must be internal_sheet. Currently two internal sheets are supported: internal CUE sheet of native FLAC files and ID3v2 chapters for MP3 files (note that there is a limitation on ID3v2 chapters for overlapped chapters).
If you want to get informations from Internet, SOURCE must have one of the following formats:
query
query{album}
query{album}(ALBUM_RESULT_NUMBER)
query[search=protocol://SITE:PORT, get=protocol://SITE:PORT]
query[search...]{album}
query[search...]{album}(ALBUM_RESULT_NUMBER)
If a string is specified between '{' and '}', then the internet search is made on this string and the user will not be requested to interactively input a search string. The number between '(' and ')' is for auto-selecting the result number ALBUM_RESULT_NUMBER; thus, the user will not be requested to interactively input a result number.
The other parameters between '[' and ']' are used to specify the protocols and the sites. If those parameters are not specified, default values will be chosen, which are good enough in most cases. Inside the square brackets, 'search' defines the CDDB search protocol and site (for searching the disc ID from the album and title); 'get' defines the CDDB download protocol and site (for downloading the CDDB file from the disc ID). Valid 'search' protocols are : 'cddb_cgi' and 'cddb_protocol'. Valid 'get' protocols are: 'cddb_cgi'.
Examples:
query[search=cddb_cgi://tracktype.org/~cddb/cddb.cgi:80,get=cddb_cgi://tracktype.org/~cddb/cddb.cgi:80]
query[get=cddb_protocol://freedb.org:8880]
query[get=cddb_cgi://freedb.org/~cddb/cddb.cgi:80]
Mp3splt will connect to the server and start to find the requested informations. If the right album is found, then mp3splt will query the server to get the selected album and (if no problem occurs) will write a file named "query.cddb" from which will get splitpoints and filenames.
Proxy support: The first time that the user queries the internet (and if the quiet mode is not enabled), mp3splt asks for some information about proxy usage. Mp3splt has basic authentification support using base64 for HTTP proxies. A file named '.mp3splt' is created in the user home directory containing the informations provided by the user. Deleting this file will make mp3splt to query the user again. Please note that the authentification storage is not secure. The 'username:password' is stored as base64 and can be easily decoded.
IMPORTANT NOTE FOR CDDB: File split with this option can be not very precise due to:
1) Who extracts CD tracks may use "Remove silence" option. This means
that the large file is shorter than CD Total time. Never use this option.
2) Who burns CD may add extra pause seconds between tracks. Never do it.
3) Encoders may add some padding frames so that file is longer than CD.
4) There are several entries of the same cd on CDDB. In mp3splt they appears with "\=>" symbol.
Try some of them and find the best for yours; usually you can find the correct splitpoints, so good luck!
YOU CAN USE THE -a OPTION TO ADJUST SPLITPOINTS!
<name1=value,name2=value,..>
You can specify an indefinite number of them, with no spaces and separated by comma. Available parameters are:
It can contain name variables, that must begin with @ char and that can be:
@A: performer if found, otherwise artist
@a: artist name
@p: performer of each song (only with .cue)
@b: album title
@g: genre
@t: song title*
@n: track number identifier* (not the real ID3 track number)**
@N: track tag number**
@l: track number identifier as lowercase letter* (not the real ID3 track number)**
@L: track tag number as lowercase letter**
@u: track number identifier as uppercase letter* (not the real ID3 track number)**
@U: track tag number as uppercase letter**
@f: input filename (without extension)
@d: last directory of the input filename or the filename itself if no directory
@m, @s or @h: the number of minutes, seconds or hundreths of seconds of the start splitpoint**
@M, @S or @H: the number of minutes, seconds or hundreths of seconds of the end splitpoint**
(**) One digit may follow defining the number of digits to output.
If the digit is 0, then a special rule is applied when the pattern value is equal to 0:
- the pattern is discarded
- all characters like : _ . and -. preceding it are discarded
- all characters following it are discarded up to the next @ or a separator like : _ . and -
This rule is useful for discarding the last part of the time when equal to 0.
For example @m_@s_@h0hundreths__@M_@S will only output @m_@s__@M_@S if the hundreths of seconds are 0.
When split files are more than one, at least one of @t, @n, @N, @l, @L, @u or @U (*) must be present to avoid ambiguous names. You can put any prefix, separator, suffix in the string, for more elegance. To make easy the use spaces in output filename without interfering with line parameters, you can use the char '+' that will be automatically replaced with a space. Valid examples are:
@n_@a_@b_@t
@a+-+@n+-+@t (default if using -c and -o is not specified)
@a/@b/@t_@n (will create the directories '<artist>' and '<artist>/<album>')
@f_@n+@m:@s+@M:@S
@a: artist name
@b: album title
@t: audio title
@y: year
@c: comment
@g: genre
@n: track number (set to -2 for none)
@o: set original tags
@O: set exactly the same original tag bytes and discard other variables (mp3 only)
@N: auto increment track number:
this variable has to be placed inside the %[] field in order to have the track
number auto incremented for all the split files following it
@m, @s or @h: the number of minutes, seconds or hundreths of seconds of the start splitpoint
@M, @S or @H: the number of minutes, seconds or hundreths of seconds of the end splitpoint
Using the 'replace tags in tags' option, you can also use the following variables, which are replaced by the data from the original tags: #a, #b, #t, #y, #c, #g. Note that this will only work if @o has been found before.
Example of tags format: %[@o,@N=1,@b=special_album][@a=foo,@b=bar][@t=footitle]. In this example, the first split file will have the original tags with album tag replaced by 'special album'; the second split file will have the tags of the first split, with the artist tag replaced by 'foo' and the album tag replaced by 'bar'; the third split file will have the tags of the first split, with the title tag replaced by 'footitle'. The track number will start at 1 for the first split file and auto increment to the other files.
Example of replacing tags in tags: r%[@o,@N=1,@b=album,@a=artist_@b_@N]. Having the 'r' option, the replace tags in tags mode is activated; thus, output artists are 'artist_album_1','artist_album_2', ... Without the 'r' option, output artists are 'artist_@b_@N'.
Replacement is not recursive: r%[@o,@N=1,@b=album_@N,@a=artist_@b] will output albums as 'album_1', 'album_2', ... but artists as 'artist_album_@N'.
Example of replacing tags in tags with # variables: r%[@o,@N=1,@t=@N_#t]This will prepend the auto incremented track number to the original input file title; supposing that the input file title is 'one_title', this will set the titles as follows: '1_one_title', '2_one_title', ...
Example: if the input filename is artist1__album2__title3__comment4__2__2004__Samba.ogg,
the following regular expression
(?<artist>.*?)__(?<album>.*?)__(?<title>.*?)__(?<comment>.*?)__(?<tracknum>.*?)__(?<year>.*?)__(?<genre>.*) extracts the tags:
(?<artist>): artist1
(?<album>): album2
(?<title>): title3
(?<genre>): Samba
(?<comment>): comment4
(?<tracknum>): 2
(?<year>): 2004
Note about the file structure:
-the first column is a dummy column which is always zero, for plotting on zero axis purposes
-the second column is the time in seconds as double
-the third column is the dB level
-the fourth column is the silences shots counter
-the five column is the number of splitpoints found
-the sixth column is the start time of the silence spot found
-the seventh column is the end time of the silence spot found
Example of plotting the full log file with gnuplot:
gnuplot -e "file='silence_logs.txt'; set decimalsign locale; set xlabel 'Time in seconds'; plot file using 2:3 title 'Threshold', file using 2:4 title 'Silence shots' with linespoints, file using 2:5 title 'Number of silence points found' with fsteps, file using 6:1 title 'Begin of silence', file using 7:1 title 'End of silence' with points; pause -1"
mp3splt album.mp3 54.32.19 67.32 -o out
mp3splt album.ogg 54.32.19 67.32 -o out
This is the standard use of mp3splt for constant bitrate mp3 or for any ogg. You specify a begin time (which in this case uses hundredths, 54.32.19), an end time and an output file.
mp3splt -f -d newdir album.mp3 album2.mp3 145.59 234.2
This is frame mode for variable bitrate mp3 and multiple files. You can see that time format uses min.sec even if minutes are over 60. Output files in this case will be: album_145m_59s_0h__234m_2s_0h.mp3 and album2_145m_59s_0h__234m_2s_0h.mp3 because user didn't specify it and they will be in the directory named newdir.
mp3splt -nf album.mp3 0.12 21.34.7 25.3 30.40 38.58
This is the use of -n option and multiple splitpoints. Four files will be created and will not contain ID3 informations.
mp3splt -w album_MP3WRAP.mp3
This is Wrap mode. You can use this when mp3 is a file wrapped with Mp3Wrap or AlbumWrap. You can specify an output directory with the -d option.
mp3splt -lq album.mp3
This is List mode. You can use this when you want to list all tracks of a wrapped file without extracting them. With quiet option (-q), program will not calculate CRC!
mp3splt -s f.mp3 or mp3splt -s -p th=-50,nt=10 f.mp3
This is silence option. Mp3splt will try to automatically detect splitpoints with silence detection and in the first case will split all tracks found with default parameters, while in the second 10 tracks (or less if too much) with the most probable silence points at a threshold of -50 dB.
mp3splt -c file.cddb album.mp3
This is CDDB mode with a local file. Filenames and splitpoints will be taken from file.cddb.
mp3splt -c query album.mp3
This is CDDB mode with internet query. Will ask you the keyword to search and you will select the wanted cd.
mp3splt -a -c file.cddb album.mp3
This is CDDB mode with auto-adjust option (default parameters). Splitpoints will be adjusted with silence detection in a range of 30 seconds before and after cddb splitpoints.
mp3splt -a -p gap=15,th=-23,rm -c file.cddb album.mp3
This is CDDB mode with auto-adjust option. Splitpoints will be adjusted with silence detection in a range of 15 seconds before and after cddb splitpoints, with a threshold of -23 dB, and silence will be removed.
mp3splt -c query album.mp3 -n -o @n_@t
This is CDDB mode with internet query with Frame mode, NoID3 and Output format. Output filenames will be named like: 01_Title.mp3
mp3splt -t 10.00 album.mp3
This is -t option. It will split album.mp3 in many files of 10 minutes each.
Report any bugs you find to authors (see below). Advices, support requests and contributions are welcome.
Matteo Trotta <mtrotta@users.sourceforge.net>
Alexandru Ionut Munteanu <m@ioalex.net>
Visit http://mp3splt.sourceforge.net for latest release.
mp3splt-project is
(C) 2002-2005 by Matteo Trotta
(C) 2005-2014 by Alexandru Ionut Munteanu
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License. This can be found as COPYING in mp3splt packages.