Dies ist das Skript, das ich jetzt verwende:
#!/bin/bash echo "checking $1" find "$1" -name "*.mp3" | while read filename; do echo "checking $(basename "$filename")" ffmpeg_dur=$(ffmpeg -i "$filename" 2>&1 | awk -F: '($1 ~ /Duration/) ' | bc) # mp3_check_dur=$(mp3_check -a "$filename" 2>&1 | awk -F'[ :.]+' '($1 ~ /SONG_LENGTH/) ' | bc ) mp3info_dur=$(mp3info -x "$filename" 2>&1 | awk -F'[ :.]+' '($1 ~ /Length/) ' | bc ) if [[ -z $ffmpeg_dur ]] ; then # some files are so broken that ffmpeg doesn't print a length echo "ERROR (ffmpeg): $filename" else len_diff=$(( $ffmpeg_dur - $mp3_check_dur )) if [[ $len_diff -gt 0 ]] ; then echo -e "ERROR (length): $filename\t$" fi fi done
Die angegebene Dauer ffmpeg
ist immer länger als die von mp3_check
und mp3info
. Manchmal gibt es auch einen Unterschied von 1 Sekunde. mp3info
ist als Paket für einige Linux-Distributionen (Ubuntu, Arch, ...?) verfügbar und mp3_check
muss aus dem Quellcode erstellt werden.