Como remover formatos arbitrários de legendas do mkv com um loop de shell

0

Eu fiz este script para remover todos os subs de todos os arquivos mkv em um determinado caminho. Funciona bem. Mas agora eu quero apenas remover as legendas do PGS e manter todos os arquivos SRT, não importando o idioma.

for file in "$@"*mkv; do
    mkvmerge -o "${file%.mkv}".nosubs.mkv --no-subtitles "$file"
done

Bônus: Como manter todos os arquivos SRT de um idioma arbitrário.

    
por Freedo 18.12.2017 / 06:49

1 resposta

2

Analise a saída de mkvmerge -I para obter os IDs de faixas desejados e passe o resultado como uma lista separada por vírgulas com a opção --subtitle-tracks ( -s ).

Para selecionar somente legendas SRT usando sed :

for file in "$@"*.mkv; do
    subs=$(mkvmerge -I "$file" | sed -ne '/^Track ID [0-9]*: subtitles (SubRip\/SRT).*/ { s/^[^0-9]*\([0-9]*\):.*//;H }; $ { g;s/[^0-9]/,/g;s/^,//;p }')
    if [[ -n $subs ]]; then subs="-s $subs"; else subs=-S; fi
    mkvmerge $subs -o "${file%.mkv}".srt-only.mkv "$file"
done

Da mesma forma, para selecionar apenas SRT em inglês:

for file in "$@"*.mkv; do
    subs=$(mkvmerge -I "$file" | sed -ne '/^Track ID [0-9]*: subtitles (SubRip\/SRT).* language:eng.*/ { s/^[^0-9]*\([0-9]*\):.*//;H }; $ { g;s/[^0-9]/,/g;s/^,//;p }')
    if [[ -n $subs ]]; then subs="-s $subs"; else subs=-S; fi
    mkvmerge $subs -o "${file%.mkv}".eng-srt-only.mkv "$file"
done

Altere language:eng para selecionar outro idioma.

    
por 18.12.2017 / 10:27