Jak dodawać i usuwać napisy w pliku MKV?

28

Mam plik MKV dobrej jakości, który ma kilka opcji napisów. Chcę dodać do listy dodatkowy plik z napisami. Używam OSX.

Niektóre wyszukiwania online skłoniły mnie do korzystania z konwerterów wideo i w zasadzie przekodowałem film do nowego pliku. Wydaje mi się to przesadą. Dodatkowo mogę stracić poprzednie napisy i trochę jakości obrazu po drodze.

nute
źródło

Odpowiedzi:

41

Usuwanie napisów:

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

Dodawanie napisów:

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

Wyodrębnianie napisów:

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 i mkvextract można zainstalować za pomocą brew install mkvtoolnix.

Lri
źródło
2
Interfejs GUI MKVMerge jest już dostępny w systemie Mac OS X, ale mimo to jest dobry dla fanów konsoli.
Bora,
Pamiętaj, że powyższe polecenia dodawania napisów ustawiają także napisy jako „domyślnie włączone” podczas odtwarzania pliku. (Tę flagę można potwierdzić za pomocą interfejsu GUI MKVMerge.) Aby tego uniknąć, użyj --default-track '0:0'.
Mathias Bynens
4

Istnieją dwa podstawowe sposoby wyświetlania napisów. Możesz zakodować piksele w samym filmie. Nazywa się to „hardsubbingiem”. Zaletą jest tutaj prostota odtwarzacza wideo, to tylko strumień wideo. Wady polegają na tym, że trzeba było ponownie kodować wideo, co wymaga czasu i ma utratę wierności. Jeśli dostaniesz lepsze tłumaczenie, cóż, w filmie są piksele. I możesz mieć tylko jeden język.

Nieco lepiej jest „softsubbing”, czyli mieć plik tekstowy w innym miejscu niż strumień wideo. Istnieje wiele różnych formatów plików napisów, ale u ich podstawy wszystkie mają „tekst, zacznij o której, usuń o której”. Niektóre mają dodatkowe funkcje, takie jak kolory i orientacja na ekranie. Zaletą tego jest to, że możesz mieć wiele języków (pomyśl o DVD, masz wiele dostępnych języków) i możesz naprawić literówki i takie w pliku. A jeśli nie potrzebujesz napisów, po prostu je wyłącz.

Softsubs mogą być osobnymi plikami - większość odtwarzaczy automatycznie szuka napisów o tej samej nazwie (inne rozszerzenie), co główny film. Lub niektóre formaty plików kontenerów (jak MKV) mogą mieć je osadzone w środku. Sprawdź MKVtoolnix (istnieje port mac) dla narzędzi do plików MKV. Powinno to umożliwić osadzanie plików Softsub bez ponownego kodowania.

Pamiętaj, że nie wszystkie odtwarzacze obsługują wszystkie formaty. Z mojego doświadczenia wynika, że ​​XBMC ma problemy z plikami SSA, ale znacznie prostsze pliki SRT są w porządku. VLC odtworzy wszystko, jeśli jest obsługiwane na twojej platformie.

Rich Homolka
źródło
1
Dobra odpowiedź, choć należy zauważyć, że niektóre napisy miękkie - zwłaszcza napisy DVD - są oparte na bitmapach, a nie na tekście. Głównym efektem jest to, że prawie niemożliwe jest ich edytowanie -_-
evilsoup
@evilsoup dzięki, nie wiedziałem o tym.
Rich Homolka
1
Tak, IDX + SUB VOBsub , gdzie IDX jest plikiem tekstowym, ale SUB zawiera mapy bitowe.
Karan
zmieniono link do strony bezpośredniego pobierania.
Bora
0

Zdaję sobie sprawę, że jest to stare pytanie i user495470odpowiedź została zaakceptowana od 2013 roku, ale ponieważ część pytania dotyczy dodawania napisów do plików, chciałem dodać ten nowy dodatek.

Zasadniczo musiałem scalić dziesiątki .assnapisów w pliki MKV o podobnych nazwach, więc wykonanie tej jednej komendy na raz nie było jej wycinaniem. Podszedłem więc do tego prostego skryptu Bash, który przeszuka bieżący katalog, z którego jest uruchamiany, w poszukiwaniu .assplików, a następnie scalę je zgodnie z oczekiwaniami.

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

Oczywiście ten prosty skrypt zakłada, że ​​podtytuły są w języku angielskim, i scala je jako takie, ale można je ręcznie dostosować w zależności od potrzeb; duży problem automatycznego łączenia napisów z MKV rozwiązuje prosty skrypt taki jak ten.

JakeGould
źródło