如何更改字幕文件的编码?

我为电影下载了一个希腊字幕,这是我用Gedit打开时看到的。

在此处输入图像描述

字幕在VLC上非常有用,一切都很完美。 但是,如果我想用一些希腊语单词来编辑这个副标题呢? 我立即得到有关字符编码的错误。

在此处输入图像描述

我点击重试然后VLC无法识别字幕……

对于字幕版/翻译(基于文本的字幕,即),我强烈建议使用Gaupol 。

sudo apt-get install gaupol 

除了gaupol ,你还可以尝试Subtitle Editor和Gnome Subtitles 。

但是,从屏幕截图中可以看出,您的.srt文件不是用Unicode编码的。

事实certificate, iconv 确实将文件的编码更改为UTF-8,但转换后的文件仍然具有您在Gedit中打开时看到的相同字符。

我找到的解决方案是这样的:

  1. 打开Gaupol并转到菜单文件打开或单击按钮打开
  2. 打开窗口的下半部分有一个选择菜单,名为字符编码 。 单击其他… (最后一个选项)。

    Gaupol打开窗口中的字符编码选项

  3. 为您的文件选择合适的编码,例如希腊语ISO-8859-7 ,然后单击“ 接受 ”按钮。

    显示字符编码对话框

  4. 现在打开.srt文件并确保正确呈现所有字符。 否则,使用其他编码重复上述过程。 您可以运行命令file -bi yourfile.srt来确定file -bi yourfile.srt的正确编码(尽管我已经阅读过结果不一定准确)。

  5. 在您的字幕文件以正确的字符编码打开后,现在转到菜单文件另存为…并将字符编码选项(再次,在窗口底部)更改为UTF-8并保存文件(可能与一个新名称,为了安全)。

添加代码页的相同过程适用于Gedit 。 然而,我留下了Gaupol的说明,因为这个问题是关于字幕文件的。

祝好运。

 iconv -f ISO-8859-7 -t UTF-8 Input_file.srt > Output_file.srt 

从Kate编辑器打开它们你可以看到正确的文本,如果你仍然需要从Gedit打开它们,换句话说,永久改变编码运行上面的终端命令。

我推荐enca 。 与gaupol不同,您不仅可以处理字幕文件,还可以处理任何文本文件。

  1. 安装enca:

     sudo apt-get install enca 
  2. 要弄清楚文件的编码,看看enca是否可以猜到它:

     enca  

    或者,如果它失败并且您知道文本文件的语言,那么就比运行一样

     enca -L ru  

    并看看它给你的东西。 从man enca获取支持的语言列表。

  3. 我建议转换为UTF-8,你可以通过运行来实现

     enconv -x utf8  

    或者,如果enca无法猜出语言

     enconv -L ru -x utf8  

    这应该够了吧。

问题是Gedit(以及许多其他Linux应用程序)无法正确识别文本的编码。 另一方面,VLC很可能被设置为正确识别它(通过“字幕偏好”选项卡),这就是为什么你没有任何问题。 解决方案很简单:

您不要通过双击打开文件,而是通过Gedit的“打开”对话框打开文件 。 在那里,您可以在左下角找到drop-down for Encodingdrop-down for Encoding ,默认情况下会选中“自动检测到”。 将其设置为“Windows-1253”或“ISO-8859-7”并且您很高兴,文件正确打开(然后您可以将其保存为UTF-8以避免将来出现问题)

另一个允许转换成不同格式(并附带大量function)的字幕编辑器是Aegisub 。 它的原生格式(.ass)受VLC媒体播放器以及MPlayer支持,转换到它应该可以解决编码问题。

要翻译SRT文件,您还可以使用DualSub 。 它是开源的(GPLv3)和跨平台的。 它使用谷歌翻译。

对于你的一般信息,现在有subtitle-index.org ,它集中了很多字幕,按照多个标准(持续时间,拼写检查,可靠性,编码)排名,并提供最好的直接下载为UTF-8。

工作得非常好,它避免了编码问题,这些问题非常普遍且很烦人。

这是一个Python3函数,用于将包含字幕的任何文本文件转换为具有UTF-8编码的文本。

 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]+'\r\n')