added luke's booksplit script
This commit is contained in:
parent
1704fe27fe
commit
a00598c4cb
49
.local/bin/booksplit
Executable file
49
.local/bin/booksplit
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#!/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.
|
||||||
|
#iconv -cf UTF-8 -t ASCII//TRANSLIT
|
||||||
|
escbook="$(echo "$booktitle" | 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 -f1)"
|
||||||
|
|
||||||
|
[ -n "$start" ] &&
|
||||||
|
echo "From $start to $end; $track $title"
|
||||||
|
file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext"
|
||||||
|
[ -n "$start" ] && echo "Splitting \"$title\"..." &&
|
||||||
|
ffmpeg -nostdin -y -i "$inputaudio" -ss "$start" -to "$end" -vn -c copy "$file" &&
|
||||||
|
echo "Tagging \"$title\"..." && tag -a "$author" -A "$booktitle" -t "$title" -n "$track" -N "$total" -d "$year" "$file"
|
||||||
|
title="$(echo "$x" | cut -f 2)"
|
||||||
|
author="$(echo "$x" | cut -f 3)"
|
||||||
|
#| iconv -cf UTF-8 -t ASCII//TRANSLIT
|
||||||
|
esctitle="$(echo "$title" | 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/$(printf "%.2d" "$track")-$esctitle.$ext"
|
||||||
|
echo "Splitting \"$title\"..." && ffmpeg -nostdin -y -loglevel -8 -i "$inputaudio" -ss "$start" -vn -c copy "$file" &&
|
||||||
|
echo "Tagging \"$title\"..." && tag -a "$author" -A "$booktitle" -t "$title" -n "$track" -N "$total" -d "$year" "$file"
|
59
.local/bin/tools/tag
Executable file
59
.local/bin/tools/tag
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
err() { echo "Usage:
|
||||||
|
tag [OPTIONS] file
|
||||||
|
Options:
|
||||||
|
-a: artist/author
|
||||||
|
-t: song/chapter title
|
||||||
|
-A: album/book title
|
||||||
|
-n: track/chapter number
|
||||||
|
-N: total number of tracks/chapters
|
||||||
|
-d: year of publication
|
||||||
|
-g: genre
|
||||||
|
-c: comment
|
||||||
|
You will be prompted for title, artist, album and track if not given." && exit 1 ;}
|
||||||
|
|
||||||
|
while getopts "a:t:A:n:N:d:g:c:f:" o; do case "${o}" in
|
||||||
|
a) artist="${OPTARG}" ;;
|
||||||
|
t) title="${OPTARG}" ;;
|
||||||
|
A) album="${OPTARG}" ;;
|
||||||
|
n) track="${OPTARG}" ;;
|
||||||
|
N) total="${OPTARG}" ;;
|
||||||
|
d) date="${OPTARG}" ;;
|
||||||
|
g) genre="${OPTARG}" ;;
|
||||||
|
c) comment="${OPTARG}" ;;
|
||||||
|
f) file="${OPTARG}" ;;
|
||||||
|
*) printf "Invalid option: -%s\\n" "$OPTARG" && err ;;
|
||||||
|
esac done
|
||||||
|
|
||||||
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
|
file="$1"
|
||||||
|
|
||||||
|
[ ! -f "$file" ] && echo "Provide file to tag." && err
|
||||||
|
|
||||||
|
[ -z "$title" ] && echo "Enter a title." && read -r title
|
||||||
|
[ -z "$artist" ] && echo "Enter an artist." && read -r artist
|
||||||
|
[ -z "$album" ] && echo "Enter an album." && read -r album
|
||||||
|
[ -z "$track" ] && echo "Enter a track number." && read -r track
|
||||||
|
|
||||||
|
case "$file" in
|
||||||
|
*.ogg) echo "Title=$title
|
||||||
|
Artist=$artist
|
||||||
|
Album=$album
|
||||||
|
Track=$track
|
||||||
|
Total=$total
|
||||||
|
Date=$date
|
||||||
|
Genre=$genre
|
||||||
|
Comment=$comment" | vorbiscomment -w "$file" ;;
|
||||||
|
*.opus) echo "Title=$title
|
||||||
|
Artist=$artist
|
||||||
|
Album=$album
|
||||||
|
Track=$track
|
||||||
|
Total=$total
|
||||||
|
Date=$date
|
||||||
|
Genre=$genre
|
||||||
|
Comment=$comment" | opustags -i -S "$file" ;;
|
||||||
|
*.mp3) eyeD3 -Q --remove-all -a "$artist" -A "$album" -t "$title" -n "$track" -N "$total" -Y "$date" "$file" ;;
|
||||||
|
*) echo "File type not implemented yet." ;;
|
||||||
|
esac
|
Loading…
Reference in New Issue
Block a user