Як додати та видалити субтитри у файлі MKV?


28

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

Деякий пошук в Інтернеті змусив мене використовувати відеоперетворювачі, і в основному перекодувати фільм у новий файл. Це здається мені справді надмірним. Крім того, я можу втратити попередні субтитри та деяку якість зображення.

Відповіді:


41

Видалення субтитрів:

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

Є два основні способи показу субтитрів. Ви можете кодувати пікселі у самому відео. Це називається «гартування». Перевага тут - простота для відеоплеєра, це просто відеопотік. Недоліки полягають у тому, що вам довелося перекодувати відео, що вимагає часу та має певну втрату вірності. Якщо ви отримаєте кращий переклад, ну, це пікселі у відео. І ти можеш мати лише одну мову.

Дещо краще - "softsubbing", який полягає в тому, щоб текстовий файл був десь окремо від відеопотоку. Існує безліч різних форматів файлів субтитрів, але в їх основі лежить «текст, початок, який час, видалення часу». Деякі мають додаткові функції, такі як кольори та орієнтація на екрані. Перевагою цього є те, що ви можете мати кілька мов (придумайте DVD, у вас є кілька мов), і ви можете виправити помилки в помилку. І якщо вам не потрібні субтитри, ви просто вимкніть їх.

Softsubs можуть бути окремими файлами - більшість гравців автоматично шукатимуть субтитри з тим же найменуванням (різним розширенням), що і основне відео. Або певні формати файлів контейнерів (наприклад, MKV) можуть містити їх всередині. Ознайомтеся з MKVtoolnix (є порт Mac) для файлових інструментів MKV. Це дозволить вам вставляти softsubs без повторного кодування.

Зауважте, що не всі гравці можуть підтримувати всі формати. Мій досвід полягає в тому, що XBMC має проблеми з файлами SSA, але набагато простіші файли СТО добре. 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.