Stage 0: migrate pipeline scripts from /opt/sldl, scaffold repo
Moves all ~30 pipeline scripts, configs, and the vendored sldl binary into this repo (source /opt/sldl left untouched). Removes all docker exec/docker compose dependencies now that beets and sldl run in-process/as a subprocess of this container instead of via soulbeet/on-demand sldl containers. Replaces hardcoded host paths, Navidrome credentials, and Spotify credential sourcing with env-var-driven paths and shared credential loaders. Adds Dockerfile, entrypoint.sh, requirements.txt, docker-compose.snippet.yml, and the initial app DB schema.
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
# ${PIPELINE_DIR:-/app/pipeline}/lib/prep-audio.sh
|
||||
#
|
||||
# Shared helper sourced by run-playlist.sh and import-track.sh.
|
||||
# Pre-tags newly-arrived audio with ReplayGain (loudgain, track-mode) and
|
||||
# Liquidsoap autocue tags (cue_file from Moonbase59/autocue) before beets
|
||||
# ingests them, so AzuraCast sees fully-prepped files the moment they land
|
||||
# in /music.
|
||||
#
|
||||
# Usage: prep_audio <scan_dir> <log_file>
|
||||
# Returns: number of files processed (via stdout)
|
||||
|
||||
prep_audio() {
|
||||
local scan_dir="$1"
|
||||
local log="$2"
|
||||
|
||||
local files=()
|
||||
while IFS= read -r -d '' f; do
|
||||
files+=("$f")
|
||||
done < <(find "$scan_dir" -type f \
|
||||
\( -iname "*.flac" -o -iname "*.mp3" -o -iname "*.m4a" \
|
||||
-o -iname "*.ogg" -o -iname "*.opus" \) -print0)
|
||||
|
||||
if [[ ${#files[@]} -eq 0 ]]; then
|
||||
echo 0
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "[prep-audio] loudgain (track-mode RG, clip-safe) on ${#files[@]} file(s)" >>"$log"
|
||||
# -q quiet, -k lower track gain to avoid clipping >-1 dBFS,
|
||||
# -s e write extended ReplayGain2 + R128 tags, -I 4 ID3v2.4 for MP3.
|
||||
# No -a, so each file gets its own track gain (track-mode).
|
||||
if ! loudgain -q -k -s e -I 4 "${files[@]}" >>"$log" 2>&1; then
|
||||
echo "[prep-audio] loudgain returned non-zero (see log)" >>"$log"
|
||||
fi
|
||||
|
||||
echo "[prep-audio] cue_file (autocue liq_* tags) on ${#files[@]} file(s)" >>"$log"
|
||||
# -w write tags into file, -k true-peak clipping prevention.
|
||||
# Skips files that already have liq_cue_file=true (use -f to force).
|
||||
local failed=0
|
||||
for f in "${files[@]}"; do
|
||||
if ! cue_file -w -k "$f" >>"$log" 2>&1; then
|
||||
echo "[prep-audio] cue_file failed on $f" >>"$log"
|
||||
failed=$((failed + 1))
|
||||
fi
|
||||
done
|
||||
[[ $failed -gt 0 ]] && echo "[prep-audio] cue_file errors: $failed" >>"$log"
|
||||
|
||||
echo "${#files[@]}"
|
||||
}
|
||||
Reference in New Issue
Block a user