Files
smithpc/cd-ripping-workflow.md
2026-06-29 05:04:05 -05:00

3.2 KiB
Raw Blame History

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 ~510 min depending on disc

2. Import with beets:

beet import -A "/mnt/media/jellyfin/inbound/<Artist>"
  • -A runs 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 -A and 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)
  • chris is in the cdrom group — no sudo needed to read the disc

Troubleshooting

  • MusicBrainz lookup fails in abcde: Install python3-musicbrainzngs separately.
  • 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 with mid3v2 -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 TPOS automatically. Tag each disc after import:
    # 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
    
    Then trigger a Jellyfin rescan.
  • 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.