k3s/services/droppedneedle/droppedneedle-transcode.yaml

72 lines
2.2 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: droppedneedle-transcoder-script
namespace: default
data:
transcode.sh: |
#!/bin/bash
WATCH_DIR="/yarr/media/music"
echo "Starting transcoder watch on $WATCH_DIR..."
# Listen for files moved into the directory (atomic renames) and direct writes
inotifywait -m -r -e moved_to,close_write --format '%w%f' "$WATCH_DIR" | while read FILE
do
# Case-insensitive check for .flac extension
if [[ "${FILE,,}" == *.flac ]]; then
echo "Detected new FLAC via import: $FILE"
OPUS_FILE="${FILE%.*}.opus"
# Transcode (preserves tags natively in newer ffmpeg versions)
ffmpeg -y -i "$FILE" -acodec libopus -ac 2 -ab 160k "$OPUS_FILE"
if [ $? -eq 0 ]; then
echo "Transcode successful. Removing original FLAC..."
rm "$FILE"
echo "Triggering DroppedNeedle library scan..."
# Calls the DroppedNeedle service using internal Kubernetes DNS
curl -X POST http://droppedneedle.default.svc.cluster.local:8688/api/v1/library/scan/start
else
echo "Error: FFmpeg transcode failed for $FILE"
fi
fi
done
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: droppedneedle-transcoder
name: droppedneedle-transcoder
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: droppedneedle-transcoder
template:
metadata:
labels:
app: droppedneedle-transcoder
spec:
containers:
- name: transcoder
image: alpine:latest
command: ["/bin/sh", "-c"]
args:
- "apk add --no-cache bash inotify-tools ffmpeg curl && bash /scripts/transcode.sh"
volumeMounts:
- mountPath: /yarr
name: yarr
- mountPath: /scripts
name: script-volume
restartPolicy: Always
volumes:
- name: yarr
nfs:
server: robin.home.nest
path: /yarr
- name: script-volume
configMap:
name: droppedneedle-transcoder-script