How can I change the encoding of a subtitle file?
Solution 1
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
.srt
file and make sure all characters are correctly rendered. Otherwise, repeat the above procedure with another encoding. You can run the commandfile -bi yourfile.srt
to 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.
Solution 2
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.
Solution 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
enca
cannot guess the language byenconv -L ru -x utf8 <file>
that should do the trick.
Solution 4
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)
Related videos on Youtube
Leon Vitanos
Updated on September 18, 2022Comments
-
Leon Vitanos over 1 year
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 about 11 yearsyou'll have to change encoding before being able to edit and shave as utf-8
-
Leon Vitanos about 11 yearsCould you be a bit more specific? Yoy mean change encoding via save as? U mean change encode via terminal with "iconv"? Both tried, VLC will not recognise the subtitle after that
-
carnendil about 11 yearsI'm sorry, I had to get myself some Greek language subtitles in order to check. Indeed,
iconv
does the character encoding change, but the program will not substitute the characters that are shown when opened as UTF-8. Please check my updated answer. Cheers. -
carnendil over 10 years
iconv
, for what I was able to experiment, will change the encoding of the file, but will not substitute any of the contents, that is, only the characters that coincide between the source and target encodings will render correctly, all others will render according to how the target encoding understands them. See my answer and their comments. -
billybadass over 10 yearsthnks @carnendil what I said it was that it changes the codification because I am also Greek (English not mother language) ,obviously I meant encoding and only in the output file the input still stands in the directory, but can you be kind enough to implement it in a bash script ? should I go for the "for do. iconv ...done" loop?
-
billybadass over 10 yearsthat kind of answer it, note that still have to change the encoding to utf-8 from video player preferences #! /bin/bash for file in *.srt do iconv -f ISO-8859-7 -t UTF-8 -o "$file.new" "$file" && mv -f "$file.new" "$file" done