我正在使用一个小脚本来使用Moviepy将文件夹中的所有剪辑转换为小过渡,但是由于出现错误无法散列的类型“列表”,因此无法运行它。我已经阅读了许多有关此错误的文章,并且我了解到您无法对列表进行哈希处理,并且强制转换为元组可以解决该问题,我尝试了其他答案的多个建议,但无法完全理解原因我的代码无法正常工作
from moviepy.editor import concatenate_videoclips
from moviepy.video.io.VideoFileClip import VideoFileClip
import os
clips = []
for filename in os.listdir('D:/Clip Project/ClipsTest'):
if filename.endswith(".mp4"):
clips.append(VideoFileClip('D:/Clip Project/ClipsTest/' + filename))
clips = [clip.crossfadein(1) for clip in clips]
video = concatenate_videoclips(clips, padding=-1, method='compose', )
video.write_videofile('D:/Clip Project/ClipsTest/League-' + '.mp4', threads=4, fps=24)
这是我最初遇到问题并努力解决的代码,任何提示都将是惊人的!
这是完整的错误:
Traceback (most recent call last):
File "teststuff.py", line 2, in <module>
from moviepy.editor import concatenate_videoclips
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\moviepy\editor.py", line 48, in <module>
import moviepy.video.fx.all as vfx
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\moviepy\video\fx\all\__init__.py", line 13, in <module>
__all__ = [name for _, name, _ in pkgutil.iter_modules(
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\moviepy\video\fx\all\__init__.py", line 13, in <listcomp>
__all__ = [name for _, name, _ in pkgutil.iter_modules(
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\pkgutil.py", line 129, in iter_modules
for i in importers:
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\pkgutil.py", line 415, in get_importer
importer = sys.path_importer_cache[path_item]
TypeError: unhashable type: 'list'
这可能与moviepy本身有关吗?我查看了下面的文档,但无济于事,并且摆弄了导入文件。
答案 0 :(得分:0)
我不知道是什么原因导致了错误,但有一个复制错误的示例:
d ={ 1:'first', [2,3]:'second'}
print(d)
我在pymovie文档中查看了垃圾,但找不到参数。尝试检查并查看组合功能所需的参数。
您可以在此处看到函数参数: https://github.com/Zulko/moviepy/blob/master/moviepy/video/compositing/concatenate.py 也许这会有所帮助。