Wróć do bloga

Jak dodać napisy do MKV i MP4 bez ponownego kodowania

Dodaj napisy do MKV i MP4 bez ponownego kodowania: MKVToolNix i FFmpeg, wiele języków w jednym pliku, flagi domyślna i wymuszona oraz dlaczego ścieżki znikają.

3 października 2026
Sablate Team

Żeby dodać napisy do MKV bez ponownego kodowania, muxujesz je jako osobną ścieżkę: MKVToolNix robi to z poziomu GUI, FFmpeg jedną komendą, a oba kopiują wideo bez zmian w mniej więcej takim czasie, jaki zajmuje skopiowanie pliku. MP4 też potrafi nieść ścieżki napisów, ale tylko jako zwykły tekst.

Poniżej: oba narzędzia krok po kroku, kilka języków w jednym pliku z poprawnymi tagami języka, co flagi domyślna i wymuszona zmieniają dla widza oraz typowe powody, dla których zmuxowana ścieżka nigdy się nie pokazuje.

Dlaczego dodanie napisów do MKV nie wymaga ponownego kodowania

Plik wideo to kontener z oddzielnymi strumieniami, a dodanie napisów dokłada tylko jeszcze jeden strumień. Obraz i dźwięk zostały skompresowane raz, w chwili powstawania wideo. Muxing — skrót od multipleksowania — wplata dodatkowy strumień do kontenera, nie dekodując niczego, co już w nim jest, więc na wyjściu dostajesz dokładnie to samo wideo, bit w bit, z dodatkową ścieżką napisów obok.

Wypalanie napisów to operacja odwrotna. Tekst trzeba narysować w każdej klatce, więc każda klatka jest dekodowana, domalowywana i kompresowana od nowa. Kosztuje to czas i odrobinę jakości, a mimo to jest właściwym wyborem, gdy platforma ignoruje ścieżki napisów; tę drogę opisuje przewodnik po wypalaniu napisów. Jeśli nie wiesz jeszcze, które z tych dwóch rozwiązań jest ci potrzebne, hardsub vs softsub to krótka wersja tej decyzji.

Matroska (.mkv) zaprojektowano z myślą o softsubach. Mieści dowolną liczbę ścieżek wideo, audio i napisów oraz załączniki plikowe, takie jak fonty, a każda ścieżka niesie własne metadane:

  • Język — kod w rodzaju eng albo spa, którego odtwarzacze używają do opisywania ścieżek i automatycznego wyboru jednej z nich.
  • Nazwa — dowolny tekst widoczny w menu odtwarzacza, na przykład „English” albo „English (SDH)”.
  • Flaga domyślna (default) — ścieżka, którą odtwarzacz włącza, gdy widz żadnej nie wybrał.
  • Flaga wymuszona (forced) — ścieżka pokazywana nawet wtedy, gdy widz wyłączył napisy, przeznaczona dla linijek z dialogami w obcym języku.

Dobre ustawienie tych czterech rzeczy to większość pracy. Samo muxowanie jest łatwą częścią.

Czy można dodać ścieżkę napisów do MP4?

Tak, ale MP4 niesie napisy wyłącznie jako mov_text — zwykły format czasowanego tekstu. FFmpeg konwertuje do niego SRT w trakcie dodawania, a fonty, kolory i pozycjonowanie nie przetrwają. Przez to wybór kontenera jest prawdziwą decyzją, a nie kwestią upodobań:

MKVMP4
Formaty napisów, które przechowujeSRT, ASS, PGS i innetylko mov_text
Stylizacja (fonty, kolory, pozycja)Zachowana w ścieżkach ASSOdrzucana
Pliki fontów dołączone do wideoTakNie
Kilka języków w jednym plikuTakTak, jako zwykły tekst
Otwiera się we wbudowanych odtwarzaczach AppleNie zawszeTak
Otwiera się w VLC i mpvTakTak
Wymaga ponownego kodowania, by dodać ścieżkęNieNie

Wiersz tabeli, który zwykle rozstrzyga sprawę, to ten dotyczący Apple. QuickTime w ogóle nie otwiera MKV, a własne aplikacje iPhone'a obsługują go zawodnie, natomiast ścieżki mov_text wyświetlają dobrze zarówno QuickTime, jak i te aplikacje, więc plik przeznaczony na urządzenia Apple powinien być MP4, mimo że jego napisy będą zwykłym tekstem. VLC, mpv, Plex i Kodi odtwarzają MKV z nienaruszoną stylizacją i dołączonymi fontami. Trzeci przypadek to przeglądarki: ich odtwarzacze wideo zazwyczaj ignorują osadzone ścieżki napisów i oczekują osobnego pliku WebVTT, dlatego porównanie formatów traktuje VTT jako format webowy.

Trzy sposoby dodawania ścieżek napisów

  1. MKVToolNix — darmowy, z GUI, na Windows, macOS i Linux. Najlepsze narzędzie, gdy pliki z napisami już istnieją.
  2. FFmpeg — darmowy, jedna komenda i jedyny z trzech, który zapisuje MP4. Najlepsze narzędzie do skryptów i przetwarzania wsadowego.
  3. Sablate — na wypadek, gdy napisów jeszcze nie ma: transkrybuj, tłumacz w warstwach i wyeksportuj jeden MKV ze ścieżką na każdy język.

Subtitle Edit też potrafi wykonać muxing, z menu Video → Add/remove embedded subtitles, i robi to, uruchamiając pod spodem FFmpeg.

Metoda 1: dodaj napisy do MKV w MKVToolNix

MKVToolNix to referencyjny zestaw narzędzi do plików Matroska, a jego GUI sprowadza całą robotę do czterech kroków:

  1. Zainstaluj go ze strony mkvtoolnix.download. Wersja 102.0 ukazała się 14 września 2026; kompilacja na macOS wymaga systemu macOS 13 Ventura lub nowszego.
  2. Otwórz MKVToolNix GUI, zostań na karcie Multiplexer i przeciągnij wideo oraz każdy plik z napisami do obszaru Source files. Każdy plik z napisami pojawia się jako osobna ścieżka.
  3. Kliknij każdą ścieżkę napisów i uzupełnij pola Language i Track name. Ustaw flagę Default track na tej jednej ścieżce, która ma zagrać pierwsza, a na pozostałych ją wyczyść. Opcję Forced display zostaw wyłączoną, chyba że ścieżka obejmuje wyłącznie linijki w obcym języku.
  4. Ustaw nazwę pliku docelowego na dole i kliknij przycisk Start multiplexing.

Nic nie jest kodowane, więc nawet dwugodzinny film kończy się mniej więcej w czasie potrzebnym na skopiowanie pliku. To samo zadanie z wiersza poleceń — tak właśnie robi się je wsadowo:

mkvmerge -o film.subtitled.mkv film.mp4 \
  --language 0:eng --track-name 0:English --default-track-flag 0:yes en.srt \
  --language 0:spa --track-name 0:Spanish --default-track-flag 0:no es.srt

Opcje dotyczą pliku podanego po nich, a 0 to identyfikator ścieżki wewnątrz każdego SRT, w którym zawsze jest tylko jedna ścieżka. Jeśli znaki diakrytyczne wychodzą jako krzaki, SRT nie jest w UTF-8: umieść --sub-charset 0:windows-1252 (albo rzeczywiste kodowanie pliku) przed tym plikiem albo najpierw zapisz go ponownie jako UTF-8.

Żeby zmienić flagi później bez ponownego muxowania, mkvpropedit edytuje istniejący plik w miejscu:

mkvpropedit film.subtitled.mkv --edit track:s1 --set flag-default=0 --edit track:s2 --set flag-default=1

track:s1 to pierwsza ścieżka napisów. Ponieważ zmienia nagłówek pliku, a nie zapisuje nowego pliku, działa niemal natychmiast nawet na dużym filmie.

Metoda 2: dodaj ścieżki napisów w FFmpeg (MKV i MP4)

FFmpeg robi ten sam muxing jedną komendą i to po niego sięgasz, gdy wynik musi być w MP4. Dla MKV ze ścieżkami angielską i hiszpańską:

ffmpeg -i film.mp4 -i en.srt -i es.srt \
  -map 0:v -map 0:a -map 1 -map 2 -c copy \
  -metadata:s:s:0 language=eng -metadata:s:s:0 title=English \
  -metadata:s:s:1 language=spa -metadata:s:s:1 title=Spanish \
  -disposition:s:0 default -disposition:s:1 0 \
  film.subtitled.mkv

Czytaj od lewej do prawej: trzy wejścia; -map bierze wideo i audio z filmu, a potem po kolei każdy plik z napisami; -c copy kopiuje każdy strumień zamiast go kodować; -metadata:s:s:0 taguje pierwszy strumień napisów na wyjściu; a dwie opcje -disposition oznaczają angielski jako domyślny i czyszczą flagę na hiszpańskim.

Jawna lista -map ma znaczenie. Samo -map 0 wciągnęłoby też każdą ścieżkę napisów, którą źródło już ma, a ścieżki mov_text z MP4 nie da się skopiować do MKV, więc komenda zatrzymuje się z błędem, zanim cokolwiek zapisze.

Dla MP4 przekonwertuj napisy na mov_text i skopiuj wszystko pozostałe:

ffmpeg -i film.mp4 -i en.srt -i es.srt \
  -map 0:v -map 0:a -map 1 -map 2 \
  -c:v copy -c:a copy -c:s mov_text \
  -metadata:s:s:0 language=eng -metadata:s:s:1 language=spa \
  film.subtitled.mp4

Wideo i audio nadal pozostają nietknięte; do formatu MP4 przepisywany jest tylko tekst napisów. Jeśli wejściem jest stylizowany plik .ass, to właśnie w tym kroku stylizacja znika.

Stylizowane napisy ASS należą do MKV, z dołączonym fontem, dzięki czemu odtwarzacz rysuje je wybranym przez ciebie krojem, a nie pierwszym lepszym fontem zastępczym:

ffmpeg -i film.mp4 -i en.ass \
  -map 0:v -map 0:a -map 1 -c copy \
  -attach Montserrat-ExtraBold.ttf -metadata:s:t:0 mimetype=application/x-truetype-font \
  -metadata:s:s:0 language=eng \
  film.subtitled.mkv

Dokumentacja FFmpeg wprost mówi, że załączniki w kontenerze Matroska wymagają tagu mimetype. mpv i VLC wczytują dołączone fonty, gdy renderują ASS, więc stylizacja podróżuje razem z plikiem. Który krój dołączyć, to osobne pytanie — przewodnik po fontach do napisów opisuje, co dobrze się czyta i których pism nie potrafią narysować popularne fonty do napisów.

Metoda 3: stwórz napisy i MKV w jednym przebiegu

MKVToolNix i FFmpeg zakładają, że pliki z napisami już istnieją. Często ich nie ma: masz nagranie, potrzebujesz angielskiego plus trzech tłumaczeń, a muxing to ostatnie kilka sekund znacznie dłuższej pracy. To przypadek, do którego zbudowano Sablate, i cała droga zostaje w jednej aplikacji:

  1. Transkrybuj wideo na własnym komputerze za pomocą Whisper.
  2. Popraw transkrypt w edytorze.
  3. Dodaj każdy język jako warstwę tłumaczenia na tych samych czasowaniach.
  4. Wyeksportuj Video with switchable subtitles (.mkv).

W pliku ląduje to, co Metoda 2 buduje ręcznie. Wideo i audio są kopiowane strumieniowo, więc eksport trwa mniej więcej tyle, ile kopiowanie pliku. Każda warstwa językowa staje się osobną ścieżką ASS w stylu twoich napisów, z fontem podmienionym na taki, który potrafi narysować pismo danego języka. Każda ścieżka dostaje tag języka i czytelną nazwę, pierwsza ścieżka dostaje flagę domyślną, a gdy styl używa jednego z dołączonych do Sablate krojów do napisów, ten plik fontu zostaje załączony do MKV, więc stylizacja przetrwa na innym komputerze.

Trzy ograniczenia, powiedziane wprost. Eksport MKV jest częścią Pro — jednej płatności $29, podanej na stronie cennika. Sablate nie zapisuje ścieżek napisów w MP4, bo mov_text wyrzuciłby stylizację — wyeksportuj pliki .srt i uruchom powyższą komendę FFmpeg dla MP4, jeśli potrzebujesz takiego pliku. Eksport zastępuje też wszystkie ścieżki napisów, które plik źródłowy już miał, zamiast je zachować, więc jeśli są dla ciebie ważne, dodaj je z powrotem w MKVToolNix.

Część z transkrypcją i tłumaczeniem opisuje krok po kroku proces pracy z wieloma językami.

Której metody użyć?

Wybierz według tego, co już masz — pliki z napisami albo samo wideo — oraz według tego, gdzie plik musi się odtwarzać:

MKVToolNixFFmpegSablate
CenaDarmoweDarmowe$29 jednorazowo (Pro)
PlatformyWindows, Mac, LinuxWindows, Mac, LinuxWindows i Mac
InterfejsGUI i wiersz poleceńWiersz poleceńGUI
Muxuje pliki z napisami, które już maszTakTakCzęściowo, przez import do zadania
Tworzy napisy z mowyNieNieTak
Zapisuje MP4 ze ścieżkami napisówNieTakNie
Tagi języka i flaga domyślnaTakTakTak, ustawiane automatycznie
Flaga wymuszonaTakTakNie
Dołącza fontyTakTakTak, dołączone kroje do napisów
Zmienia flagi bez ponownego muxowaniaTak, przez mkvpropeditNieNie

„Mam już pliki z napisami”. MKVToolNix. Jest darmowy, pokazuje każdą ścieżkę i flagę, zanim cokolwiek zapisze, a robota zajmuje dwie minuty.

„Mam do przetworzenia cały sezon odcinków”. mkvmerge albo FFmpeg w pętli. Obie powyższe komendy działają bez nadzoru, gdy tylko nazwy plików układają się we wzorzec.

„Musi się odtwarzać na iPhonie albo w QuickTime”. MP4 przez FFmpeg i pogodzenie się z napisami w postaci zwykłego tekstu.

„Moje napisy to stylizowany ASS”. MKV z dołączonym fontem. MP4 odrzuca stylizację już przy dodawaniu.

„Mam tylko wideo”. Sablate, jeśli chcesz mieć transkrypcję, tłumaczenie i wielościeżkowy MKV w jednym miejscu. Subtitle Edit to darmowa droga, jeśli nie przeszkadza ci składanie tych kroków samemu.

„Idzie na YouTube”. Żaden z tych kontenerów. Platformy takie jak YouTube przyjmują .srt albo .vtt jako osobny upload.

Dlaczego napisy w moim MKV się nie wyświetlają?

Ścieżka prawie zawsze jest na miejscu; coś po prostu postanawia jej nie pokazać. Najpierw wyświetl listę tego, co plik faktycznie zawiera:

ffprobe -v error -select_streams s -show_entries stream=index,codec_name:stream_tags=language,title:stream_disposition=default,forced -of compact=p=0 film.subtitled.mkv

Każda ścieżka napisów wypisuje jeden wiersz z kodekiem, językiem, nazwą oraz flagami domyślną i wymuszoną. Jeśli ścieżki są na liście, przejdź po kolei przez ten spis:

  1. Żadna ścieżka nie ma flagi domyślnej. Odtwarzacz nie ma czego włączyć sam z siebie. Ustaw flagę za pomocą mkvpropedit, jak w Metodzie 1.
  2. Wygrywa własna preferencja odtwarzacza. VLC, Plex i wiele telewizorów trzymają preferowany język napisów albo ustawienie wyłączające napisy, które przesłania flagi zapisane w pliku. Sprawdź najpierw odtwarzacz, a dopiero potem plik.
  3. Pełna ścieżka ma flagę wymuszoną. Widzowie, którzy wyłączyli napisy, i tak dostają każdą linijkę. Flaga wymuszona należy wyłącznie do ścieżek częściowych.
  4. Ścieżka w MP4 jest ignorowana. Wiele odtwarzaczy po cichu pomija mov_text. Jeśli plik nie musi być MP4, zmuxuj go ponownie do MKV.
  5. Znaki diakrytyczne zamieniają się w krzaki. Źródłowy SRT zapisano w starszym kodowaniu. Zapisz go ponownie jako UTF-8 i zmuxuj jeszcze raz albo podaj kodowanie przez --sub-charset w mkvmerge lub przez -sub_charenc przed wejściem z napisami w FFmpeg.
  6. Stylizowany tekst wyświetla się zwykłym fontem. Ścieżka ASS wskazuje font, którego nie ma na komputerze, na którym plik jest odtwarzany. Dołącz plik fontu, jak w ostatniej komendzie FFmpeg.

Muxing to tania część dostarczania napisów: minuta w MKVToolNix, jedna komenda w FFmpeg, nic nie jest kodowane na nowo. Droga część to mieć w ogóle dobre pliki z napisami w każdym języku. Jeśli już je masz, darmowe narzędzia powyżej w zupełności wystarczą. Jeśli masz tylko nagranie, pobierz Sablate na Windows albo Mac, transkrybuj i przetłumacz je, a eksport zapisze ścieżki, tagi i flagi za ciebie.