首页 > 编程问答 >MoviePy 文件数量限制

MoviePy 文件数量限制

时间:2024-07-28 12:18:07浏览次数:7  
标签:python moviepy

我正在尝试将大约 300 个 mp4 视频(来自 Ekman-6 数据集)转换为 mp3 音频文件。我目前正在使用 MoviePy 的 VideoFileClip (在 Google Colab 中)进行此转换:

id = 0

for i in range(6):
  path = directory + folders[i]
  cnt = 0
  for file in os.listdir(path):
    filename = os.fsdecode(file)
    clip = VideoFileClip(path + filename)
    audio = clip.audio
    audio.write_audiofile(to_directory + folders[i] + str(id) + ".mp3")
    audio.close()
    clip.close()
    id += 1
    cnt += 1
    if cnt == 50:
      break

但是,在转换第 47 个文件时,我收到以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-c6ad7f378072> in <cell line: 7>()
     12     clip = VideoFileClip(directory + folders[i] + file)
     13     audio = clip.audio
---> 14     audio.write_audiofile(to_directory + folders[i] + str(id) + ".mp3")
     15     audio.close()
     16     clip.close()

AttributeError: 'NoneType' object has no attribute 'write_audiofile'

我不确定是什么导致了此错误。于是,我在网上搜索了一下,发现另一个stackoverflow帖子说这个问题是由于mp4文件没有音频而引起的。因此,我检查了导致错误的文件,但它实际上确实有音频。为了 100% 确定 MoviePy 正确地将文件转换为音频,我还单独对该文件进行了转换。这次,MoviePy 成功地将文件转换为音频。

为什么 MoviePy 本身可以处理该文件,但在转换之前的 46 个文件后却不起作用?使用 MoviePy 可以转换的文件数量/视频长度是否有限制?我在网上找不到任何有关此的信息。


这个错误信息表明,在处理到第 47 个文件时, clip.audio 返回了 None ,意味着 MoviePy 没有成功地从视频文件中提取音频。但这与你单独转换该文件时 MoviePy 能成功提取音频相矛盾。

这可能是以下几个原因导致的:

  1. 内存泄漏: 每次循环中,你都创建了 VideoFileClip AudioFileClip 对象,但没有显式地释放它们占用的内存。尽管你调用了 close() 方法,但这可能不足以释放所有资源,尤其是在处理大量文件时。随着循环进行,内存泄漏可能导致 MoviePy 无法正常工作,最终导致错误。

  2. 文件特定问题: 虽然你已经检查了出错的文件,但该文件可能存在一些 MoviePy 难以处理的特殊问题,例如编码问题、损坏的帧等。这可能导致 MoviePy 在特定情况下无法提取音频。

  3. MoviePy 版本问题: 你使用的 MoviePy 版本可能存在 bug,导致在处理特定数量的文件后出现问题。

为了解决这个问题,你可以尝试以下几个方法:

  1. 显式释放内存: 在每次循环结束后,使用 del 语句显式地删除 VideoFileClip AudioFileClip 对象,以确保释放它们占用的内存: python del audio del clip

  2. 跳过出错文件并记录: try...except 块中调用 write_audiofile ,捕获 AttributeError 并跳过出错文件,同时记录出错文件名,以便后续排查: python try: audio.write_audiofile(to_directory + folders[i] + str(id) + ".mp3") except AttributeError: print(f"Error processing file: {filename}") with open("error_log.txt", "a") as f: f.write(f"{filename}\n") continue

  3. 更新 MoviePy: 尝试更新 MoviePy 到最新版本,看看问题是否得到解决: bash pip install --upgrade moviepy

  4. 使用其他库: 如果以上方法都无法解决问题,你可以考虑使用其他 Python 库来提取音频,例如 librosa pydub

希望这些方法能帮助你解决问题!如果还有其他问题,请随时提出。

标签:python,moviepy
From: 78802929

相关文章

  • 如何在 wxPython 的 for 循环中添加文本输入框?
    我是wxPython的新手,正在开发一个带有GUI的基本程序,让用户标记图像。现在,当用户单击“导入”按钮时,他们可以选择一个目录。然后,代码使用matplotlib在for循环中显示该目录中的每个图像。但是,我不知道如何在for循环中访问用户输入。这就是该函数现在的样子:importmatplo......
  • 【Python】字母 Rangoli 图案
    一、题目YouaregivenanintegerN.YourtaskistoprintanalphabetrangoliofsizeN.(RangoliisaformofIndianfolkartbasedoncreationofpatterns.)Differentsizesofalphabetrangoliareshownbelow:#size3----c------c-b-c--c-b-a-b-c--c......
  • python 闭包、装饰器
    一、闭包:1.外部函数嵌套内部函数 2.外部函数返回内部函数 3.内部函数可以访问外部函数局部变量         闭包(Closure)是指在一个函数内部定义的函数,并且内部函数可以访问外部函数的局部变量,即使外部函数已经执行完毕,这种现象称为闭包。在Python中,闭包常常用......
  • 掌握 IPython %%time 魔法命令:高效测量代码块执行时间
    引言在编程和数据分析中,了解代码的执行时间是优化性能的关键步骤。IPython,作为一个强大的交互式计算环境,提供了多种工具来帮助用户测量和优化代码。其中,%%time魔法命令是IPython中用来测量代码块执行时间的便捷工具。本文将详细介绍%%time魔法命令的使用方法,并通过一......
  • 探索 IPython 中的 %%javascript 魔法命令:运行 JavaScript 代码的秘籍
    引言IPython是一个强大的交互式计算环境,它不仅支持Python语言,还通过各种魔法命令扩展了其功能。其中,%%javascript魔法命令是IPython扩展中一个非常有趣的特性,它允许用户在IPython环境中直接运行JavaScript代码。这对于需要在数据科学和科学计算中使用JavaScript......
  • pythonasm库分析,看看你和自学编程小学生的差距
    下面是pythonasm.asm库的源代码fromkeystoneimport*fromcapstoneimport*assembly_instructions=[]#储存汇编指令的列表#汇编指令写入列表defmov(reg1,reg2):assembly_instructions.append(f"mov{reg1},{reg2}")defdb(value):assembly_instructio......
  • 【Python系列】Python 中的垃圾收集:深入理解与实践
    ......
  • Python酷库之旅-第三方库Pandas(050)
    目录一、用法精讲181、pandas.Series.var方法181-1、语法181-2、参数181-3、功能181-4、返回值181-5、说明181-6、用法181-6-1、数据准备181-6-2、代码示例181-6-3、结果输出182、pandas.Series.kurtosis方法182-1、语法182-2、参数182-3、功能182-4、返回值1......
  • 使用 python matplotlib 和 metpy 添加辅助 y 轴
    我知道这个问题似乎与这里的许多其他问题类似,但我已经尝试过它们,不幸的是它们都没有解决我在尝试添加辅助y轴时当前面临的问题。问题是很简单,但我找不到任何可以修复它的东西:在SkewT图上添加辅助y轴会更改图的y限制,而不仅仅是添加轴。基本上,我希望添加辅......
  • Python实现基于卷积神经网络的恶意代码分类系统(设计思路概述)
    这个设计是关于一个基于卷积神经网络(CNN)的恶意代码分类系统,其主要目标是对恶意代码进行自动分类,帮助用户识别并防范不同类型的恶意软件。以下是该系统的设计思路、方法及实现过程的详细解释:设计思路恶意代码图像化:由于直接对恶意代码的源代码或二进制形式进行分类难度较......