昨天处理视频时出现了解码错误,通过修改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 FilesPython37libsite-packagesmoviepyvideoioVideoFileClip.py", line 91, in __init__
fps_source=fps_source)
File "C:Program FilesPython37libsite-packagesmoviepyvideoioffmpeg_reader.py", line 36, in __init__
fps_source)
File "C:Program FilesPython37libsite-packagesmoviepyvideoioffmpeg_reader.py", line 260, in ffmpeg_parse_infos
infos = error.decode('ANSI')
File "C:Program FilesPython37libencodingsmbcs.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 的编码方式是有本质区别的
- 用不同的编码方式编写的文件必须用对应的编码格式来读取,否则就会出现乱码
老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。