Как добавить и удалить субтитры в файле MKV?


27

У меня есть MKV-файл хорошего качества с несколькими вариантами субтитров. Я хочу добавить дополнительный файл субтитров в список. Я использую OSX.

Некоторые поиски в Интернете привели меня к использованию видео конвертеров, и в основном перекодировать фильм в новый файл. Это кажется мне излишним. Плюс я могу потерять предыдущие субтитры и немного качества изображения по пути.

Ответы:


39

Удаление субтитров:

mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks
mkvmerge -o output.mkv input.mkv -s 3,4 # remove tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # remove all subtitle tracks except 3
mkvmerge -i input.mkv # show track numbers

Добавление субтитров:

mkvmerge -o output.mkv input.mkv subs.srt
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt

Извлечение субтитров:

mkvextract tracks input.mkv 3:subs.srt
for f in *.mkv; do
  sub=$(mkvmerge -i "$f" | awk '$4=="subtitles"{print;exit}')
  [[ $sub ]] || continue
  [[ $sub =~ S_TEXT/ASS ]] && ext=ass || ext=srt
  track=$(awk -F '[ :]' '{print $3}' <<< "$sub")
  mkvextract tracks "$f" "$track:${f%mkv}$ext"
done

mkvmerge и mkvextract могут быть установлены с brew install mkvtoolnix.


2
Графический интерфейс MKVMerge уже доступен в Mac OS X, но, тем не менее, это хороший способ для любителей консоли.
Бора

Обратите внимание, что вышеупомянутые команды для добавления субтитров также устанавливают субтитры как «включенные по умолчанию» при воспроизведении файла. (Этот флаг можно подтвердить с помощью графического интерфейса MKVMerge.) Чтобы избежать этого, используйте --default-track '0:0'.
Матиас Биненс

4

Есть два основных способа показа субтитров. Вы можете кодировать пиксели в самом видео. Это называется "хардсаббинг". Преимущество здесь в простоте для видеоплеера, это просто видеопоток. Недостатки в том, что вам пришлось перекодировать видео, что занимает много времени и приводит к некоторой потере точности. Если вы получите лучший перевод, ну это пиксели в видео. И вы можете иметь только один язык.

Что несколько лучше, так это «мягкая субтитровка», которая должна иметь текстовый файл где-то отдельно от видеопотока. Существует множество различных форматов файлов субтитров, но в основе их всех лежит «текст, в какое время начинать, в какое время удалять» в своей основе. Некоторые из них имеют дополнительные функции, такие как цвета и ориентация на экране. Преимущество этого в том, что у вас может быть несколько языков (например, DVD, у вас есть несколько доступных языков), и вы можете исправить опечатки и тому подобное в файле. И если вам не нужны субтитры, просто выключите их.

Софтсубы могут быть как отдельными файлами - большинство игроков будут автоматически искать субтитры с тем же именем (с другим расширением), что и основное видео. Или определенные форматы контейнерных файлов (например, MKV) могут включать их в себя. Проверьте MKVtoolnix (есть порт Mac) для файловых инструментов MKV. Это должно позволить вам встраивать softtsubs без перекодирования.

Обратите внимание, что не все плееры могут поддерживать все форматы. Мой опыт показывает, что у XBMC есть проблемы с файлами SSA, но намного проще файлы SRT. VLC будет проигрывать что угодно, если это поддерживается на вашей платформе.


1
Хороший ответ, хотя следует отметить, что некоторые программные субтитры, особенно DVD-субтитры, основаны на растровых изображениях, а не на текстовых. Основной эффект, который делает их почти невозможными для редактирования -_-
evilsoup

@evilsoup спасибо, не знал этого.
Богатая гомолка

1
Да, IDX + SUB VOBsub , где IDX - текстовый файл, но SUB содержит растровые изображения.
Каран

изменил ссылку на страницу прямой загрузки.
Бора

0

Я понимаю, что это старый вопрос, и user495470ответ был принят с 2013 года, но поскольку часть вопроса касается добавления субтитров к файлам, я хотел добавить это новое дополнение.

По сути, мне нужно было объединить десятки .assсубтитров в файлы MKV с одинаковыми именами, поэтому выполнение этой команды за раз не обрезало ее. Поэтому я создал этот простой Bash-скрипт, который будет искать в текущем каталоге, из которого он запущен, .assфайлы, а затем объединять их, как и ожидалось.

find -E . -maxdepth 1 -type f -iregex '.*\.(ASS|SRT)$' |\
  while read FILEPATH
  do
    DIRNAME=$(dirname "${FILEPATH}");
    BASENAME=$(basename "${FILEPATH}");
    FILENAME="${BASENAME%.*}";
    EXTENSION="${BASENAME##*.}"
    mkvmerge -o "/Users/jake/${FILENAME}"-NEW.mkv "${FILENAME}".mp4 --language 0:eng --track-name 0:English "${FILENAME}"."${EXTENSION}"
  done

Конечно, этот простой сценарий предполагает, что субтитры являются английскими, и объединяет их как таковые, но это можно настроить вручную в соответствии с потребностями использования; большая проблема автоматического слияния субтитров с MKV решается простым скриптом, подобным этому.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.