Если вы изучаете такие языки, как французский, немецкий, японский, то наверняка вы можете столкнуться с ситуацией, когда прочитать субтитры или невозможно совсем, или же некоторые буквы исковерканы. Как решить эту проблему?
Как исправить кодировку субтитров?
Для начала выясняем, какая кодировка стоит в операционной системе Windows по умолчанию для программ, не поддерживающих юникод. Для этого идем «Start» — «Control Panel» — «Regional and Language Options», вкладка «Advanced», «Language for non-Unicode programs» («Пуск» — «Панель управления» — «Язык и региональные стандарты», вкладка «Дополнительно», «Язык, соответствующий языку используемых программ, которые не поддерживают Юникод»), скорее всего у вас там стоит русский (если там стоит другой язык и вы ничего не понимаете в кодировках, то лучше выберите русский — вам будет проще понять объяснения ниже). Естественно, если кодировка субтитров и язык, выбранный в этой вкладке, не совпадают, то субтитры будут отображаться с ошибками. Но даже если они совпадают, субтитры иногда могут отображать с ошибками. Чтобы решить эту проблему, прежде всего надо сохранить субтитры в нужной кодировке:
- для западноевропейских языков (французский, немецкий, испанский) — это кодировка «Западноевропейская (Windows)». Иногда она называется «Windows-1252»,
- для японского языка — это кодировка «Японская (Shift-JIS)»,
- для китайского языка — это кодировки «Китайская упрощенная (GB-18030)» и «Китайская традиционная (Big5)»,
- для русского языка — это кодировка «Кириллица (Windows)». Иногда она называется «Windows-1251».
Хотя кодировки юникод («Unicode», «Unicode (UTF-8)») и удобны в некоторых случаях, я не рекомендую вам ими пользоваться (особенно если вы новичок в вопросе кодировок) — часть программ для редактирования субтитров с ними не работает, к тому же сайт с субтитрами opensubtitles.org их не поддерживает. Тем не менее субтитры, которые выложены в интернете, иногда бывают сохранены в кодировке юникод. И в идеале вам нужно уметь конвертировать субтитры из любого формата и любой кодировки в нужный формат (srt) и нужную кодировку (см. список абзацем выше).
В любом случае прежде чем пробовать смотреть фильм со скаченными субтитрами, вам нужно проверить, в какой кодировке они сохранены. Есть 2 способа это сделать:
1) с использованием файлового менеджера Total Commander. Для этого необходимо навести с помощью клавиатуры курсор Total Commander’а на файл субтитров (или в окне Total Commander’а навести курсор мыши на файл и кликнуть по нему левой кнопкой) и нажать F3 — файл субтитров откроется просмотрщиком файлов Lister. (Примечание: все объяснения ниже относятся к тому случаю, когда кодировка в операционной системе Windows по умолчанию для программ, не поддерживающих юникод, установлена на русский язык — см. выше).
В меню просмотрщика Lister сверху выбираем «Options» и удостоверяемся, что кодировка субтитров — «только текст»: напротив «Text only» стоит галочка. В этом случае:
- для западноевропейских языков вы увидите тайминг субтитров и строчки иностранного текста, где буквы с диакритическими знаками заменены на буквы кириллицы. Вот скриншоты для субтитров на французском языке в формате SubRip (расширение «srt»), SubStation Alpha (расширение «ssa»), MicroDVD (расширение «sub», не путать с субтитрами в графическом формате).
- для японского и китайского языков вы увидите тайминг субтитров, а вместо текста — непонятный набор символов. Вот скриншоты для субтитров на японском языке в формате SubRip (расширение «srt»), SubStation Alpha (расширение «ssa»), MicroDVD (расширение «sub», не путать с субтитрами в графическом формате).
- для русского языка вы увидите тайминг субтитров и русский текст. Вот скриншоты для субтитров в формате SubRip (расширение «srt»), SubStation Alpha (расширение «ssa»), MicroDVD (расширение «sub», не путать с субтитрами в графическом формате).
Если кодировка субтитров — «только текст», то можно переходить к просмотру фильма.
Однако может оказаться, что кодировка субтитров одна из юникодовских, в этом случае в просмотрщике Lister галочка в разделе меню «Options» будет стоять напротив «Unicode» или «UTF-8». Если это так, то субтитры следует пересохранить в формате «только текст» с помощью хорошего текстового редактора (см. ниже).
2) с помощью хорошего текстового редактора (Microsoft Word, OpenOffice).
В случае с редактором Microsoft Word обычно проблем не возникает — при открытии файла чаще всего Word сам предложит вам ту кодировку, в которой сохранен файл субтитров. Например, для субтитров на русском языке скорее всего это будет кодировка «Кириллица (Windows)», для субтитров на немецком или, например, французском — скорее всего «Западноевропейская (Windows)», для японского языка — «Японская (Shift-JIS)» или «Юникод (UTF-8)» и т.д. Итак, если при открытии файла Word предлагает вам «нужную» кодировку (см. список рекомендуемых кодировок выше) и после открытия файла текст изображается без ошибок (для западноевропейских языков все диакритические знаки отображаются верно, для иероглифических языков вы видите правильный текст, а для кириллицы — нормальный русский текст), то ничего вам менять в файле субтитров не нужно, кодировка у него правильная, можно переходить к просмотру фильма. Если же при открытии файла Word предлагает вам одну из юникодовских кодировок, то вам надо открыть файл, убедиться, что иностранный текст изображается без ошибок, а после этого выбрать в меню «Файл» — «Сохранить как…» — «текстовый формат txt» и выбрать «нужную» кодировку вручную (см. список рекомендуемых кодировок выше). Т.к. Word при сохранении файла даст ему расширение «txt», вам нужно потом вручную поменять расширение файла на то же, что и соответствовало формату исходного файла («srt» для формата SubRip, «ssa» — для формата SubStation Alpha, «sub» — для формата MicroDVD). Поменять расширение файла можно легко с помощью файлового менеджера Total Commander. Также вы можете поменять расширение файлов в проводнике Windows. Для этого надо настроить Windows так, чтобы при просмотре папок отображались расширения файлов — идем в «панель управления» — «свойства папок» — вкладка «вид» — убрать галочку с опции «скрывать расширение зарегистрированных типов файлов» (Примечание: иногда Word глючит — при открытии файла предлагает вам неправильную кодировку — текст изображается с ошибками, или предлагает правильную кодировку, но открывает файл все равно с ошибками. В этом случае руководствуйтесь окном предварительного просмотра — повыбирайте различные кодировки, пока не найдете ту, при которой иностранный текст в окне предварительного просмотра изображается без ошибок).
В случае же с редактором OpenOffice вам необходимо вручную выбрать кодировку и язык субтитров. Если при открытии файла вы выбираете «нужную» кодировку (см. список рекомендуемых кодировок выше) и после открытия файла текст изображается без ошибок, то ничего менять не надо — файл субтитров готов к употреблению, можно переходить к просмотру фильма. Если же при открытии файла вам приходится выбирать одну из юникодовских кодировок, чтобы файл открылся нормально (иностранный текст отображался без ошибок), то после открытия файла, его нужно пересохранить — в меню выбираем «Файл» — «Сохранить как…» — «кодированный текст txt» и вручную задаем «нужную» кодировку (см. список рекомендуемых кодировок выше). Затем нужно также поменять расширение файла субтитров (см. предыдущий абзац).
***
Итак мы получили файл субтитров в нужной кодировке. Но формат субтитров может быть разный — SubRip (расширение «srt»), SubStation Alpha (расширение «ssa»), MicroDVD (расширение «sub»). Я предпочитаю однообразие и пересохраняю субтитры в формате SubRip, как получившем наибольшее распространение на сегодняшний день. Пересохранить субтитры в другом формате можно с помощью программ Subtitle Edit или Subtitle Workshop.
Просмотр фильма с субтитрами в нужной кодировке
Итак приступаем к просмотру — копируем файл субтитров в папку с фильмом (при этом имя обоих файлов должно совпадать — см. статью «Базовая информация о субтитрах»). Есть 2 варианта сделать так, чтобы иностранный текст отображался в субтитрах без ошибок:
1) Предпочтительный вариант. В кодеке Vobsub (он входит в состав сборника кодеков Combined Community Codec Pack, этот сборник кодеков должен быть инсталлирован на вашем компьютере) вам нужно выбрать кодировку языка субтитров. Для этого запускаем фильм, при этом внизу справа (рядом с часами Windows) появляется зеленая стрелочка. Нажимаем на нее правой кнопкой мыши и выбираем «DirectVobSub (auto-loading version)». Нажимаем на кнопку с изображением используемого шрифта под надписью «Text Settings». В появившемся окне нажимаем на такую же кнопку под надписью «Font». Внизу справа выбираем нужный регион: Western — для западноевропейских языков, Cyrillic — для русского, Japanese — для японского. В случае с японским убедитесь, что выбранный шрифт («Font») включает японские иероглифы и кану, — в окошке «Пример» («Sample») должны отображаться буквы «А», написанные хираганой и катаканой. Жмем «Ок».
2) Альтернативный вариант. Если вы знаете, что все ваши субтитры, например, на французском языке сохранены в кодировке «Западноевропейская (Windows)», то вы можете установить французский язык в качестве языка по умолчанию для программ, не поддерживающих юникод (Start» — «Control Panel» — «Regional and Language Options», вкладка «Advanced»). В этом случае вам не нужно менять кодировку в кодеке Vobsubпосле запуска фильма.
Предыдущие посты по теме:
– Windows 10: приложение «Кино и ТВ», нет звука
– Субтитры для начинающих
В предыдущем посте я уже упоминал, что мой компьютер работает под управлением операционной системы «Windows 10 Pro» версии 21H1 (64-разрядная). Там же я описывал имеющееся в составе этой операционной системы приложение (видеоплеер) «Кино и ТВ» (по-английски «Movies & TV»), которое пришло на смену программе «Проигрыватель Windows Media» (по-английски «Windows Media Player» или сокращенно «WMP»). Причем после перехода на операционную систему «Windows 10 Pro» программа «Проигрыватель Windows Media» тоже осталась в системе.
Установленная у меня версия программы «Кино и ТВ»: 10.22031.1007.0.
Видеоплеер «Кино и ТВ» очень капризен по сравнению, к примеру, со сторонним медиаплеером «VLC», поэтому многие пользователи операционной системы «Windows 10» предпочитают использовать «VLC» вместо приложения «Кино и ТВ». В предыдущих постах я уже описывал две проблемы приложения «Кино и ТВ» (отсутствие поддержки аудиоформата «Opus», чувствительность к ошибкам в файле с субтитрами), которых нет у «VLC». В этом посте я опишу еще одну такую проблему, третью.
Описание проблемы
Я скачал два видеоролика на английском языке, к которым сделал «скрытые субтитры» (по-английски «closed captions») отдельно на английском и русском языках в отдельных текстовых файлах в формате SRT. С отображением в видеоплеере «Кино и ТВ» и медиаплеере «VLC» субтитров на английском языке проблем не возникло.
Зато с субтитрами на русском языке выявилась проблема. Субтитры на русском языке к первому из видеороликов отобразились правильно и в видеоплеере «Кино и ТВ», и в медиаплеере «VLC». Субтитры на русском языке ко второму из видеороликов отобразились правильно в медиаплеере «VLC», но отобразились кракозябрами (по-английски «mojibake») в видеоплеере «Кино и ТВ».
При этом оба файла с русскими субтитрами являются текстовыми файлами в формате SRT, оба сохранены в кодировке UTF-8. Почему один из них отображается правильно, а другой — неправильно именно в видеоплеере «Кино и ТВ» (в «VLC» отображается нормально)?
Я обозначил эти два файла с русскими субтитрами как «russian1.srt» и «russian2.srt» и составил такую таблицу:
| Субтитры | Кодировка | Размер файла, байт | «VLC» | «Кино и ТВ» |
|---|---|---|---|---|
| russian1.srt | UTF-8 | 10908 | да | да |
| russian2.srt | UTF-8 | 19721 | да (илл.1) | нет (илл.2) |
Иллюстрация 1. Субтитры «russian2.srt» в медиаплеере «VLC» (правильно)
Иллюстрация 2. Субтитры «russian2.srt» в видеоплеере «Кино и ТВ» (кракозябры)
На вышеприведенных иллюстрациях отображен один и тот же момент в видеоролике. Используется один и тот же файл субтитров в разных видеоплеерах. Но во втором случае вместо русских букв — кракозябры.
Выпишем буквы субтитров с двух вышеприведенных иллюстраций:
1.
напишем и запустим программы на языках JavaScript, Python и
2.
напишем и запустим программы на языках JavaScript, Python и
Причина
Первый вопрос: умеет ли программа «Кино и ТВ» работать с кодировкой UTF-8? Ответ: да, умеет, потому что субтитры «russian1.srt», которые тоже в кодировке UTF-8, отображаются в программе «Кино и ТВ» правильно.
Как я понимаю, проблема в том, что в операционных системах «Windows» всё еще поддерживается древняя система однобайтных кодовых страниц, которая появилась, когда еще не было юникодных кодировок. В результате операционная система «Windows» (и входящие в нее программы) не может самостоятельно различить, в какой кодировке написан текстовый файл с субтитрами — то ли в однобайтной национальной (для русского алфавита) кодировке, то ли в кодировке UTF-8. Вернее, в программу «Кино и ТВ», как я понимаю, встроен некий алгоритм для автоматического определения кодировки файла с субтитрами, но он не всегда срабатывает правильно при отсутствии в файле специальной отметки (см. об этом ниже).
В вышеприведенном случае этот механизм сработал неверно и автоматически определил кодировку файла с субтитрами как однобайтную кодировку. То есть вместо расшифровки текстового файла по многобайтной кодировке UTF-8 он применил расшифровку файла по однобайтной кодировке Windows-1251.
Можно проверить на слове «напишем», которым начинается субтитр на иллюстрации 1. Это слово в кодировке UTF-8 выглядит так (каждая русская буква представлена двумя байтами):
D0 BD D0 B0 D0 BF D0 B8 D1 88 D0 B5 D0 BC н а п и ш е м
В кодировке Windows-1251 вышеприведенные байты трансформируются в следующее (каждый символ представлен одним байтом):
D0 BD D0 B0 D0 BF D0 B8 D1 88 D0 B5 D0 BC Р Ѕ Р ° Р ї Р ё С € Р µ Р ј
Получилась последовательность символов (кракозябра) «РЅР°РїРёС€РµРј». Сравните с кракозябрами на иллюстрации 2. Это та же самая последовательность.
Решение проблемы
Способ первый.
Многие программы в операционных системах «Windows» для определения кодировки UTF-8 ориентируются на наличие метки BOM (эта аббревиатура расшифровывается как «Byte Order Mark»). И программа «Кино и ТВ» тоже может ориентироваться по этой метке. Что это такое? Для кодировки UTF-8 метка BOM представляет собой дополнительные три байта в начале текстового файла в кодировке UTF-8:
EF BB BF
То есть в начало моего файла «russian2.srt» следует добавить эти три байта. Как это сделать?
Такое умеет делать любой хороший редактор кода или текстовый редактор. Например, в редакторе «Notepad++» или в редакторе «VS Code» можно открыть любой текстовый файл в кодировке «UTF-8», поменять кодировку на «UTF-8 с BOM» (название может немного отличаться, например «UTF-8 with BOM» или «UTF-8 со спецификацией» и тому подобное) и сохранить файл. Такую операцию можно сделать даже в программе «Блокнот» (по-английски «Notepad»).
После вставки метки BOM в файл с субтитрами «russian2.srt» (в кодировке UTF-8) вот что получилось в программе «Кино и ТВ» (в медиаплеере «VLC» и было всё правильно, и осталось правильно):
Как видно на вышеприведенной иллюстрации, теперь субтитры отображаются правильно.
Однако, у этого способа есть недостаток. Существует множество программ, которые воспринимают текстовые файлы в кодировке UTF-8, но не переваривают UTF-8 с BOM. Так что тут следует проявлять осмотрительность. Возможно, для какой-нибудь программы метку BOM, наоборот, потребуется убрать из файла с субтитрами.
Способ второй (ненадежный).
Выше я писал, что файл «russian1.srt» (в кодировке UTF-8) программа «Кино и ТВ» (как и программа «VLC») читает правильно без всякой метки BOM.
Для определения, содержит ли файл текст в кодировке UTF-8, если в начале файла не имеется метки BOM, существует множество алгоритмов, базирующихся на статистическом анализе файла с текстом (подсчитывается количество определенных байтов), но ни один из них не дает стопроцентно верного результата. В качестве примера приведу ссылку на функцию, реализующую один из таких алгоритмов, из набора «Windows API»: IsTextUnicode. Скорее всего, при отсутствии в файле метки BOM приложение «Кино и ТВ» использует подобный алгоритм, возможно — именно указанную функцию IsTextUnicode.
Вот у меня получился файл «russian2.srt» в кодировке UTF-8 без метки BOM, кодировку которого программа «Кино и ТВ» автоматически определила неверно (посчитала его текстом в кодировке Windows-1251). Что делать? Можно попытаться «подстроить» этот файл под алгоритм определения кодировки UTF-8. Но, так как мы не знаем, как точно работает этот алгоритм, то придется действовать вслепую, наудачу.
Как это сделать? Я понемногу вносил в файл косметические изменения (где-то добавить/убрать пробел, добавить/убрать символ новой строки, заменить тире на дефис и тому подобное) и смотрел в программе «Кино и ТВ», не исчезнут ли кракозябры. Мне удалось найти нужное исправление довольно быстро, файл с субтитрами в кодировке UTF-8 отобразился в программе «Кино и ТВ» правильно, несмотря на отсутствие метки BOM.
Интересные ссылки по теме:
https://ru.stackoverflow.com/questions/623776/Как-отличить-текст-в-файле-с-обычной-кодировкой-от-unicode
https://en.wikipedia.org/wiki/Bush_hid_the_facts
Вывод.
Для программы «Кино и ТВ» правильнее использовать файл с субтитрами в кодировке UTF-8 с меткой BOM, чтобы субтитры отобразились правильно.
I downloaded a Greek subtitle for a movie, and this is what I see when I open it with Gedit.
Subtitle works great on VLC, all perfect.
But what if I want to edit this subtitle with some Greek words? I instantly get an error about character encoding.
I hit retry and then VLC doesn’t recognize the subtitles…
carnendil
5,4112 gold badges29 silver badges55 bronze badges
asked Apr 3, 2013 at 17:51
Leon VitanosLeon Vitanos
1,2024 gold badges13 silver badges24 bronze badges
For subtitle edition/translation (text-based subtitles, that is), I strongly suggest Gaupol.
sudo apt-get install gaupol
Besides of gaupol, you can also try Subtitle Editor and Gnome Subtitles.
However, from the screenshots, it is clear that your .srt file is not encoded in Unicode.
As it turns out, iconv does change the encoding of the file to UTF-8, but the converted file will still have the same characters you see when opening in Gedit.
The solution I found is this:
- Open Gaupol and go to menu File → Open or click on the button Open.
-
There is a selection menu in the lower part of the open window, titled Character encoding. Click on Other… (last option).
-
Select an appropriate encoding for your file, e.g. Greek ISO-8859-7, and click on the button Accept.
-
Now open your
.srtfile and make sure all characters are correctly rendered. Otherwise, repeat the above procedure with another encoding. You can run the commandfile -bi yourfile.srtto determine the correct encoding of your file (although I’ve read the results are not necessarily exact). - With your subtitle file open in the correct character encoding, now go to the menu File → Save as… and change the character encoding option (again, at the bottom of the window) to UTF-8 and save the file (possibly with a new name, for safety).
This same procedure of adding the codepage will work for Gedit. Yet I leave the instructions for Gaupol since this question is about subtitle files.
Good luck.
answered Apr 3, 2013 at 18:18
4
iconv -f ISO-8859-7 -t UTF-8 Input_file.srt > Output_file.srt
Open them from Kate editor you can see the proper text, if you still need to open them from Gedit, in other words, permanently change the codification run the above terminal command.
Braiam
66.2k30 gold badges174 silver badges262 bronze badges
answered Aug 21, 2013 at 23:54
billybadassbillybadass
3911 gold badge3 silver badges10 bronze badges
3
I’d recommend enca. Unlike gaupol, you can handle not only subtitle-files, but any text file.
-
Install enca:
sudo apt-get install enca -
To figure out the encoding of the file, see if enca can guess it:
enca <file>or, if it fails and you know the language of the text file, than run for example
enca -L ru <file>and see what it gives you. Get the list of supported languages from
man enca. -
I’d recommend to convert to UTF-8, you can do it by running
enconv -x utf8 <file>or, again, if
encacannot guess the language byenconv -L ru -x utf8 <file>that should do the trick.
muru
189k52 gold badges460 silver badges711 bronze badges
answered Aug 29, 2014 at 11:46
StanStan
1,0202 gold badges10 silver badges14 bronze badges
The problem is that Gedit (and many other linux apps) don’t recognize correctly the text’s encoding. VLC on the other hand is most probably set to recognize it correctly (through «Subtitle preferences» tab), and that’s why you don’t have any problem there. The solution is simple:
You don’t open the file by double-clicking it, but through Gedit’s «Open» dialog. There, you can find at the bottom left side a drop-down for Encoding, in which «Automatically Detected» is selected by default. Set it to «Windows-1253» or «ISO-8859-7» and you’re good to go, the file opens correctly (and you can then save it to UTF-8 to avoid future issues)
answered Apr 15, 2017 at 0:20
Another subtitle editor that allows for converting into different formats (and comes with tons of features) is Aegisub. It’s native format (.ass) is supported by VLC Media Player as well as MPlayer and converting to it should fix encoding issues.
answered Feb 19, 2014 at 6:56
LiveWireBTLiveWireBT
28.2k25 gold badges107 silver badges217 bronze badges
For translating SRT files you also can use DualSub. It is open-source (GPLv3) and cross-platform. It uses Google Translator.
answered Sep 1, 2014 at 14:55
For your general informations, now there is subtitle-index.org, it concentrates a lot of subtitles, rank them along multiple criterias (duration, spell check, lisibility, encoding), and offers the best one in direct download as UTF-8.
Working pretty fine, it avoids encoding problems which are pretty commons and annoying.
answered May 15, 2015 at 14:19
This is a Python3 function for converting any text files including subtitles into the ones with UTF-8 encoding.
def correctSubtitleEncoding(filename, newFilename, encoding_from='ISO-8859-7', encoding_to='UTF-8'):
with open(filename, 'r', encoding=encoding_from) as fr:
with open(newFilename, 'w', encoding=encoding_to) as fw:
for line in fr:
fw.write(line[:-1]+'rn')
answered Jan 8, 2017 at 1:32
You only need Excel to correct this.
It is quite simple, just follow these few steps:
Open a new Excel sheet
Go to «Data», «Get external data», «From text», and select your subtitle file. You may need to search for «all files» instead of leaving it on «.txt» only.
Then, you can select the right encoding in the following window. Try most of them and preview the result.
You will have to pay attention to 2 things:
- eliminate all delimiters, to keep you text in one piece
- put the «column data format to «text» (otherwise, Excel could take the minus sign for a formula)
- import the data from the cell you like (A1 is OK of course).
Your text is perfectly encoded in Excel.
You just have to copy/paste it all in a new .srt file.
answered Sep 3, 2020 at 8:28







