ipcam-merge.sh raw
1 #!/bin/bash
2 # Merge all *_condensed.mkv files into a rolling accumulator via stream copy
3 # Usage: ipcam-merge.sh [output.mkv]
4 # The accumulator file is prepended (oldest first), new condensed files appended in order
5 DIR="$(cd "$(dirname "$0")" && pwd)"
6 OUT="${1:-$DIR/ipcam/motion.mkv}"
7 TMP=$(mktemp -d)
8 trap "rm -rf $TMP" EXIT
9
10 # collect condensed files sorted by name (timestamp order)
11 CONDENSED=($(ls "$DIR"/ipcam/*_condensed.mkv 2>/dev/null | sort))
12
13 if [ ${#CONDENSED[@]} -eq 0 ]; then
14 echo "no condensed files to merge"
15 exit 0
16 fi
17
18 # build concat list: existing accumulator first, then new condensed files
19 if [ -f "$OUT" ]; then
20 echo "file '$OUT'" > "$TMP/concat.txt"
21 fi
22 for f in "${CONDENSED[@]}"; do
23 echo "file '$f'" >> "$TMP/concat.txt"
24 done
25
26 echo "merging ${#CONDENSED[@]} condensed files"
27
28 ffmpeg -y -loglevel error -f concat -safe 0 -i "$TMP/concat.txt" -c copy "$TMP/merged.mkv"
29 mv "$TMP/merged.mkv" "$OUT"
30
31 # remove merged condensed files
32 for f in "${CONDENSED[@]}"; do
33 rm "$f"
34 done
35
36 echo "wrote $OUT ($(du -h "$OUT" | cut -f1))"
37