Как удалить произвольные форматы субтитров из mkv с помощью цикла оболочки

Вы можете использовать eval , чтобы попробовать синтаксис массива:

is_array_support() (
  eval 'a=(1)'
) >/dev/null 2>&1

if is_array_support; then
  echo support
else
  echo not
fi
1
18.12.2017, 13:25
1 ответ

Параметр -Iв mkvmergeбыл удален и заменен параметром -J, который выводит JSON. Вот сценарий lumato , адаптированный для использования с (требует установки jq, см. эту ссылку для получения инструкций по установке ОС)

#!/bin/bash
# If no directory is given, work in local dir
if [ -d "$1" ] || [ -f "$1" ]; then
  DIR="$1"
else
  echo "No target path given, using working directory '$(pwd)'"
  DIR="." 
fi

# Get all the MKV files in this dir and its subdirs
find "$DIR" -type f -name '*.mkv' | while read filename
do
    subs=$(mkvmerge -J "$filename" | jq -r '.tracks[] | select(.type=="subtitles") | select(.properties.language=="eng").id' | sed 'N;s/\n/,/') 
    if [[ -n $subs ]]
    then
         subs="-s $subs"
    else
        subs=-S
    fi
    echo -e "Extracting tracks \e[1m\e[34m${subs#* }\e[0m from \e[1m\e[34m${filename}\e[0m..."
    mkvmerge $subs -o "${filename%.mkv}".eng-srt-only.mkv "$filename" > /dev/null 2>&1
done
1
27.01.2020, 23:18

Теги

Похожие вопросы