Files
Server-scripts/quiethost/metadata_search_replace.sh
T
2026-09-14 09:20:47 +02:00

48 lines
1.1 KiB
Bash

#!/usr/bin/env bash
find . \( -iname '*.mp3' -o -iname '*.m4a' -o -iname '*.m4b' \) -print0 |
while IFS= read -r -d '' f; do
comment=$(ffprobe -v error \
-show_entries format_tags=comment \
-of default=nw=1:nk=1 \
-- "$f")
[[ $comment =~ ^[Rr]ead[[:space:]]+[Bb]y[[:space:]]+(.+) ]] || continue
composer="${BASH_REMATCH[1]}"
echo "Updating: $f"
echo " Composer: $composer"
dir=$(dirname -- "$f")
base=$(basename -- "$f")
ext="${base##*.}"
case "${ext,,}" in
mp3) format=mp3 ;;
m4a|m4b) format=ipod ;;
*) continue ;;
esac
tmp=$(mktemp -p "$dir" ".${base}.XXXXXX") || {
echo "Couldn't create temporary file in $dir" >&2
continue
}
if ffmpeg -nostdin -v error -y \
-i "$f" \
-map 0 \
-map_metadata 0 \
-c copy \
-metadata composer="$composer" \
-metadata comment= \
-f "$format" \
"$tmp"
then
mv -f -- "$tmp" "$f"
else
echo "FAILED: $f" >&2
rm -f -- "$tmp"
fi
done