среда, 20 мая 2009 г.

Subtitle's Windows Charset in GNU/Linux

Кодировка субтитров в GNU/Linux

Большинство русскоязычных субтитров (.srt) используют стандартную кириллистическую кодировку для Windows (cp1251). Поэтому начинающие пользователи GNU/Linux могут испытывать с этим проблемы. На самом деле видимых сложностей тут нет, все сводится к тому, что пользователи элементарно не знают, как использовать субтитры в своем дистрибутиве.

Для решения этой задачи существует всего лишь два пути: сменить кодировку субтитров, подключить субтитры, явно указав кодировку.

Рассмотрим оба способа подробней. Первый может быть выгоден тогда, когда файлов субтитров не так много и не предполагается их дальнейшее использование в Windows-системах (иначе, там придется применять второй метод). Для конвертирования кодировки, в том числе кодировки субтитров в GNU/Linux есть утилита iconv, использование которой не вызывает сложностей.

$ iconv -l

выведет список всех доступных кодировок, цитирую:

"Следующий список содержит все известные встроенные кодировки. Это не обязательно означает, что можно использовать любые комбинации данных имен в параметрах командной строки FROM и TO. Одна и та же кодировка может быть перечислена под несколькими именами (псевдонимами)."

Далее, чтобы конвертировать файл субтитров (srt) из cp1251 в Unicode воспользуйтесь следующей командой:

$ iconv -f CP1251 -t UTF-8 subtitles_in_cp.srt -o subtitles_in_utf.srt

Также можно воспользоваться пропуском предупреждений, добавив ключ "-s". Если же в субтитрах при конвертировании встретится ошибка, то процесс остановится, чтобы ошибочные символы убрать из вывода используйте ключ "-c".

Помимо iconv можно использовать enconv, спасибо комментариям:

он (enconv) сам определит кодировку и сконвертирует в соответствующую системной локали. Так что не надо писать длинную строку параметров.

Второй путь - это явное указание на используемую кодировку для субтитров. У этого метода также есть свои недостатки. Во-первых, не все плееры имеют такую настройку, во-вторых, при использовании других субтитров с другой кодировкой придется выполнять процедуру смены снова, а затем менять опять. Что конечно же доставляет неудобства, однако не запрещает его использовать. В-третьих, в системе должны быть установлены True Type шрифты из Microsoft Windows. Для Ubuntu\Debian пакет называется "msttcorefonts" и устанавливается командой:

$ sudo apt-get install msttcorefonts

Итак, начнем пожалуй с уникального и достаточно широко распространенного Mplayer. За подключение субтитров отвечает ключ с параметром "-sub subtitles.srt", чтобы задать кодировку используемых субтитров необходимо добавить "−subcp <кодировка>", в случае с кодировкой Windows это будет cp1251. Таким образом, строка запуска видео файла example.ogv будет выглядеть так:

$ mplayer -subcp cp1251 -sub subtitles.srt example.ogv

Из советов комментаторов: чтобы раз и навсегда сказать о кодировке используемых субтитров, можно изменить файл конфигурации. В ~/.mplayer/config добавляем строку:

subcp = enca:ru:cp1251

Если Вы пользуетесь SMPlayer, то в настройках (Ctrl+P) в разделе "Субтитры" можно задать настройки кодировки субтитров по умолчанию, выставив "Кириллица Windows (CP1251)". А также SMplayer поддерживает автоматическое определение кодировки (спасибо за комментарий).


Для VLC заходим в настройки (Ctrl+P), "Субтитры и индикация", "кодировка по умолчанию". Устанавливаем либо автоопределение (autodetect), либо "Cyrillic (Windows-1251)".

8 комментариев:

Unknown комментирует...

Вообще говоря, если smplayer брать не самый старый, то там можно включить автоопрделение кодировки. После чего не надо беспокоиться какие субтитры в cp1251, какие в utf8

Banshee комментирует...
Этот комментарий был удален автором.
Анонимный комментирует...

Mplayer уже года два как собирается с поддержкой enca по дефолту. Последнее, соответственно, само определяет кодировку сабов и выставляет нужную, стоит лишь прописать в ~/.mplayer/config строку subcp = enca:ru:cp1251И не нужно извращаться с конвертированием из одного формата в другой, или постоянным прописыванием жесткой кодировки в настройках.

DOMr комментирует...

Спасибо за то, что открыли для меня iconv. :)
То, что нужно!

tinman321 комментирует...

> После чего не надо беспокоиться какие субтитры в cp1251, какие в utf8- угу, точно, добавлю

> И не нужно извращаться с конвертированием из одного формата в другой- иногда нужно извращаться, но добавлю, спасибо

> Спасибо за то, что открыли для меня iconv. :)
То, что нужно!
- да не за что, для этого и писалось

KrasniyRus комментирует...

Млин, совсем забыл про ключик -subcp, за напоминание спасибо =)

Анонимный комментирует...

. В ~/.mplayer/config добавляем строку:

$ subcp = enca:ru:cp1251

===> Тут, кажется, $ лишний.

И, кстати, вместо iconv можно использовать enconv -- он сам определит кодировку и сконвертирует в соответствующую системной локали. Так что не надо писать длинную строку параметров :)

tinman321 комментирует...

> Тут, кажется, $ лишний.
спасибо, убрал

> И, кстати, вместо iconv можно использовать enconv
добавил

спасибо за комментарий.