]> code.delx.au - transcoding/commitdiff
identify-disc support for bluray
authorJames Bunton <jamesbunton@delx.net.au>
Fri, 6 Mar 2015 16:19:03 +0000 (03:19 +1100)
committerJames Bunton <jamesbunton@delx.net.au>
Fri, 6 Mar 2015 16:19:03 +0000 (03:19 +1100)
identify-disc [new file with mode: 0755]
identify-disc-mpv [new file with mode: 0755]
identify-dvd [deleted file]

diff --git a/identify-disc b/identify-disc
new file mode 100755 (executable)
index 0000000..21eb9b6
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+if [ -z "$1" -o -z "$2" ]; then
+    echo "Usage: $0 --bluray-device|--dvd-device SOMEDIRECTORY"
+    exit 1
+fi
+
+device_param="$1"
+device_path="$2"
+if [ "$device_param" = "--bluray-device" ]; then
+    device_param="-bluray-device"
+    device_scheme="bluray"
+elif [ "$device_param" = "--dvd-device" ]; then
+    device_param="-dvd-device"
+    device_scheme="dvd"
+else
+    echo "Unknown device type: $device_param"
+    exit 1
+fi
+
+mplayer 2> /dev/null \
+    -quiet \
+    -ao null \
+    -vo null \
+    -frames 0 \
+    -identify \
+    "$device_param" "$device_path" \
+    "${device_scheme}://" | \
+    sed -e 's/ID_\(DVD\|BLURAY\)_TITLE_\([0-9]*\)*_LENGTH=\(.*\)$/\2   \3/;tx;d;:x' | \
+    sort -n
+
diff --git a/identify-disc-mpv b/identify-disc-mpv
new file mode 100755 (executable)
index 0000000..440e249
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/bash -e
+
+if [ -z "$1" -o -z "$2" ]; then
+    echo "Usage: $0 --bluray-device|--dvd-device SOMEDIRECTORY"
+    exit 1
+fi
+
+device_param="$1"
+device_path="$2"
+if [ "$device_param" = "--bluray-device" ]; then
+    device_scheme="bd"
+elif [ "$device_param" = "--dvd-device" ]; then
+    device_scheme="dvd"
+else
+    echo "Unknown device type: $device_param"
+    exit 1
+fi
+
+function mpv_wrap {
+    mpv 2> /dev/null \
+        --quiet \
+        --ao=null \
+        --vo=null \
+        --frames 1 \
+        --no-cache \
+        --no-config \
+        "$@"
+}
+
+function get_highest_title {
+    mpv_wrap \
+        "$device_param" "$device_path" "${device_scheme}://" \
+        --term-playing-msg='${disc-title-list}TITLE_LIST_END' \
+    | grep -B2 'TITLE_LIST_END' \
+    | head -n1 \
+    | cut -d':' -f1
+}
+
+function get_length {
+    mpv_wrap \
+        "$device_param" "$device_path" "${device_scheme}://${1}" \
+        --term-playing-msg='TITLE_LENGTH=${length}' \
+    | grep 'TITLE_LENGTH' \
+    | head -n1 \
+    | cut -d'=' -f2
+}
+
+highest_title="$(get_highest_title)"
+for title in $(seq 0 "$highest_title"); do
+    echo -n "$title "
+    get_length "$title"
+done
+
diff --git a/identify-dvd b/identify-dvd
deleted file mode 100755 (executable)
index 6e08663..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-if [ -z "$1" ]; then
-    echo "Usage: $0 dvd-device"
-    exit 1
-fi
-
-mplayer 2> /dev/null \
-    -quiet -ao null -vo null -frames 0 -identify -dvd-device "$1" dvd:// | \
-    grep 'ID_DVD_TITLE_[0-9]*_LENGTH' | \
-    sed -e 's/ID_DVD_TITLE_//' -e 's/_LENGTH=/  /' | \
-    sort -n
-