Serviio supports delivering external or embedded subtitles to all devices.
Subtitles delivery types
Some of the devices support subtitles out-of-the box, delivered as a text file. Some devices do not have any support for subtitles and require them to be burned into the video stream (hardsubs), thus effectively transcoding the video with the text on the screen.
Note, that when burning subtitles in the stream are enabled, you might experience high CPU usage and possibly playback issues (depending on your hardware). This method is not suitable for low powered NAS devices. Also note that (if on Linux) you will need at least FFmpeg 1.1.1 with libASS to fully utilize Serviio's subtitles support.
You can enable hardsubs only for the cases when it's necessary (depends on the device profile), or force them for all videos and renderers.
If your subtitle file includes accented characters the best bet is to convert them to UTF-8 (which should work for both, softsubs and hardsubs). When using hardsubs, Serviio gives you, however, the option to specify the file's character encoding, so that it renders correctly on the video stream. Enter the character encoding to the Subtitle character encoding field (e.g. cp1256 for Arabic). You can find available encodings in the libiconv page.
Subtitle file types
A subtitle file can be stored either externally - next to the video file, or can be embedded inside the video file (usually MKV). In the case of embedded subtitles, Serviio first extracts the data from the video file and then processes the same way as in the case of an external subtitles file.
Serviio supports these subtitle formats:
- SubRip (.srt)
- MicroDVD (.sub)
- SSA/ASS (.ssa, .ass)
- SAMI (.smi)
- VTT (.vtt)
- MOV open text (embedded)
When using an external subtitles file, it has to named with the same name as the video file, except the extension, e.g.:
You can also specify the language, e.g.:
Subtitle file selection
There are some rules on how Serviio detects the appropriate subtitle file. Note, that you can enter your preferred language codes, separated by a comma and ordered by preference (see the image above).
For an external file to be recognized, it has to follow the above file name stucture. If you provide one or more language codes (e.g. cze,cz) it will look for files with the language codes in the name, by the language preference (my_movie_cze.srt, my_movie-cz.sub). If no such file exists, it'll try to get the default one (my_movie.srt).
If you don't have a preferred language code set up, it will only look for the default subtitle file (my_movie.srt).
In a case the external (srt) subtitles are not displayed, the file might be corrupted or not suitable for viewing on your device. You might try fixing it with SrtWiz.
A video file of a certain format (e.g. MKV) may have one or more subtitle tracks embedded inside. If enabled, Serviio will extract one of the tracks into a subtitle file and deliver (as a text or hardsubs). For a track to be recognized, it has to have a language tag, be one of the supported types an you have to define preferred language code(s) to match these tracks.
The easiest method of finding out the language code of the embedded subtitle track is executing the bundled ffmpeg tool like this:
ffmpeg -i name_of_the_video_file
WARNING: Embedded subtitles might not work for some (large) files, due to the time needed to extract them. It's even more true if the file is stored on a remote drive.
Selecting external file vs. embedded subtitle file
In the case a video has both, a matching external subtitle file as well as a matching embedded track, the external file has priority.