voidrice/.local/bin/booksplit
iotku ebf7c78243
Remux / Remove opustag dependency
By using the file's extension and ffmpeg's stream copy functionality the script is greatly sped up.

Additionally, as ffmpeg already has tagging functionality, it's pointless to roll our own so we let ffmpeg handle the tagging instead.
2020-05-27 17:40:22 -07:00

44 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
# Requires ffmpeg (audio splitting) and my `tag` wrapper script.
[ ! -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"
# Get a safe file name from the book.
escbook="$(echo "$booktitle" | iconv -cf 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
# As long as the extension is in the tag script, it'll work.
#ext="opus"
ext="${1##*.}"
# Get the total number of tracks from the number of lines.
total="$(wc -l < "$2")"
while read -r x;
do
end="$(echo "$x" | cut -d' ' -f1)"
[ -n "$start" ] &&
echo "From $start to $end; $track $title"
file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext"
[ -n "$start" ] && echo "Splitting/Tagging \"$title\"..." && ffmpeg -nostdin -y -loglevel -1 -i "$inputaudio" -metadata title="$title" -metadata artist="$author" -metadata album="$booktitle" -metadata track="$track" -metadata date="$year" -ss "$start" -to "$end" -acodec copy -vn "$file"
title="$(echo "$x" | cut -d' ' -f 2-)"
esctitle="$(echo "$title" | iconv -cf UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")"
track="$((track+1))"
start="$end"
done < "$2"
# The last track must be done outside the loop.
echo "From $start to the end: $title"
file="$escbook/$track-$esctitle.$ext"
echo "Splitting/Tagging \"$title\"..." && ffmpeg -nostdin -y -loglevel -8 -i "$inputaudio" -metadata title="$title" -metadata artist="$author" -metadata album="$booktitle" -metadata track="$track" -metadata date="$year" -ss "$start" -acodec copy -vn "$file" &&
echo "Done."