Извлечь субтитры из файлов MKV

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

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

2 ответа

Установка mkvtoolnix с sudo apt-get install mkvtoolnix.

Выполнение от терминала: mkvextract tracks <your_mkv_video> <track_numer>:<subtitle_file.srt>

Использование mkvinfo для получения информации о дорожках.

Используя эту утилиту можно извлечь любую дорожку, даже аудио или видео.

0
ответ дан 10 June 2015 в 07:30

можно использовать 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

8
ответ дан 10 June 2015 в 07:30

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

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