#!/bin/bash # # encode.bash - Drives a set of encoders and tagging utilities to convert a # single WAV input file into flac, Ogg Vorbis, AAC and MP3 files with complete # and consistent metadata. # # Copyright (c) 2010, Thomas Gideon # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of Thomas Gideon nor the # names of additional contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. function clean { if [ -f "$1" ] then echo "Cleaning existing file, $1." rm "$1" fi } if [ -z "$1" ] then echo "Provide a cast config!" echo "$0 [date]" exit 1 fi config=$1 if [ -z "$2" ] then echo "Provide a slug!" echo "$0 [date]" exit 2 fi slug="$2" if [ -z "$3" ] then date=$(date +%Y-%m-%d) year=$(date +%Y) post_date=$(date +%Y/%m/%d) else date=$(date +%Y-%m-%d -d "$3") year=$(date +%Y -d "$3") post_date=$(date +%Y/%m/%d -d "$3") fi # load info from cast specific config file . "$config" if [ -z "$file_prefix" ] then echo "${config} must set file_prefix." exit 1 fi echo "Info for tagging." echo "Title: $title" echo "Artist: $artist" echo "Cover: $cover" echo "Album: $album" echo "Genre: $genre" echo "URL: $url" echo "Copyright: $copyright" echo "Comment: $comment" base_file=${file_prefix}${date} echo "" echo "Encoding MP3, ${base_file}.mp3 at ${mp3_bitrate} kbps." clean "${base_file}.mp3" echo "" # encode lossy, MP3, adding ID3v2 tags for everything # *except* cover art lame -b "${mp3_bitrate}" \ --cbr \ --tt "${title}" \ --ta "${artist}" \ --tl "${album}" \ --ty "${year}" \ --tc "${comment}" \ --tg "${genre}" \ --id3v2-only \ --noreplaygain \ "${base_file}".flac \ "${base_file}".mp3 # lame package from Lucid lacks the --ti switch for image # found eyed3 via a web search eyeD3 --add-image "${cover}":FRONT_COVER \ --url-frame="WCOP:${copyright}" \ "${base_file}".mp3 echo "" echo "Tagging ${base_file}.flac." echo "" # lossless encoding metaflac \ --import-picture-from="|image/png|||${cover}" \ --set-tag=title="${title}" \ --set-tag=artist="${artist}" \ --set-tag=album="${album}" \ --set-tag=year="${year}" \ --set-tag=genre="${genre}" \ --set-tag=composer="${artist}" \ --set-tag=comment="${comment}" \ --set-tag=url="${url}" \ --set-tag=copyright="${copyright}" \ "${base_file}".flac