From df1f8f488994dcedc656ee1eae2f2f87f258cff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Sat, 8 Oct 2022 00:30:24 +0200 Subject: [PATCH] strip_track_except: improve detect if more than 1 track is present detect if undesired tracks are present show progress bar using pv --- strip_track_except.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/strip_track_except.sh b/strip_track_except.sh index 24f764f..539b0e3 100755 --- a/strip_track_except.sh +++ b/strip_track_except.sh @@ -10,5 +10,15 @@ FILENAME=$1 LANGUAGE_TO_KEEP="${2:-jpn}" echo -n "Processing " colorprint "$FILENAME" + +# capture JSON output and remove the excessively large code_private_data field +JSON_OUTPUT=$(mkvmerge -J "$FILENAME" | jq '[ .tracks[] | select(.type=="audio") | del(.properties.codec_private_data) ]') +TRACK_COUNT=$(echo "$JSON_OUTPUT" | jq length) +# check if more than 1 audio track is present +[[ $TRACK_COUNT -lt 2 ]] && echo -e "\tFile has only 1 track, skipping." && exit 1 +# check if tracks other than the one to keep are present +UNDESIRED_TRACK_COUNT=$(echo "$JSON_OUTPUT" | jq '[.[] | select(.properties.language!="$LANGUAGE_TO_KEEP")] | length') +[[ $TRACK_COUNT -lt 2 ]] && echo -e "\tFile has only '$LANGUAGE_TO_KEEP' tracks, skipping." && exit 1 FILENAME_WITHOUT_EXT=${FILENAME%.*} -ffmpeg -i "$FILENAME" -map 0:v -map 0:a:m:language:${LANGUAGE_TO_KEEP} -map 0:s -c copy "${FILENAME_WITHOUT_EXT}.converted.mkv" +echo -e "\tRemoving all audio tracks except '$LANGUAGE_TO_KEEP' tracks..." +pv "$FILENAME" | ffmpeg -i pipe:0 -map 0:v -map 0:a:m:language:${LANGUAGE_TO_KEEP} -map 0:s -c copy -v warning "${FILENAME_WITHOUT_EXT}.converted.mkv"