Ich hab mit mal ein bash script gehäkelt das MP3s aus Einzeltracks zusammenfasst und nach 128 CBR konvertiert und halt wnen vorhanden aus den Einzeltracks das Cover extrahiert und später wieder einrechnet (per ffmpeg)
Das tut alles wie gewünscht - aber ich habe eine Sache die mich irgendwie nervt
und ich mit so nem dirty fix behebe... ich wüsste aber gern warum....
der Teil des Scriptes das definitiv den Fehler hat
wie man sieht muss ich $safe_file um ein führendes "/" ergänzen - das ist aber NUR dann 1x fällig nachdem vorher if [ -z "$COVER_IMAGE" ]; then
durchlaufen wurde - sonst nie und auch nur bei der einen Datei direkt dahinter....
irgendwie sehe ich nicht wo $file verändert werden würde?
Das tut alles wie gewünscht - aber ich habe eine Sache die mich irgendwie nervt

der Teil des Scriptes das definitiv den Fehler hat
wie man sieht muss ich $safe_file um ein führendes "/" ergänzen - das ist aber NUR dann 1x fällig nachdem vorher if [ -z "$COVER_IMAGE" ]; then
durchlaufen wurde - sonst nie und auch nur bei der einen Datei direkt dahinter....
irgendwie sehe ich nicht wo $file verändert werden würde?
Code:
while IFS= read -r -d '' file; do
# ersetze ' durch _ im Namen wegen ffmpeg
safe_file=$(echo "$file" | sed "s/['\"]/_/g")
if [ "$file" != "$safe_file" ]; then
mv "$file" "$safe_file"
fi
if $ALL_128_CBR; then
# auf 128 KBit testen
BITRATE=$(ffprobe -v error -select_streams a:0 -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "$safe_file")
BITRATE=$((BITRATE / 1000))
# auf vbr testen
VBR_DETECTED=$(ffprobe -v error -select_streams a:0 -show_entries format_tags=encoder -of default=noprint_wrappers=1:nokey=1 "$safe_file" | grep -i "VBR")
# teste ob evtl alle Dateien schon 128 CBR sind - dann nur zusammenfuegen, sonst reencoden
if [ "$BITRATE" -ne 128 ] || [ -n "$VBR_DETECTED" ]; then
ALL_128_CBR=false
MYTEMPNAME="$(basename "${safe_file}")"
echo "* Datei hat andere Bitrate ${BITRATE} kb/s (Dateiname: ${MYTEMPNAME})"
fi
fi
if [[ $safe_file != /* ]]; then
safe_file="/$safe_file"
echo "* der Pfad von $safe_file musste angepasst werden :O :O ???? Voll der Pfusch"
fi
if [ ! -f "$safe_file" ]; then
echo "* Fehler Datei nicht vorhanden: $safe_file"
echo ""
echo ""
echo "ABBRUCH"
echo ""
echo ""
exit 3
fi
echo "file '$safe_file'" >> "$TEMP_LIST"
if [ -z "$COVER_IMAGE" ]; then
#teste ob ein Bild integriert ist wenn ja das nutzen
VIDEO_PRESENT=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_type -of csv=p=0 "$safe_file")
if [ "$VIDEO_PRESENT" = "video" ]; then
if ! [ -f "${INPUT_DIR}/${TEMPIMAGEFILE}" ]; then
ffmpeg -y -i "$safe_file" -map 0:v:0 -c copy "${INPUT_DIR}/${TEMPIMAGEFILE}"
if [ -f "${INPUT_DIR}/${TEMPIMAGEFILE}" ]; then
COVER_IMAGE="${INPUT_DIR}/${TEMPIMAGEFILE}"
echo "* Coverbild gefunden benutze das"
fi
fi
fi
fi
done < <(find "$INPUT_DIR" -maxdepth 1 -type f -name "*.mp3" -print0 | sort -z)
Zuletzt bearbeitet: