diff --git a/burnSubs b/burnSubs index 40a27c2..39f9a20 100755 --- a/burnSubs +++ b/burnSubs @@ -5,8 +5,8 @@ set -o errexit ################################################################################ # burnSubs -# version 0.11.1 -#################3 +# version 0.11.2 +################# # Wishlist: # queue encodes # finish TODOs @@ -346,18 +346,29 @@ function selectSubs() { export SUBTITLE_INDEX=-1 else if [[ $OPTS_SELSUB -lt 0 && $SUB_COUNT -gt 1 ]]; then - OPTS_SELSUB_LANG="${OPTS_SELSUB_LANG:-eng}" - LANG_TEST=$($JQ '[.[].lang] | index("'${OPTS_SELSUB_LANG}'")' "$STREAMS_SUB") echo " > WARNING: Multiple subtitles!" printf " Using default selection rules... " - if [[ "$LANG_TEST" == "null" ]]; then + OPTS_SELSUB_LANG="${OPTS_SELSUB_LANG:-eng}" + LANG_TEST=$($JQ '[.[].lang | match("'${OPTS_SELSUB_LANG}'")] | length' "$STREAMS_SUB") + if [[ "$LANG_TEST" == "0" ]]; then echo "English not found!" echo " ==> Reverting to first subtitle file." export SUBTITLE_INDEX=$($JQ '.[0].i' "$STREAMS_SUB") - else + elif [[ "$LANG_TEST" == "1" ]]; then + LANG_SINGLE_SELECT=$($JQ '[.[].lang] | index("'${OPTS_SELSUB_LANG}'")' "$STREAMS_SUB") # we found english echo "English found" - export SUBTITLE_INDEX=$($JQ '.['$LANG_TEST'].i' "$STREAMS_SUB") + export SUBTITLE_INDEX=$($JQ '.['$LANG_SINGLE_SELECT'].i' "$STREAMS_SUB") + else + # try to avoid a signs and lyrics track + LANG_SINGLE_SELECT=$($JQ '[.[].lang] | index("'${OPTS_SELSUB_LANG}'")' "$STREAMS_SUB") + echo "Multiple english tracks found." + export SUBTITLE_INDEX=$($JQ 'reduce .[] as $trk ([]; if ($trk.lang == "'${OPTS_SELSUB_LANG}'" and ( ($trk.t | test("lyrics";"i") or ($trk.t | test("signs";"i")) ) | not ) ) then [.[],{t:$trk.t,i:$trk.i}] else . end) | .[].i' "$STREAMS_SUB") + # And display rejected subtitles too. + SUBTITLE_REJECT_LIST=($($JQ 'reduce .[] as $trk ([]; if ($trk.lang == "'${OPTS_SELSUB_LANG}'" and ( ($trk.t | test("lyrics";"i") or ($trk.t | test("signs";"i")) ) ) ) then [.[],{t:$trk.t,i:$trk.i}] else . end) | .[].t' "$STREAMS_SUB")) + for REJECT_SUB in ${SUBTITLE_REJECT_LIST[@]}; do + echo " > rejecting ${REJECT_SUB}" + done fi else if [[ $SUB_COUNT -eq 1 ]]; then @@ -379,12 +390,14 @@ function selectSubs() { printf " Using default selection rules... " if [[ "$LANG_TEST" == "null" ]]; then echo "Japanese audio not found!" - echo " ==> Reverting to first subtitle file." + echo " ==> Reverting to first audio stream." export AUDIO_INDEX=$($JQ '.[0].i' "$STREAMS_AUDIO") else # we found english echo "Japanese audio found" export AUDIO_INDEX=$($JQ '.['$LANG_TEST'].i' "$STREAMS_AUDIO") + AUDIO_STREAM_TITLE=$($JQ '.['$LANG_TEST'].t' "$STREAMS_AUDIO") + echo " ==> stream has title ${AUDIO_STREAM_TITLE}" fi else AUDIO_INDEX=$OPTS_SELAUDIO