autocast/encode.bash

125 lines
3.6 KiB
Bash
Executable file

#!/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 <COPYRIGHT HOLDER> 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 <cast config> <slug> [date]"
exit 1
fi
config=$1
if [ -z "$2" ]
then
echo "Provide a slug!"
echo "$0 <cast config> <slug> [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