Rip CD's with abcde

There are more ways to rip a CD with Linux, but most of the solutions with a GUI are ripping rather slow.

Why not rip from the command line?

The best experience of a fast rip I have with abcde. This is a command line ripper that works very easy and has a very satisfying result.

You can find abcde in the standard repo of your linux distribution.

In fact to rip a CD to mp3 format the only statement that is required is:

<prompt$> abcde -o mp3

Process

abcde -o mp3
CDDB method 0: cddb
Executing customizable pre-read function... done.
Getting CD track info... Grabbing entire CD - tracks: 01 02 03 04 05 06 07 08 09 10 11 12
Trying CDDB method cddb.
Checking CDDB server status...
Querying the CDDB server...
Obtaining CDDB results...
Retrieving 1 CDDB match...done.
---- Sprong in het heelal / Mars slaat toe-01 ----
1: Deel 1 Het onderzoek
2: 15 april 1972 aardetijd. De expeditievloot van Mars
3: Een droevige geschiedenis, die expeditie van u
4: Zo bleven we 3 maanden in Maanstad
5: Captain Morgan, zou u nog eens naar Mars willen gaan
6: Captain Morgan, Professor Hadley van de sterrenwacht
7: Deel 2 De asteroïden
8: Een jaar was verlopen
9: Ziezo, de motor is afgezet
10: Hallo Jeff, hier is Dr. Matthews
11: Dat is het heren
12: Daar moet het zijn

Edit selected CDDB data [y/N]? 

Whe reply this with 'N'

Is the CD multi-artist [y/N]? 

We reply this with 'N'

Creating playlist...
Grabbing track 01: Deel 1 Het onderzoek...
Type: ROM, Vendor 'MATSHITA' Model 'DVD+-RW UJ890   ' Revision '1.02' MMC+CDDA
569344 bytes buffer memory requested, 4 buffers, 55 sectors
#icedax version 1.1.11, real time sched., soundcard, libparanoia support
AUDIOtrack pre-emphasis  copy-permitted tracktype channels
      1-12           no              no     audio    2
Table of Contents: total tracks:12, (total time 77:43.00)
....
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=2)
    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 
  1693/1693  (100%)|    0:01/    0:01|    0:01/    0:01|   39.022x|    0:00 
 32 [   1] *
 40 [   0] 
 48 [   0] 
 56 [   0] 
 64 [   1] *
 80 [   0] 
 96 [   2] *
112 [  38] ******
128 [1055] **************************************************************************************************************************************************
160 [ 523] *************************************************************************
192 [  47] *******
224 [  19] ***
256 [   7] *
320 [   0] 
-------------------------------------------------------------------------------------------------------------------------------------------------------------
   kbps        MS  %     long switch short %
  140.8      100.0        90.4   4.5   5.1
....
track03.mp3 [ 7.39 MB ]
-------------------------------------------------------------------------------
Time: 07:09 MPEG1, Layer III    [ ~144 kb/s @ 44100 Hz - Joint stereo ]
-------------------------------------------------------------------------------
No ID3 v1.x/v2.x tag found!
Setting artist: Sprong in het heelal
Setting album: Mars slaat toe-01
Setting title: Een droevige geschiedenis, die expeditie van u
Setting track: 03
Setting track total: 12
Setting track genre: 12
Setting comment: []: abcde version 2.7.2
Setting TDRC frame to '1957'
Writing tag...
ID3 v2.4:
title: Een droevige geschiedenis, die expeditie van u       artist: Sprong in het heelal
....

And that is done for all tracks. It will take about 10 minutes to rip a CD.

The tracks are saved in:

/home/<yourhomefolder>/Music/mp3

where mp3 is the format that you are ripping.

Options

Many options are available if you need a bit more than the most modest command:

Usage: abcde [options] [tracks]
Options:
-1     Encode the whole CD in a single file
-a <action1[,action2]...>
       Actions to perform:
       cddb,read,getalbumart,normalize,encode,tag,move,replaygain,playlist,clean
-b     Enable batch normalization
-c <file>
       Specify a configuration file (overrides system and user config files)
-C <discid#>
       Specify discid to resume from (only needed if you no longer have the cd)
-d <device>
       Specify CDROM device to grab (flac uses a single-track flac file)
-D     Debugging mode (equivalent to sh -x abcde)
-e     Erase encoded track information from status file
-f     Force operations that otherwise are considered harmful. Read "man abcde"
-g     Use "lame --nogap" for MP3 encoding. Disables low disk and pipes flags
-G     Get album art by using the 'getalbumart' action
-h     This help information
-j <#> Number of encoder processes to run at once (localhost)
-k     Keep the wav tracks for later use
-l     Use low disk space algorithm
-L     Use local CDDB storage directory
-m     Modify playlist to include CRLF endings, to comply with some players
-n     No lookup. Don't query CDDB, just create and use template
-N     Noninteractive. Never prompt for anything
-o <type1[,type2]...>
       Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,mka,wv,ape,mp2,tta). Defaults to vorbis
-p     Pad track numbers with 0's (if less than 10 tracks)
-P     Use UNIX pipes to read+encode without wav files
-r <host1[,host2]...>
       Also encode on these remote hosts
-s <field>
       Show fields from the CDDB info (year,genre)
-S <#> Set the CD speed
-t <#> Start the track numbering at a given number
-T <#> Same as -t but modifies tag numbering
-U     Do NOT use UNICODE (UTF8) tags and comments
-v     Show version number and exit
-V     Be a bit more verbose about what is happening behind the scenes
-x     Eject CD after all tracks are read
-w <comment>
       Add a comment to the CD tracks
-W <#> Concatenate CDs: -T #01 -w "CD #"
-z     Use debug CDROMREADERSYNTAX option (needs cdparanoia)

Tracks is a space-delimited list of tracks to grab.
Ranges specified with hyphens are allowed (i.e., 1-5).

.abcde.conf

It is also possible to fit the config settings in a seperate .abcde.conf file. This file has to be placed in the folder:

/home/<youruserfolder>/
My own version of .abcde.conf
# -----------------$HOME/.abcde.conf----------------- #
# 
#  A sample configuration file to convert music cds to 
#  MP3, Ogg Vorbis, FLAC, Musepack, AAC, WavPack, Opus,
#  Monkey's Audio (ape), True Audio, AC3 and mp2, 11 formats
#  at the same time! Using abcde version 2.7.2 release version.
# 
#   http://andrews-corner.org/linux/abcde/index.html
# -------------------------------------------------- #

# Encode tracks immediately after reading. Saves disk space, gives
# better reading of 'scratchy' disks and better troubleshooting of
# encoding process but slows the operation of abcde quite a bit:
LOWDISK=y

# Specify the method to use to retrieve the track information,
# the alternative is to specify 'musicbrainz':
CDDBMETHOD=cddb

# Make a local cache of cddb entries and then volunteer to use 
# these entries when and if they match the cd:
CDDBCOPYLOCAL="y"
CDDBLOCALDIR="$HOME/.cddb"
CDDBLOCALRECURSIVE="y"
CDDBUSELOCAL="y"

OGGENCODERSYNTAX=oggenc                   # Specify encoder for Ogg Vorbis
MP3ENCODERSYNTAX=lame                     # Specify encoder for MP3
FLACENCODERSYNTAX=flac                    # Specify encoder for FLAC
# MPCENCODERSYNTAX=mpcenc                   # Specify encoder for Musepack
# AACENCODERSYNTAX=fdkaac                   # Specify encoder for AAC
# OPUSENCODERSYNTAX=opusenc                 # Specify encoder for Opus
WVENCODERSYNTAX=wavpack                   # Specify encoder for Wavpack
# APENCODERSYNTAX=mac                       # Specify encoder for Monkey's Audio
# TTAENCODERSYNTAX=tta                      # Specify encoder for True Audio
# MP2ENCODERSYNTAX=twolame                  # Specify encoder for MP2
MKAENCODERSYNTAX=ffmpeg                   # Specify encoder for MKA (AC3 via FFmpeg)

OGGENC=oggenc                             # Path to Ogg Vorbis encoder
LAME=lame                                 # Path to MP3 encoder
FLAC=flac                                 # Path to FLAC encoder
# MPCENC=mpcenc                             # Path to Musepack encoder
# FDKAAC=fdkaac                             # Path to the AAC encoder
# OPUSENC=opusenc                           # Path to Opus encoder
WVENC=wavpack                             # Path to WavPack encoder
# APENC=mac                                 # Path to Monkey's Audio encoder
# TTA=tta                                   # Path to True Audio encoder
# TWOLAME=twolame                           # Path to MP2 encoder
FFMPEG=ffmpeg                             # Path to FFmpeg (AC3 via FFmpeg)

OGGENCOPTS='-q 6'                         # Options for Ogg Vorbis
LAMEOPTS='-V 2'                           # Options for MP3 
FLACOPTS='-s -e -V -8'                    # Options for FLAC
MPCENCOPTS='--extreme'                    # Options for Musepack
FDKAACENCOPTS='-p 2 -m 5 -a 1'            # Options for fdkaac
OPUSENCOPTS="--vbr --bitrate 128"         # Options for Opus
WVENCOPTS="-hx3"                          # Options for WavPack
APENCOPTS="-c4000"                        # Options for Monkey's Audio
TTAENCOPTS=""                             # Options for True Audio
TWOLAMENCOPTS="--bitrate 320"             # Options for MP2
FFMPEGENCOPTS="-c:a ac3 -b:a 448k"        # Options for MKA (AC3 via FFmpeg)

#OUTPUTTYPE="ogg,mp3,flac,mpc,m4a,opus,wv,ape,tta,mp2,mka"  # Encode to 11 formats!
OUTPUTTYPE="ogg,mp3,flac,m4a"

# The cd ripping program to use. There are a few choices here: cdda2wav,
# dagrab, cddafs (Mac OS X only) and flac. New to abcde 2.7 is 'libcdio'.
# CDROMREADERSYNTAX=cdparanoia            
CDROMREADERSYNTAX=cdda2wav

# Give the location of the ripping program and pass any extra options,
# if using libcdio set 'CD_PARANOIA=cd-paranoia'.
CDPARANOIA=cdparanoia  
CDPARANOIAOPTS="--never-skip=40"

# Give the location of the CD identification program:       
CDDISCID=cd-discid           

# Give the base location here for the encoded music files.
OUTPUTDIR="$HOME/Music"               

# The default actions that abcde will take.
ACTIONS=cddb,playlist,read,encode,tag,move,clean

# Decide here how you want the tracks labelled for a standard 'single-artist',
# multi-track encode and also for a multi-track, 'various-artist' encode:
OUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM}.${TRACKFILE}'
VAOUTPUTFORMAT='${OUTPUT}/${ALBUMFILE}/${TRACKNUM}.${ARTISTFILE}-${TRACKFILE}'

# Decide here how you want the tracks labelled for a standard 'single-artist',
# single-track encode and also for a single-track 'various-artist' encode.
# (Create a single-track encode with 'abcde -1' from the commandline.)
ONETRACKOUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${ALBUMFILE}'
VAONETRACKOUTPUTFORMAT='${OUTPUT}/${ALBUMFILE}/${ALBUMFILE}'

# Create playlists for single and various-artist encodes. I would suggest
# commenting these out for single-track encoding.
PLAYLISTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${ALBUMFILE}.m3u'
VAPLAYLISTFORMAT='${OUTPUT}/${ALBUMFILE}/${ALBUMFILE}.m3u'

# This function takes out dots preceding the album name, and removes a grab
# bag of illegal characters. It allows spaces, if you do not wish spaces add
# in -e 's/ /_/g' after the first sed command.
mungefilename ()
{
  echo "$@" | sed -e 's/^\.*//' | tr -d ":><|*/\"'?[:cntrl:]"
}

MAXPROCS=2                                # Run a few encoders simultaneously
PADTRACKS=y                               # Makes tracks 01 02 not 1 2
EXTRAVERBOSE=2                            # Useful for debugging
COMMENT='abcde version 2.7.2'             # Place a comment...
EJECTCD=y                                 # Please eject cd when finished :-)
Last update: Tue, 13 Sep 2022 14:32:15