首页 > 技术文章 > moviepy用VideoFileClip加载视频时报UnicodeDecodeError: codec cant decode ,No mapping character 错误

LaoYuanStudyPython 2020-05-12 21:27 原文

昨天处理视频时出现了解码错误,通过修改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 的编码方式是有本质区别的
  • 用不同的编码方式编写的文件必须用对应的编码格式来读取,否则就会出现乱码

跟老猿学Python、学5G!

推荐阅读