3.2 KiB
3.2 KiB
CD Ripping Workflow (abcde + beets → Jellyfin)
Tools
| Tool | Purpose |
|---|---|
abcde |
Rips CD and encodes to MP3 via cdparanoia |
lame |
MP3 encoder used by abcde |
mid3v2 |
ID3 tagger used by abcde (part of python3-mutagen) |
beets |
MusicBrainz metadata match + library import |
Install once:
sudo apt install -y abcde lame beets python3-mutagen
Config Files
~/.abcde.conf
CDDBMETHOD=musicbrainz
OUTPUTTYPE=mp3
LAMEOPTS="-b 320"
OUTPUTDIR=/mnt/media/jellyfin/inbound
ACTIONS=cddb,read,encode,tag,move,clean
NOGAP=y
TAGGER=mid3v2
~/.config/beets/config.yaml
directory: /mnt/media/jellyfin/music
library: ~/.config/beets/musiclibrary.db
import:
move: yes
write: yes
paths:
default: $albumartist/$album/$track - $title
singleton: Non-Album/$artist - $title
comp: Compilations/$album/$track - $title
Workflow
1. Insert the CD, then rip:
abcde -d /dev/sr0
- Looks up the disc on MusicBrainz, prompts to confirm the match
- Encodes to MP3 320kbps
- Stages files to
/mnt/media/jellyfin/inbound/<Artist>/<Album>/ - Takes ~5–10 min depending on disc
2. Import with beets:
beet import -A "/mnt/media/jellyfin/inbound/<Artist>"
-Aruns non-interactively and auto-selects the best MusicBrainz match- On success, moves files to
/mnt/media/jellyfin/music/<Artist>/<Album>/<Track> - <Title>.mp3 - If auto-match fails (wrong album, low confidence), drop
-Aand run interactively from a real terminal — beet will prompt you to search or enter a MusicBrainz ID manually. Cannot be run interactively from a Claude Code session.
3. Trigger Jellyfin rescan: Jellyfin dashboard → Libraries → Music → "Scan Library Files"
Device Info
- Drive: Pioneer BDC-202 (BD-ROM / DVD-writer combo)
- Device:
/dev/sr0(also/dev/cdrom) chrisis in thecdromgroup — no sudo needed to read the disc
Troubleshooting
- MusicBrainz lookup fails in abcde: Install
python3-musicbrainzngsseparately. - abcde errors "mid3v2 is not in your path":
sudo apt install python3-mutagen— mid3v2 is part of that package. - beet import shows " - " as artist/album, files land in
__/folder: abcde failed to write ID3 tags. Verify withmid3v2 -l file.mp3. If blank, tag manually and re-import:mid3v2 -a "Artist" -A "Album" -t "Title" -T "TRACKNUM/TOTAL" -y YEAR --TPOS "DISC/TOTALDISCS" file.mp3 - Multi-disc album: disc number missing in Jellyfin: beets doesn't set
TPOSautomatically. Tag each disc after import:Then trigger a Jellyfin rescan.# CD1 for f in /mnt/media/jellyfin/music/Artist/Album/0{1..9}-*.mp3 ...; do mid3v2 --TPOS "1/2" "$f"; done # CD2 for f in /mnt/media/jellyfin/music/Artist/Album/0{1..9}-*.mp3 ...; do mid3v2 --TPOS "2/2" "$f"; done - beet import can't find files: Check the exact staged path after abcde finishes — album artist name may differ from expected.
- Jellyfin doesn't pick up music: Trigger a manual library scan after import.