解决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参数后即可。

完结!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值