-
-
Save mmrwoods/6614376 to your computer and use it in GitHub Desktop.
| #!/bin/bash | |
| # Burns a rekordbox export to an MP3 CD compatible with older CDJs. | |
| # | |
| # Copies mp3, m4a and wav audio files from export volume to a single CD, | |
| # converting to constant bit rate mp3 compatible with older CDJs and other | |
| # non-pioneer CD players as required. | |
| # | |
| # Will explode if files won't fit onto a single CD. Yup, I know this is shit. | |
| # | |
| # Requires OSX with ffmpeg and mediainfo (both can be installed via homebrew). | |
| volname="Rekordbox" | |
| dmgfile="/tmp/rekordbox.dmg" | |
| heading() { | |
| printf "\n\e[32m$1...\e[0m\n" | |
| } | |
| info() { | |
| printf "\e[34m$1\e[0m\n" | |
| } | |
| run_cmd() { | |
| printf "\e[33m$1\e[0m\n" | |
| eval $1 | |
| } | |
| # verify arguments... | |
| if test "$1" == ""; then | |
| echo "Usage: $0 path-to-rekordbox-export-volume" | |
| exit 1 | |
| fi | |
| if ! test -d "$1"; then | |
| echo "$1 is not a directory, exiting..." | |
| exit 1 | |
| fi | |
| if ! test -f "$1/._PIONEER"; then | |
| echo "$1 does not contain a rekordbox export, exiting..." | |
| exit 1 | |
| fi | |
| if ! test -d "$1/Contents"; then | |
| echo "$1 has no contents, exiting..." | |
| exit 1 | |
| fi | |
| # create and mount disk image | |
| heading "Creating and mounting temporary disk image" | |
| if test -d "/Volumes/$volname"; then | |
| echo "Unmounting existing volume..." | |
| run_cmd "hdiutil unmount \"/Volumes/$volname\"" | |
| fi | |
| if test -f $dmgfile; then | |
| echo "Deleting existing dmg file..." | |
| run_cmd "rm -rf $dmgfile" | |
| fi | |
| run_cmd "hdiutil create -fs HFS+ -volname \"$volname\" -size 650m $dmgfile" | |
| run_cmd "hdiutil mount $dmgfile" | |
| # copy files to root path on disk image, converting to constant bit rate mp3 as required | |
| heading "Copying and converting audio files" | |
| find "$1/Contents" -type f -not -name ".*" | grep -i ".\(mp3\|m4a\|wav\)" | while read file; do | |
| filename=${file##*/} | |
| ext=${filename##*.} | |
| dest="/Volumes/$volname/${filename%$ext}mp3" | |
| heading "$filename" | |
| case $(echo $ext | tr 'A-Z' 'a-z' | tr -d "\n") in | |
| mp3) | |
| if $(mediainfo "$file" | grep -i "Bit rate.*Variable" 2>&1 > /dev/null); then | |
| info "Convert from variable to constant bit rate mp3" | |
| run_cmd "ffmpeg -v warning -y -i \"$file\" -ab 192k \"$dest\" < /dev/null" | |
| else | |
| info "Copy file" | |
| run_cmd "cp \"$file\" \"$dest\"" | |
| fi | |
| ;; | |
| m4a) | |
| info "Convert m4a to mp3" | |
| # TODO: convert with same bitrate rather than hard-coded 192k | |
| run_cmd "ffmpeg -v warning -y -i \"$file\" -ab 192k \"$dest\" < /dev/null" | |
| ;; | |
| wav) | |
| info "Convert wav to mp3" | |
| run_cmd "ffmpeg -v warning -y -i \"$file\" -ab 320k \"$dest\" < /dev/null" | |
| ;; | |
| esac | |
| info "Check for errors" | |
| run_cmd "mp3check --cut-junk-start --cut-junk-end --fix-headers \"$dest\"" | |
| done | |
| # unmount the volume and burn the image | |
| heading "Burning disk image to CD" | |
| run_cmd "drutil burn \"/Volumes/$volname\"" | |
| if test $? -ne 0; then | |
| echo "Burn failed, exiting..." | |
| exit 1 | |
| fi | |
| # cleanup | |
| heading "Cleaning up" | |
| run_cmd "hdiutil unmount \"/Volumes/$volname\"" | |
| run_cmd "rm -rf $dmgfile" |
Hi Luis,
It's been a while since I used this because I no longer have rekordbox installed, so the terminology here might be slightly wrong, but the script expects you to create a playlist in rekordbox and then export the playlist to a usb key (or any other mounted disk image). Once you've done this, you can run the script, providing the path to the mounted volume as the only argument. e.g.
$ ./rekordbox2mp3cd /Volumes/USBKEY/
Before you can run the script, you obviously need to make it executable, which you can do using chmod:
$ chmod +x rekordbox2mp3cd
And you also need to ensure that ffmpeg and mediainfo have been installed. Assuming you are using homebrew for package management in OSX, this should be as simple as:
$ brew install ffmpeg mediainfo
hi, how can i use this code to really execute it and burn cds with rekorbox information?