DLNA серверы (и в частности minidlna) передают на телевизор субтитры, если они называются как файл с видео, но имеют расширение srt.
В этом топике обсудим извлечение субтитров из файлов формата mkv (матрёшек) прямо на роутере или НАСе.
Для этого нам потребуется установить пакет mkvtoolnix
1. Установка
Код: Выделить всё
opkg update
opkg install mkvtoolnix
2. Определим, какие субтитры в нашем файле и номера дорожек с субтитрами.
Пусть в текущей директории находится файл `film.mkv`. Для получения инофмации о содержимом наберем
Код: Выделить всё
# mkvinfo film.mkv
+ EBML head
|+ EBML version: 1
|+ EBML read version: 1
|+ EBML maximum ID length: 4
|+ EBML maximum size length: 8
|+ Doc type: matroska
|+ Doc type version: 2
|+ Doc type read version: 2
+ Segment, size 1566655324
|+ Seek head (subentries will be skipped)
|+ EbmlVoid (size: 4029)
|+ Segment information
| + Timecode scale: 1000000
| + Muxing application: libebml v1.2.3 + libmatroska v1.3.0
| + Writing application: mkvmerge v5.8.0 ('No Sleep / Pillow') built on Sep 2 2012 15:37:04
| + Duration: 5740.745s (01:35:40.745)
| + Date: Sun Nov 3 07:47:09 2013 UTC
| + Segment UID: 0x9d 0x99 0xca 0xdb 0xae 0x09 0xf2 0x2d 0x8e 0x98 0xdb 0xbb 0x75 0x9c 0x1e 0xbb
|+ Segment tracks
| + A track
| + Track number: 1
| + Track UID: 933253873644806325
| + Track type: video
| + Lacing flag: 0
| + MinCache: 1
| + Codec ID: V_MPEG4/ISO/AVC
| + Default duration: 41.708ms (23.976 fps for a video track)
| + Language: und
| + Video track
| + Pixel width: 1016
| + Pixel height: 432
| + Display width: 1016
| + Display height: 432
| + CodecPrivate, length 55
| + A track
| + Track number: 2
| + Track UID: 11591896489833290887
| + Track type: audio
| + Codec ID: A_AAC
| + CodecPrivate, length 5
| + Default duration: 21.333ms (46.875 fps for a video track)
| + Language: rus
| + Name: Dub
| + Audio track
| + Sampling frequency: 48000
| + Channels: 6
| + A track
| + Track number: 3
| + Track UID: 17185268996613977738
| + Track type: audio
| + Default flag: 0
| + Codec ID: A_AAC
| + CodecPrivate, length 5
| + Default duration: 21.333ms (46.875 fps for a video track)
| + Name: Original
| + Audio track
| + Sampling frequency: 48000
| + Channels: 6
| + A track
| + Track number: 4
| + Track UID: 11385965893828870547
| + Track type: subtitles
| + Default flag: 0
| + Lacing flag: 0
| + Codec ID: S_TEXT/UTF8
| + Language: rus
| + Name: Full
| + A track
| + Track number: 5
| + Track UID: 17774564552554844580
| + Track type: subtitles
| + Default flag: 0
| + Lacing flag: 0
| + Codec ID: S_TEXT/UTF8
| + Name: Full
|+ EbmlVoid (size: 1120)
|+ Chapters
| + EditionEntry
| + EditionFlagHidden: 0
| + EditionFlagDefault: 0
| + EditionUID: 13936717882403376264
| + ChapterAtom
| + ChapterUID: 4940603363767436418
| + ChapterTimeStart: 00:00:00.000000000
| + ChapterFlagHidden: 0
| + ChapterFlagEnabled: 1
| + ChapterDisplay
| + ChapterString: Chapter 1
| + ChapterLanguage: eng
| + ChapterAtom
....
Для сокращения объема выводимой информации (а нам нужно узнать номера дорожек с субтитрами) можно использовать grep:
Код: Выделить всё
# mkvinfo film.mkv | grep -E 'S_TEXT|number:|Language:|Name:'
| + Track number: 1
| + Language: und
| + Track number: 2
| + Language: rus
| + Name: Dub
| + Track number: 3
| + Name: Original
| + Track number: 4
| + Codec ID: S_TEXT/UTF8
| + Language: rus
| + Name: Full
| + Track number: 5
| + Codec ID: S_TEXT/UTF8
| + Name: Full
| + ChapterLanguage: eng
| + ChapterLanguage: eng
| + ChapterLanguage: eng
....
Из выдач видно, что русские субтитры находятся в дорожке 4, а английские в 5.
3. Для извлечения субтитров воспользуемся утилитой mkvextract
Код: Выделить всё
mkvextract tracks film.mkv 4:film.srt
В результате рядом с файлом film.mkv очень быстро (даже на слабом роутере) получим файл с субтитрами film.srt
PS Если нужны английские субтитры, то заменим 4, на 5:
Код: Выделить всё
# mkvextract tracks film.mkv 5:film.eng.srt
Extracting track 5 with the CodecID 'S_TEXT/UTF8' to the file 'film.eng.srt'. Container format: SRT text subtitles
Progress: 100%
Это самый быстрый способ извлечения субтитров из всех мне известных (при условии, что фильм находится на usb носителе, который подключен к роутеру!