moviepy用VideoFileClip加载视频时报UnicodeDecodeError: codec cant decode ,No mapping character 错误
昨天处理视频时出现了解码错误,通过修改ffmpeg_reader.py解决,具体请见《moviepy用VideoFileClip加载视频时报UnicodeDecodeError: ‘utf-8’ codec can’t decode byte invalid start byte错误》,解决了当时几个视频的问题,但今天对几个其他视频合成时又报错了,代码及错误信息如下:
>>> from moviepy.editor import *
>>> l=['F:\\video\\让爱回到陌生.mp4', 'F:\\video\\顺流逆流.mp4', 'F:\\video\\我的梦-深圳卫视版.mp4', 'F:\\video\\笑看风云.mp4']
>>> for ll in l:
clip = VideoFileClip(ll)
print(ll)
F:\video\让爱回到陌生.mp4
F:\video\顺流逆流.mp4
Traceback (most recent call last):
File "<pyshell#3>", line 2, in <module>
clip = VideoFileClip(ll)
File "C:\Program Files\Python37\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 91, in __init__
fps_source=fps_source)
File "C:\Program Files\Python37\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 36, in __init__
fps_source)
File "C:\Program Files\Python37\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 260, in ffmpeg_parse_infos
infos = error.decode('ANSI')
File "C:\Program Files\Python37\lib\encodings\mbcs.py", line 21, in decode
return mbcs_decode(input, errors, True)
UnicodeDecodeError: 'mbcs' codec can't decode bytes in position 0--1: No mapping for the Unicode character exists in the target code page.
>>>
发现由于昨天修改的原因导致了,那只有继续修改,将昨天修改的内容改成如下:
try:
infos = error.decode('utf8')
except Exception as e:
infos = error.decode('ANSI')
支持两种格式都可以解码,问题顺利解决。如果此种办法还不能解决,可以尝试将文件名和目录名改成ASCII字符集的字符再尝试。
注:
- .中文操作系统默认ansi编码,生成的txt文件默认为ansi编码
- utf-8编码是unicode编码在网络之间(主要是网页)传输时的一种“变通”和“桥梁”编码。utf-8在网络之间传输时可以节约数据量。所以,使用操作系统无法搜索出txt文本
- GBK应该是属于ANSI之中的,在ANSI的国际通用集,GBK是专门来解决中文编码的,是双字节的,不论中英文都是双字节,而UTF-8是才用的另外的一种编码方式,对英文是用8位,对中文使用24位,是和ANSI和GBK 的编码方式是有本质区别的
- 用不同的编码方式编写的文件必须用对应的编码格式来读取,否则就会出现乱码