Извлечение субтитров из файлов mkv

Проблема в том, что видеопланеры в Ubuntu имеют проблемы со встроенными центральными европейскими субтитрами. Решение состоит в их извлечении. Кто-нибудь знает, есть ли команда в терминале или программе для извлечения субтитров из файла mkv?

1
задан 10 June 2015 в 07:30

1 ответ

вы можете использовать mkvtoolnix.

sudo apt-get install mkvtoolnix

Еще один отзыв, потому что файлы mkv могут содержать много субтитров, поэтому подсказкой является этот скрипт, который вы можете найти для нужного вам языка, например, если вы

Сценарий:

#!/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
  done
done

Сохраните этот скрипт nameyouwant.sh и сделайте его исполняемым

Теперь в каталоге смены терминалов папку сценария и написать ./nameyouwant.sh /pathtosave

7
ответ дан 24 May 2018 в 09:05
  • 1
    Странно, это не сработало для одного видео, но, выполнив команды, указанные в принятом ответе, сработало. – Hunsu 1 November 2014 в 22:50
  • 2
    Спасибо за отличный скрипт. Не могли бы вы добавить объяснение, почему вы удаляете кредиты в конце субтитров? Эта часть скрипта не работает для меня и приводит к пустому файлу srt. – m000 18 January 2016 в 01:31
  • 3
    Этот ответ кажется взятым из computernerdfromhell.com . Причиной для снятия кредитов является: «Голландские субтитры имеют привычку вкладывать свои кредиты или крики в последние несколько строк субтитров. Ничего плохого в этом, кроме случаев, когда это происходит сразу после последней строки, произнесенной в фильме. Фильм может продолжаться еще 5 минут, я не хочу, чтобы aproaching end был отдан DaNoodleBrain, дающий крик-ауты BoogerGuzzler, поэтому я удаляю их с помощью другого простого регулярного выражения " – Dror S. 25 January 2016 в 19:16

Другие вопросы по тегам:

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