mirror of
https://github.com/LukeSmithxyz/voidrice.git
synced 2026-03-20 01:37:45 +01:00
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.
44 lines
1.9 KiB
Bash
Executable File
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."
|