#!/bin/sh # Dependencies: # castnow-git # mkvtoolnix-cli # jq FILE_NAME="$1" TRACKS="$(mkvmerge -J "$FILE_NAME" | jq -c ' .tracks[] | select(.type == "subtitles") | { id:.id, codec_id:.properties.codec_id, language:.properties.language, track_name:.properties.track_name }')" if [ -n "$2" ]; then SELECTION=$2 else echo "$TRACKS" echo -n "Choose a subtitle ID: " read -r SELECTION fi if [ -z "$(echo $SELECTION | sed -nr 's/^([0-9]+)$/\1/p')" ]; then echo "Please select a number" exit fi for TRACK in $TRACKS; do TRACK_ID=$(echo $TRACK | sed -nr 's/.*"id":([0-9]+),.*/\1/p') if [ $TRACK_ID != $SELECTION ]; then continue fi CODEC_ID="$(echo $TRACK | \ sed -nr 's/.*"codec_id":"(S_[A-Z]+\/?[A-Z]*[0-9]*)",.*/\1/p')" if [ "$CODEC_ID" = "S_TEXT/UTF8" ]; then EXT="srt" elif [ "$CODEC_ID" = "S_TEXT/ASS" ]; then EXT="ssa" elif [ "$CODEC_ID" = "S_TEXT/USF" ]; then EXT="usf" elif [ "$CODEC_ID" = "S_VOBSUB" ]; then EXT="sub" elif [ "$CODEC_ID" = "S_HDMV/PGS" ]; then EXT="sup" fi echo "Extracting subtitle.." mkvextract tracks "$FILE_NAME" $TRACK_ID:/tmp/sub."$EXT" 2>&1 >/dev/null echo "Converting subtitle.." ffmpeg -y -i /tmp/sub."$EXT" /tmp/sub.vtt 2>/dev/null echo "Playing file.." castnow "$FILE_NAME" --subtitles /tmp/sub.vtt --subtitle-scale 1.2 --subtitle-color FFFFFFFF done