73 lines
2.2 KiB
YAML
73 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
|