arnaucube
arnaucube/configsPublic Self-hosted repository
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