Como faço para extrair e renomear legendas .ass de vários arquivos MVK?

1

Eu tenho um BUNCH de arquivos mkv que eu quero tocar no meu player Blue-ray. No entanto, ele não lerá os subs, a menos que estejam fora do arquivo. Eu preciso de uma maneira de extrair e renomeá-los. Eu quero dar a eles o mesmo nome dos arquivos mkv de onde eles saíram para que meu player os leia. As legendas estão no formato .ass.

Eu vi um script flutuando que deveria fazer isso. Não funcionou.

Eu tenho o mkvExtractor e tudo o que foi instalado, mas tenho muitos arquivos para fazer tudo manualmente.

Este é o script que eu tentei.

#!/bin/bash
# Extract subtitles from each MKV file in the given directory

# If no directory is given, work in local dir
if [ "$1" = "" ]; then
  DIR="."
else
  DIR="$1"
fi

# Get all the MKV files in this dir and its subdirs
find "$DIR" -type f -name '*.mkv' | while read filename
do
  # Find out which tracks contain the subtitles
  mkvmerge -i "$filename" | grep 'subtitles' | while read subline
  do
    # Grep the number of the subtitle track
    tracknumber='echo $subline | egrep -o "[0-9]{1,2}" | head -1'

    # Get base name for subtitle
    subtitlename=${filename%.*}

    # Extract the track to a .tmp file
    'mkvextract tracks "$filename" $tracknumber:"$subtitlename.srt.tmp" > /dev/null 2>&1'
    'chmod g+rw "$subtitlename.srt.tmp"'


    # Do a super-primitive language guess: ENGLISH
    langtest='egrep -ic ' you | to | the ' "$subtitlename".srt.tmp'
    trimregex=""



    # Check if subtitle passes our language filter (10 or more matches)
    if [ $langtest -ge 10 ]; then
      # Regex to remove credits at the end of subtitles (read my reason why!)
      'sed 's/\r//g' < "$subtitlename.srt.tmp" \
        | sed 's/%/%%/g' \
        | awk '{if (a){printf("\t")};printf $0; a=1; } /^$/{print ""; a=0;}' \
        | grep -iv "$trimregex" \
        | sed 's/\t/\r\n/g' > "$subtitlename.srt"'
      'rm "$subtitlename.srt.tmp"'
      'chmod g+rw "$subtitlename.srt"'
    else
      # Not our desired language: add a number to the filename and keep anyway, just in case
      'mv "$subtitlename.srt.tmp" "$subtitlename.$tracknumber.srt" > /dev/null 2>&1'
    fi

Estou fazendo algo errado?

    
por GaleGrim 30.12.2014 / 18:23

0 respostas