Ich habe jetzt etwas weiter ausgeholt (immer noch nicht gerade perfekt, aber immerhin schon nützlich für mich):
Code:
#!/bin/bash
# fcw: 2021-10-09: siehe echo unten...
if [ "$1" == '?' ] || [ "$1" == '-?' ] || [ "$1" == '--help' ]
then
echo "
mp3sum.sh: summiert mit Hilfe von mp3info (muss natuerlich installiert sein) die Spieldauer aller mp3-Dateien in einem Ordner, siehe:
https://www.linuxforen.de/forums/showthread.php?282677-mp3info-Abspieldauer-aller-Tracks-eines-Ordners
Parameter: das zu durchsuchende Verzeichnis oder ?, -?, --help fuer diese Hilfe.
Ohne Parameter wird das aktuelle Verzeichnis durchsucht.
Aufruf zB mit:
find . -type d -name "*suchbegriff*" -exec mp3sum.sh {} \;
oder schon im richtigen Verzeichnis:
find . -type d -exec mp3sum.sh {} \;
oder in Ergebnis in eine Datei:
find . -type d -exec mp3sum.sh {} \; > ./_mp3sums.txt
"
exit 0
fi
if [ "$1" ]
then
cd "$1"
fi
if compgen -G "./*.mp3" > /dev/null; then
for file in ./*.mp3
do
len=$(mp3info -p %S "${file}")
if [ -n "$len" ]
then
((sum+=$len))
fi
done
hours=$((sum/3600))
minutes=$((sum%3600/60))
seconds=$((sum%60))
if [ $minutes -lt 10 ]
then
minutes="0$minutes"
fi
if [ $seconds -lt 10 ]
then
seconds="0$seconds"
fi
echo "$(pwd)"
echo "$hours:$minutes:$seconds (h:mm:ss)
"
# printf 'Dauer: %d:%d:%d (h:m:s)\n\n' $((sum/3600)) $((sum%3600/60)) $((sum%60))
else
echo "
Keine mp3-Dateien im Verzeichnis $1
"
fi
Noch immer ziemlich roh, der Bau, aber wie gesagt, schon nützlich.
Der h:m:s Anzeige fehlt noch die führende Null bei Zahlen unter 10 (EDIT: Korrigiert).
Der Aufruf mit find usw. ist noch sehr unentwickelt, das könnte ich mit Parametern abwickeln.
Aber ich ruf es jetzt für das gesamte Hörbuchverzeichnis auf (mit tmux im Hintergrund), schreib die ganzen Hörbuchzeiten in eine Textdatei (also mit: find . -type d -exec mp3sum.sh {} \; > ./_mp3sums.txt) und aus der les ich es bei Bedarf dann aus.
EDIT 2021-10-13: dann habe ich noch zudem ein Skript mp3len.sh gemacht, also das mp3sum etwas umgebaut, damit ich in einem Verzeichnis alle mp3-Dateien auf einmal messen kann (Anwendungsfall: in einem Verzeichnis verschiedene Hörbücher, zB Märchen mit je nur einer MP3-Datei):
Code:
#!/bin/bash
# fcw: 2021-10-11: siehe echo unten...
if [ "$1" == '?' ] || [ "$1" == '-?' ] || [ "$1" == '--help' ]
then
echo "
mp3len.sh: gibt mit Hilfe von mp3info die Spieldauer von mp3-Dateien in einem Ordner aus.
Parameter: das zu durchsuchende Verzeichnis oder ?, -?, --help fuer diese Hilfe.
Ohne Parameter wird das aktuelle Verzeichnis durchsucht.
Aufruf zB mit:
find . -type d -name "*suchbegriff*" -exec mp3len.sh {} \;
oder schon im richtigen Verzeichnis:
find . -type d -exec mp3len.sh {} \;
oder in Ergebnis in eine Datei:
find . -type d -exec mp3len.sh {} \; > ./_mp3lenght.txt
"
exit 0
fi
if [ "$1" ]
then
cd "$1"
fi
if compgen -G "./*.mp3" > /dev/null; then
for file in ./*.mp3
do
len=$(mp3info -p %S "${file}")
if [ -n "$len" ]
then
# echo "${file}"
hours=$((len/3600))
minutes=$((len%3600/60))
seconds=$((len%60))
if [ $minutes -lt 10 ]
then
minutes="0$minutes"
fi
if [ $seconds -lt 10 ]
then
seconds="0$seconds"
fi
echo "$hours:$minutes:$seconds (h:mm:ss) - ${file}
"
# printf "Dauer: %d:%d:%d (h:m:s)\n\n" $((len/3600)) $((len%3600/60)) $((len%60))
fi
done
else
echo "
Keine mp3-Dateien im Verzeichnis $1
"
fi
Weiter werde ich es wohl aber nicht mehr filigranisieren, ich hab schon die ganzen Kinderhörbücher (nur dafür brauche ich es) durch gescannt mit den Skripts und in den Ordnern Textdateien mit den Längen erstellt, das reicht dann wohl auch.
Lesezeichen