Вопрос или проблема
У меня есть файл MKV хорошего качества с несколькими опциями субтитров. Я хочу добавить дополнительный файл субтитров в этот список. Я использую OSX.
Некоторые поиски в интернете привели меня к необходимости использовать видеоконвертеры и, по сути, перекодировать фильм в новый файл. Это кажется мне чрезмерным. Плюс ко всему, я могу потерять предыдущие субтитры и немного качества изображения в процессе.
Удаление субтитров:
mkvmerge -o output.mkv -S input.mkv # удалить все дорожки субтитров, обратите внимание на заглавную S перед input.mkv
mkvmerge -o output.mkv input.mkv -s 3,4 # включить только дорожки субтитров 3 и 4
mkvmerge -o output.mkv input.mkv -s '!3' # включить все дорожки субтитров, кроме 3
mkvmerge -i input.mkv # показать номера дорожек
Добавление субтитров:
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
.
Существует два основных способа отображения субтитров. Вы можете закодировать пиксели в само видео. Это называется “жесткими субтитрами”. Преимущество здесь заключается в простоте для видеоплеера, это просто видеопоток. Недостатки заключаются в том, что вам пришлось перекодировать видео, что занимает время и приводит к некоторой потере качества. Если вы получите лучший перевод, ну что ж, это пиксели в видео. И вы можете иметь только один язык.
Что-то лучше – это “мягкие субтитры”, что означает наличие текстового файла где-то, отдельно от видеопотока. Существует много различных форматов файлов субтитров, но в своей основе они все содержат “текст, время начала, время удаления”. Некоторые имеют дополнительные функции, такие как цвета и ориентация на экране. Преимущество этого метода заключается в том, что вы можете иметь несколько языков (подумайте о DVD, на котором доступны несколько языков) и можете исправлять опечатки и подобные вещи в файле. А если вам не нужны субтитры, просто отключите их.
Мягкие субтитры могут быть либо отдельными файлами – большинство плееров автоматически ищут субтитры с тем же именем (другим расширением), что и основное видео. Или определенные форматы контейнерных файлов (например, MKV) могут иметь их встроенными. Ознакомьтесь с MKVtoolnix (существует версия для Mac) для инструментов работы с файлами MKV. Это должно позволить вам встроить мягкие субтитры без перекодирования.
Обратите внимание, что не все плееры могут поддерживать все форматы. Мой опыт показывает, что XBMC имеет проблемы с файлами SSA, но гораздо более простые файлы SRT в порядке. VLC воспроизведет что угодно, если это поддерживается на вашей платформе.
Я понимаю, что это старый вопрос и ответ 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 решается с помощью простого скрипта, как этот.
Ответ или решение
Как добавить и удалить субтитры в MKV файл на MacOS
Введение
Работа с видеофайлами формата MKV становится проще благодаря возможности настроить субтитры. В этой статье мы рассмотрим, как эффективно добавить и удалить субтитры в MKV файл без необходимости повторного кодирования, что может привести к потере качества видео и лишней трате времени. Мы будем использовать инструменты из пакета MKVtoolnix, который можно установить через Homebrew на вашем MacOS.
Установка MKVtoolnix
Для начала вам потребуется установить MKVtoolnix, который включает полезные утилиты для работы с MKV файлами:
brew install mkvtoolnix
Добавление субтитров
-
Подготовьте файл субтитров. Убедитесь, что у вас есть файл с субтитрами в популярном формате, таком как
.srt
или.ass
. -
Скомбинируйте субтитры с MKV файлом. Используйте следующую команду для добавления субтитров:
mkvmerge -o output.mkv input.mkv subs.srt
Здесь output.mkv
— это выходной файл, который будет содержать оригинальное видео с добавленными субтитрами.
- Установка языка и названия субтитров. Если вы хотите назначить язык и дать имя субтитрам, используйте следующую команду:
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt
Здесь 0:ger
указывает на язык (в данном случае немецкий), а 0:German
— имя дорожки.
Удаление субтитров
- Просмотр списка дорожек. Прежде чем удалять субтитры, рекомендуется сначала просмотреть всю информацию о дорожках в MKV файле:
mkvmerge -i input.mkv
Это позволит вам узнать номера дорожек, которые хотите удалить.
- Удаление всех субтитров. Для удаления всех дорожек субтитров, используйте:
mkvmerge -o output.mkv -S input.mkv
При этом -S
отвечает за исключение всех дородок субтитров из выходного файла.
- Удаление конкретных субтитров. Если вы хотите удалить только определенные субтитры, воспользуйтесь следующей командой:
mkvmerge -o output.mkv input.mkv -s '!3'
В этом примере мы оставляем все дорожки, кроме третьей.
Скрипт для пакетной обработки
Если вам нужно объединить большое количество файлов с субтитрами, можно воспользоваться простым Bash скриптом. Он автоматически найдет файлы .ass
и объединит их с соответствующими MKV файлами:
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 файлы.
Заключение
Используя MKVtoolnix и команды, описанные выше, вы можете легко добавлять и удалять субтитры в файлах MKV на MacOS без потери качества видео. Это позволяет настраивать ваш опыт просмотра и упрощает работу с многоязычными медиафайлами. Не забудьте протестировать свои файлы на различных медиаплеерах, чтобы убедиться в корректности отображения субтитров.