问题描述
操作系统:windows10
moviepy版本:1.0.3
python:3.10
在使用moviepy处理视频时,加载srt字幕使用的SubtitlesClip这个类读取的文件。随后报错如下:
'gbk' codec can't decode byte 0x11 in position 111: illegal multibyte sequence
解决方案一
moviepy这个版本读取文件时,使用的with open,且没有指定encoding参数,因此默认使用的操作系统的编码方式打开,那么在windows系统通常会是gbk。
因此只需要将srt文件修改成gbk编码格式保存后,就不会报错了。
解决方案二
上边的方案太low了,大多数字幕文件默认就是utf-8格式,每次都修改格式太麻烦了。
去翻了翻moviepy库的源码发现当前master版本上SubtitlesClip这个类已经可以传递encoding参数,但是这个库三年没发布新版本了,随后就看了看怎么传参的。很简单,代码放下边,具体位置在moviepy/video/tools /subtitles.py
。
class SubtitlesClip(VideoClip):
# 可以看到这里有encoding参数,1.0.3则没有
def __init__(self, subtitles, make_textclip=None, encoding=None):
VideoClip.__init__(self, has_constant_size=False)
if not isinstance(subtitles, list):
# `subtitles` is a string or path-like object
subtitles = file_to_subtitles(subtitles, encoding=encoding) # 在这里使用该参数
# 还是这个文件找到file_to_subtitles函数
def file_to_subtitles(filename, encoding=None): # 加入encoding
times_texts = []
current_times = None
current_text = ""
with open(filename, "r", encoding=encoding) as file: # 加入encoding
只需要修改本地的moviepy中这几个位置,加入encoding参数后即可。文章来源:https://www.toymoban.com/news/detail-708704.html
完结!文章来源地址https://www.toymoban.com/news/detail-708704.html
到了这里,关于解决SubtitlesClip读取字幕文件时报 ‘gbk‘ codec can‘t decode byte xxx in position xxx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!