44 lines
1.7 KiB
Bash
Executable File
44 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Requires ffmpeg
|
|
|
|
[ ! -f "$2" ] && printf "The first file should be the audio, the second should be the timecodes.\\n" && exit
|
|
|
|
echo "Enter the album/book title:"; read -r booktitle
|
|
echo "Enter the artist/author:"; read -r author
|
|
echo "Enter the publication year:"; read -r year
|
|
|
|
inputaudio="$1"
|
|
ext="${1##*.}"
|
|
|
|
# Get a safe file name from the book.
|
|
escbook="$(echo "$booktitle" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")"
|
|
|
|
! mkdir -p "$escbook" &&
|
|
echo "Do you have write access in this directory?" &&
|
|
exit 1
|
|
|
|
# Get the total number of tracks from the number of lines.
|
|
total="$(wc -l < "$2")"
|
|
|
|
cmd="ffmpeg -i \"$inputaudio\" -nostdin -y"
|
|
|
|
while read -r x;
|
|
do
|
|
end="$(echo "$x" | cut -d' ' -f1)"
|
|
file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext"
|
|
if [ -n "$start" ]; then
|
|
cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -metadata total=\"$total\" -ss \"$start\" -to \"$end\" -vn -c:a copy \"$file\" "
|
|
fi
|
|
title="$(echo "$x" | cut -d' ' -f2-)"
|
|
esctitle="$(echo "$title" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")"
|
|
track="$((track+1))"
|
|
start="$end"
|
|
done < "$2"
|
|
|
|
# Last track must be added out of the loop.
|
|
file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext"
|
|
cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -ss \"$start\" -vn -c copy \"$file\""
|
|
|
|
eval "$cmd"
|