configs/server-dockers/parse-blueray
server-dockers/parse-bluerayRaw
1#!/usr/bin/env bash
2
3# Utility to get the .mkv out of .rar/blueray files from the current directory
4# and subdirectories.
5
6set -Eeuo pipefail
7shopt -s nullglob
8
9OUT="${OUT:-$PWD}"
10echo "output: $OUT"
11
12pick_rar() {
13 # prefer part01, else any .rar, else .r00
14 for p in *.[Pp][Aa][Rr][Tt]01.[Rr][Aa][Rr] *.[Pp][Aa][Rr][Tt]001.[Rr][Aa][Rr]; do [[ -f "$p" ]] && { echo "$p"; return; }; done
15 for r in *.[Rr][Aa][Rr]; do [[ -f "$r" ]] && { echo "$r"; return; }; done
16 for r in *.[Rr]00; do [[ -f "$r" ]] && { echo "$r"; return; }; done
17 return 1
18}
19
20pick_video() {
21 find "$1" -type f \
22 \( -iname '*.mkv' -o -iname '*.mp4' -o -iname '*.avi' -o -iname '*.m2ts' \) \
23 ! -iname '*sample*' \
24 -printf '%s\t%p\n' 2>/dev/null \
25 | sort -nr | head -n1 | cut -f2-
26}
27
28process_dir() {
29 local dir="$1"
30 echo "==> $dir"
31 pushd "$dir" >/dev/null
32
33 local rar
34 if ! rar="$(pick_rar)"; then
35 echo " no rar found, skipping"
36 popd >/dev/null
37 return
38 fi
39
40 local base out tmp video
41 base="$(basename "$(pwd)")"
42 out="$OUT/${base}.mkv"
43
44 tmp="$(mktemp -d)"
45 trap 'rm -rf "$tmp"' RETURN
46
47 unrar x -o+ -idq "$rar" "$tmp/" || { echo " extract failed"; popd >/dev/null; return; }
48
49 video="$(pick_video "$tmp")"
50 [[ -n "${video:-}" ]] || { echo " no video found"; popd >/dev/null; return; }
51
52 echo " muxing -> $out"
53 mkvmerge -o "$out" "$video"
54
55 popd >/dev/null
56}
57
58for d in . */; do
59 [[ -d "$d" ]] || continue
60 process_dir "$d"
61done