Eine MKV-Datei mit mehreren Untertitelsätzen kann nicht auf SmartTV-Geräten oder ähnlichen Geräten abgespielt werden, da überhaupt keine Untertitel angezeigt werden. mplayer verwaltet die Datei ohne Probleme. Folgendes ist in der Datei enthalten:
$ ffprobe input.mkv |& grep Stream
Stream #0:0(zxx): Video: h264 (High), yuv420p(progressive), 716x360 [SAR 32:27 DAR 2864:1215], SAR 212:179 DAR 106:45, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(spa): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (default)
Stream #0:2(eng): Subtitle: dvd_subtitle, 720x480 (default)
Stream #0:3(fre): Subtitle: subrip
Stream #0:4(por): Subtitle: subrip
Ich gehe davon aus, dass weniger fähige Player andere Untertitelformate als SRT nicht verarbeiten können. Die Frage ist, wie man den vorhandenen englischen Untertiteltrack aus der MKV-Datei extrahiert, in SRT konvertiert und optional wieder in die MKV-Datei hinzufügt.
Abgesehen von "Ich habe noch nie eine MP4-Datei mit SRT-Untertiteln gesehen" wurde ein anderer Thread ( Konvertieren von DVD-Untertiteln in Text ), der dieselbe Frage stellte, nicht beantwortet.
Die angeblich definitive https://trac.ffmpeg.org/wiki/ExtractSubtitles enthält Informationen, die nicht mit der tatsächlichen ffmpeg-Operation übereinstimmen. Das ist mein ffmpeg:
$ ffmpeg -v
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 7.1.0 (GCC)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/man --disable-static --enable-shared --enable-runtime-cpudetect --enable-avresample --enable-gpl --enable-version3 --enable-pthreads --enable-postproc --disable-debug --disable-indev=jack --disable-outdev=jack --arch=x86_64 --enable-pic --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gnutls --enable-libcaca --enable-libcdio --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libmp3lame --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libpulse --enable-libsmbclient --enable-libwavpack
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Und das habe ich versucht, ohne Erfolg:
$ ffmpeg -i input.mkv -map 0:2 subs-EN.srt
...
Stream mapping:
Stream #0:2 -> #0:0 (dvd_subtitle (dvdsub) -> subrip (srt))
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
$ ffmpeg -codecs | grep dvdsub
...
DES... dvd_subtitle DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )
Der dvdsub-Decoder wird also wie erwartet in ffmpeg kompiliert (oder die Untertitel werden im mplayer nicht angezeigt), aber nicht aufgerufen, um sie zu konvertieren.
Ich habe es auch versucht
$ mplayer -dumpsrtsub -dumpfile subs-EN.srt -sid 0 input.mkv
MPlayer 1.3.0-7.1.0 (C) 2000-2016 MPlayer Team
...
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (ac3), -aid 0, -alang spa
[lavf] stream 2: subtitle (dvdsub), -sid 0, -slang eng
[lavf] stream 3: subtitle (srt), -sid 1, -slang fre
[lavf] stream 4: subtitle (srt), -sid 2, -slang por
...
Es wird der richtige Untertitel-Stream abgespielt, es wird jedoch nichts in die Datei subs-EN.srt geschrieben.
Was mache ich falsch?
libass
kompiliert / verknüpft sein.