Beets
Contents
Beets
Beets is the media library management system for obsessive-compulsive music geeks.
http://beets.readthedocs.io/en/v1.4.5/guides/main.html sudo apt-get install beets
But the version in the repositories might lag behind, so make sure you read the right version of these docs. If you want the latest version, you can get everything you need to install with pip as described below by running:
sudo apt-get install python-dev python-pip sudo pip install beets
If you have issues that you can not run beet, try:
sudo ln -s /usr/local/bin/beet /usr/bin/beet
I would recommend getting MediaInfo. Its a great tool.
sudo apt-get install mediainfo
Beets supports zip and tar archives out of the box. To extract rar files, install the rarfile package and the unrar command.
sudo apt-get install rar unrar atool
Plugins
Chromaprint/Acoustid Plugin
U will need Chromaprint.
sudo pip install pyacoustid sudo apt-get install libchromaprint-tools python-gi
Get a api key from http://acoustid.org/api-key
U need gstreamer
sudo apt-get install gstreamer-tools (gstreamer1.0-tools in stretch)
U need codecs
sudo apt-get install gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly libmp3lame-dev sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly libmp3lame-dev (Stretch)
The discogs plugin extends the autotagger’s search capabilities to include matches from the Discogs database.
sudo pip install discogs-client
Lyrics
Fetch Lyrics During Import
To automatically fetch lyrics for songs you import, enable the lyrics plugin in your configuration (see Using Plugins). Then, install the requests library by typing:
sudo pip install requests
To activate Google Custom Search, using the Google backend requires BeautifulSoup, which you can install using pip by typing:
pip install beautifulsoup4
You also need to register for a Google API key. Set the google_API_key configuration option to your key. Then add google to the list of sources in your configuration (or use default list, which includes it as long as you have an API key). If you use default google_engine_ID, we recommend limiting the sources to musixmatch google as the other sources are already included in the Google results.
https://console.developers.google.com
EmbedArt Plugin
sudo apt-get install imagemagick
AcousticBrainz Submit Plugin
wget http://acousticbrainz.org/static/download/essentia-extractor-v2.1_beta2-linux-x86_64.tar.gz aunpack essentia-extractor-v2.1_beta2-linux-x86_64.tar.gz sudo mv ~/Downloads/streaming_extractor_music /usr/bin/
To configure the plugin, make a absubmit: section in your configuration file. The available options are:
auto: Analyze every file on import. Otherwise, you need to use the beet absubmit command explicitly. Default: no
editor
Editor and Shell
echo $EDITOR
For me that produces "vim". If you want to change your default editor simply put a line in ~/.bashrc that changes it. Mine looks like this:
export EDITOR='vim'
convert
beet -c ~/beets/Paula_beets.yaml convert -f mp3 'The Day Before You Came' -d ~/Downloads/
To keep the converted file, use the --keep (-k) option:
beet -c ~/beets/Paula_beets.yaml convert -f mp3 'The Day Before You Came' -k -d ~/Downloads/
To find all Window Media files and convert them, in place, use the following:
beet -c ~/beets/Paula_beets.yaml convert -f mp3 format:'Windows Media' -k -d ~/Downloads/
Configuration
beet config -e vim ~/.config/beets/config.yaml
vim: ~/.config/beet/config.yaml |
# Beets configuration --------------------------------------------------------
directory: ~/Music
library: ~/Music/music_lib.db
plugins:
chroma
fromfilename
fetchart
embedart
lyrics
discogs
absubmit
acousticbrainz
edit
mbsync
import:
move: no
log: ~/Music/beet.log
write: yes
# Paths ----------------------------------------------------------------------
#
# Paths and filenames for music files
# relative to music directory
paths:
default: $albumartist/$album%aunique{}/$artist - $track - $title
singleton: $albumartist/$artist - $title
comp: $album%aunique{}/$artist - $track - $title
# replace special characters in generated filenames
#replace:
# '[\\/]': _
# '^\.': _
# '[\x00-\x1f]': _
# '[<>:"\?\*\|]': _
# '\.$': _
# '\s+$': ''
# use mutliple threads during import
# threaded: yes
# timeout: 5.0
# verbose: no
ui:
color: yes
list_format_item: %upper{$artist} - $album - $track. $title
list_format_album: %upper{$albumartist} - $album
time_format: '%Y-%m-%d %H:%M:%S'
terminal_encoding: utf8
colors:
text_success: green
text_warning: yellow
text_error: red
text_highlight: red
text_highlight_minor: lightgray
action_default: turquoise
action: blue
acoustid:
apikey: XXxxXXxxXX
absubmit:
auto: yes
edit:
itemfields: acoustid_id album albumartist artist average_loudness bitrate channels comments disc disctotal format gender genre length path samplerate title track tracktotal year
# Auto Tagger ----------------------------------------------------------------
match:
strong_rec_thresh: 0.1 # match 90% or better for auto import
medium_rec_thresh: 0.25
rec_gap_thresh: 0.25
max_rec:
missing_tracks: medium
unmatched_tracks: medium
distance_weights:
source: 2.0
artist: 3.0
album: 3.0
media: 1.0
mediums: 1.0
year: 1.0
country: 0.5
label: 0.5
catalognum: 0.5
albumdisambig: 0.5
album_id: 5.0
tracks: 2.0
missing_tracks: 0.9
unmatched_tracks: 0.6
track_title: 3.0
track_artist: 2.0
track_index: 1.0
track_length: 2.0
track_id: 5.0
preferred:
countries: []
media: []
original_year: no
ignored: []
track_length_grace: 10
track_length_max: 30
embedart:
auto: yes.
compare_threshold: 50
|
query/search/list
beet ls love beet ls -a forever [a for album] beet stats beet -c ~/beets/Paula_beets.yaml list format:'Windows Media'
There’s also an -f option (for format) that lets you specify what gets displayed in the results of a search:
beet ls -a forever -f '[$format] $album ($year) - $artist - $title [$format]'
Some nice commands
beet import -s (run in singleton mode, tagging individual tracks instead of whole albums at a time)
OR:
While you import, use the "T" option to flip to Track mode from album mode. Makes a big difference!
To update your smart playlist:
beet splupdate
Modify
Kodi reads the album tags from the singletons in the non-album folder and creates a new album for each of these. So, you end up with an annoyingly large number of “single-song” albums in Kodi. Kodi suggests to remove album tags from these singles / singletons and then treats them as singles.
beet modify singleton:true album=
Give back to the community
Run these commands from time to time....
beet update beet fingerprint beet submit beet -v absubmit [QUERY] beet mbsync [QUERY]
During a long tagging import, it can be useful to keep track of albums that weren’t tagged successfully—either because they’re not in the MusicBrainz database or because something’s wrong with the files. Use the -l option to specify a filename to log every time you skip an album or import it “as-is” or an album gets skipped as a duplicate.
The -L (--library) flag is also useful for retagging. Instead of listing paths you want to import on the command line, specify a query string that matches items from your library. In this case, the -s (singleton) flag controls whether the query matches individual items or full albums. If you want to retag your whole library, just supply a null query, which matches everything: beet import -L
Issues
I had all funny erros like:
File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 947, in send raise TypeError("data must be a byte string") TypeError: data must be a byte string
Upgrading these python packages did the trick
sudo easy_install --upgrade pip sudo easy_install --upgrade cryptography sudo easy_install --upgrade pyopenssl
I also had some issues doing the easy_install with cffi missing. I tried:
sudo apt-get install python-cffi
I needed to upgrade my setuptools
sudo pip install setuptools --upgrade
I had some issues with unrecognized file. I converted the mp3 to flac.
ffmpeg -i input.mp3 output.flac ffmgeg -i -codec:a libmp3lame -qscale:a 2 input.mp3 output.mp3
Control quality with -qscale:a (or the alias -q:a). Values are encoder specific, so for libmp3lame the range is 0-9 where a lower value is a higher quality. 0-3 will normally produce transparent results, 4 (default) should be close to perceptual transparency, and 6 produces an "acceptable" quality. The option -qscale:a is mapped to the -V option in the standalone lame command-line interface tool.
LAME Bitrate Overview lame option Average kbit/s Bitrate range kbit/s ffmpeg option -b 320 320 320 CBR (non VBR) example -b:a 320k (NB this is 32KB/s, or its max) -V 0 245 220-260 -q:a 0 (NB this is VBR from 22 to 26 KB/s) -V 1 225 190-250 -q:a 1 -V 2 190 170-210 -q:a 2 -V 3 175 150-195 -q:a 3 -V 4 165 140-185 -q:a 4 -V 5 130 120-150 -q:a 5 -V 6 115 100-130 -q:a 6 -V 7 100 80-120 -q:a 7 -V 8 85 70-105 -q:a 8 -V 9 65 45-85 -q:a 9
In our example above, we selected -qscale:a 2, meaning we used LAME's option -V 2, which gives us a VBR MP3 audio stream with an average stereo bitrate of 170-210 kBit/s.
For batch processing files in folder:
for i in *.wav; do ffmpeg -i "$i" -f mp3 "${i%}.mp3"; done for f in *.ac3 ; do ffmpeg -i "$f" -acodec libmp3lame -q:a 2 "${f%.*}.mp3"; done