#!/bin/bash set -eu set -o pipefail # shellcheck disable=SC2086 tempdir="/tmp/$(basename $0).$$.dir" # shellcheck disable=SC2086 tempfile="/tmp/$(basename $0).$$.file" # shellcheck disable=SC2064 trap "rm -rf \"$tempdir\" \"$tempfile\"" $(seq 0 15) mkdir -p "$tempdir" function usage { retval="$1" case "$retval" in 0) ;; *) exec 1>&2 ;; esac echo "Usage: $0 --to-file path.mp3 --artist bandname --title songname fn1.mp3 fn2.mp3 .. fnn.mp3" exit "$retval" } while [ "$#" -ge 1 ] do case "$1" in --) shift # The rest of our arguments are input files. break ;; --to-file) # The single output file. output_file="$2" shift ;; --artist) artist="$2" shift ;; --song-title) title="$2" shift ;; -h|--help) usage 0 ;; --*) echo "$0: unrecognized option: $1" 1>&2 usage 1 ;; *) # The rest of our arguments are input files. break ;; esac shift done echo '$@ is' "$@" for file in "$@" do bn=$(basename "$file") ffmpeg -i "$file" "$tempdir/$bn" done cat "$tempdir"/* > "$output_file" mp3val "$output_file" -f -nb id3v2 --song "$title" --artist "$artist" "$output_file"