Random multimedia scripts:
- smj7.py - A command-line music jukebox (and indexer) featuring a custom querying syntax
- xyz2aac.py - A multi-process media converter utilizing CoreAudio to convert CoreAudio readable audio files to AAC or ALAC
% ./smj7.py -h ✹
usage: smj7.py [-h] [-l LOCATION] [-q QUERY] [--database DATABASE] [--freshen]
[--prune] [--force-rescan] [--json] [--show-paths] [-i INDENT]
[--force-serial] [--syntax] [-d]
A simple command-line media indexer and jukebox.
optional arguments:
-h, --help show this help message and exit
-l LOCATION, --location LOCATION
the location to search for media files [~/Music]
-q QUERY, --query QUERY
input an SMJ7-style query, followed by playlist
commands, and disable interactive mode (see --syntax)
--database DATABASE the location to store the media database
[~/.smj/smj7.sqlite]
--freshen search for new files and scan them, and update
existing entries in the database, useful when adding
new albums or changing metadata
--prune delete entries from the database if the file no longer
exists (Note: if you suspect a large amount of files,
use --force-rescan instead)
--force-rescan nuke the database and start from scratch, useful when
a lot has changed since the last scan
--json skip playback and interactive selection, just output
matching results in JSON
--show-paths include path information in JSON track output
-i INDENT, --indent INDENT
with --json, # of spaces to indent by, set to 0 to
dump block of text [2]
--force-serial disable parallelized media parsing, useful for slower
machines or older mechanical hard disk drives
--syntax show SMJ7-sylte syntax guide
-d, --debug enable debug mode
Note: mplayer is required to play files.
brew install mplayer
pip install mutagen scandir
git clone https://github.com/swdd/multimedia.git
./multimedia/smj7.py
sudo pacman -S python2-pip mplayer
pip install mutagen scandir
git clone https://github.com/swdd/multimedia.git
./multimedia/smj7.py
sudo yum install mplayer python-pip
pip install mutagen scandir
git clone https://github.com/swdd/multimedia.git
./multimedia/smj7.py
sudo apt-get install mplayer python-pip
pip install mutagen scandir
git clone https://github.com/swdd/multimedia.git
./multimedia/smj7.py
Enjoy quick shorthand and get to your music quickly, easily, and all from the command line:
./smj7.py -q '@awol, #run'
: Automatically play all songs off of "Run" by "AWOLNATION"./smj7.py -q '@decem, #live, $infanta'
: Play the live version of "Infanta" by "The Decemberists"./smj7.py -q '!electronic, !dance, !party; s'
: Play a shuffled mix of those 3 genres
SMJ7 supports a new syntax for chaining queries together using single-character notation. You can combine multiple parameters; like-type parameters will be logically ORed and unlike-type parameters will be logically ANDed together.
- !some string - Search for genres matching the string
- @some string - Search for artists matching the string
- #some string - Search for albums matching the string
- $some string - Search for tracks matching the string
- some string - Search for artists, albums, or tracks matching the string
Parameters are comma-separated, and combined logically as mentioned above. All strings are searched case-insensitively and will match on partial hits.
- @artist1, @artist2 - Would search for any songs by either artist1 or artist2
- @artist1, #album1 - Would search for any albums with "albums1" in it by any artist with "artist1" in it.
- something1 - Would search for anything matching "something1", in any field
- something1, $track1 - Would search for any tracks matching "track1" that have "something1" related to them
- term1, term2, term3 - Keep searching everything until the additional terms yield the specificity you wish
- @artist1, @artist2, #greatest hits - Play the "Greatest Hits" albums by both artist1 and artist2
- @artist, #album, $tracknumber - Play a specific track off of a specific album, useful when live albums exist alongside
- @mingus, @coltrane, @brubeck - Would play some assorted jazz tracks by these 3 artists
- @rolling stones, #greatest - Would match "Greatest Hits" by "The Rolling Stones"
- @decemberists, #live, $infanta - Would play the live version of "Infanta" by "The Decemberists"
When invoking from the command line, you should encapsulate your SMJ7-style query in quotes, so that your shell can pass it here properly.
To add playlist commands, simply append a semicolon ";" to your query and follow it with one of:
- a - Play all matching songs
- r - Play a single, random matching song
- s - Play all matching songs, shuffled
./smj7.py -q "@rolling stones, #greatest; a"
- Plays all songs matching the query./smj7.py -q "@decemberists, #live; s"
- Plays all songs matching the query, in a random order