Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 电影问题';utf-8';编解码器可以';t解码1494位置的字节0xb5:无效的起始字节_Python_Video_Moviepy - Fatal编程技术网

Python 电影问题';utf-8';编解码器可以';t解码1494位置的字节0xb5:无效的起始字节

Python 电影问题';utf-8';编解码器可以';t解码1494位置的字节0xb5:无效的起始字节,python,video,moviepy,Python,Video,Moviepy,当我尝试访问本地视频文件时,我得到“'utf-8'编解码器无法解码1494位置的字节0xb5:无效的开始字节”。我把这个文件上传到谷歌硬盘上,并在colab中运行代码,一切正常。当我用jupyter笔记本在本地驱动器上运行它时,我遇到了这个问题 我的代码: import moviepy.editor as mp path='D:/Movie/Multimedia_Corpus/Test01/video_files/' file='test01.rmvb' fclip=mp.VideoFi

当我尝试访问本地视频文件时,我得到“'utf-8'编解码器无法解码1494位置的字节0xb5:无效的开始字节”。我把这个文件上传到谷歌硬盘上,并在colab中运行代码,一切正常。当我用jupyter笔记本在本地驱动器上运行它时,我遇到了这个问题

我的代码:

import moviepy.editor as mp    
path='D:/Movie/Multimedia_Corpus/Test01/video_files/'
file='test01.rmvb'
fclip=mp.VideoFileClip(path+file)
错误:

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-23-1ebadda110d3> in <module>
      9 for f in AllFiles:
     10   print(f)
---> 11   fclip=mp.VideoFileClip(path+f,'rb')

~\anaconda3\lib\site-packages\moviepy\video\io\VideoFileClip.py in __init__(self, filename, has_mask, audio, audio_buffersize, target_resolution, resize_algorithm, audio_fps, audio_nbytes, verbose, fps_source)
     86         # Make a reader
     87         pix_fmt = "rgba" if has_mask else "rgb24"
---> 88         self.reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt,
     89                                          target_resolution=target_resolution,
     90                                          resize_algo=resize_algorithm,

~\anaconda3\lib\site-packages\moviepy\video\io\ffmpeg_reader.py in __init__(self, filename, print_infos, bufsize, pix_fmt, check_duration, target_resolution, resize_algo, fps_source)
     33         self.filename = filename
     34         self.proc = None
---> 35         infos = ffmpeg_parse_infos(filename, print_infos, check_duration,
     36                                    fps_source)
     37         self.fps = infos['video_fps']

~\anaconda3\lib\site-packages\moviepy\video\io\ffmpeg_reader.py in ffmpeg_parse_infos(filename, print_infos, check_duration, fps_source)
    257     proc = sp.Popen(cmd, **popen_params)
    258     (output, error) = proc.communicate()
--> 259     infos = error.decode('utf8')
    260 
    261     del proc

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 1494: invalid start byte
---------------------------------------------------------------------------
UnicodeDecodeError回溯(最近一次呼叫最后一次)
在里面
9表示所有文件中的f:
10印刷品(f)
--->11 fclip=mp.VideoFileClip(路径+f,'rb')
~\anaconda3\lib\site packages\moviepy\video\io\VideoFileClip.py in\uuuuu init\uuuu(self、文件名、has\u掩码、音频、音频缓冲区大小、目标分辨率、调整大小算法、音频fps、音频字节、冗余、fps\u源)
86#成为读者
87 pix_fmt=“rgba”如果有其他“rgb24”
--->88 self.reader=FFMPEG\u VideoReader(文件名,pix\u fmt=pix\u fmt,
89目标分辨率=目标分辨率,
90调整大小算法=调整大小算法,
~\anaconda3\lib\site packages\moviepy\video\io\ffmpeg\u reader.py in\uuuuuuu init\uuuuuuuuuuuuuuuuuuu(self、文件名、打印信息、bufsize、pix\u fmt、检查持续时间、目标分辨率、调整算法大小、fps\u源)
33 self.filename=文件名
34 self.proc=无
--->35 infos=ffmpeg\u parse\u infos(文件名、打印信息、检查持续时间、,
36 fps_源)
37 self.fps=infos['video_fps']
ffmpeg\u parse\u信息中的~\anaconda3\lib\site packages\moviepy\video\io\ffmpeg\u reader.py(文件名、打印信息、检查持续时间、fps\u源)
257 proc=sp.Popen(cmd,**Popen_参数)
258(输出,错误)=过程通信()
-->259 infos=错误。解码('utf8')
260
261 del proc
UnicodeDecodeError:“utf-8”编解码器无法解码1494位置的字节0xb5:无效的开始字节

我发现这实际上是moviepy的一个bug。我打开ffmpeg_reader.py并更改了第259行,即问题中发布的第三个错误行

原始代码:

infos = error.decode('utf8')
新代码:

try:
    infos = error.decode('utf8')
except:
    infos = error.decode('ANSI')

查看错误跟踪,它不是由文件I/O引起的-它来自
ffmpeg\u parse\u infos
中的显式
decode
。这意味着您的文件已损坏,其中有一个部分应该包含UTF-8数据,但没有。@MarkRansom我发现这是moviepy的一个bug,并已修复。请查看我的答案。谢谢用于回复。这可能阻止了错误,但并不意味着您得到了正确的结果。
使用
'ANSI'
进行解码将永远不会生成错误,因为没有无效字节,但返回的字符可能不正确。