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.

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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.