解决SubtitlesClip读取字幕文件时报 ‘gbk‘ codec can‘t decode byte xxx in position xxx

这篇具有很好参考价值的文章主要介绍了解决SubtitlesClip读取字幕文件时报 ‘gbk‘ codec can‘t decode byte xxx in position xxx。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

操作系统: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

到了这里,关于解决SubtitlesClip读取字幕文件时报 ‘gbk‘ codec can‘t decode byte xxx in position xxx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包