You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MoviePy读取视频时长失败报错:OSError问题求助

问题

我正在开发一个项目,需要提取视频中的音频,再将音频转录为文本保存至TXT文件。此前运行正常的Python代码今日出现错误,代码如下:

from numpy import clip
import speech_recognition as sr
import moviepy.editor as mp
from moviepy.editor import *

#lectura de video
clip = mp.VideoFileClip("/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.mp4").subclip(0,150)

#extraemos el audio
clip.audio.write_audiofile("/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.wav")

#iniciamos el speechrecognition
r = sr.Recognizer()

#leemos el archivo audio extraido
audio = sr.AudioFile("/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.wav")
print("audio extraido")

#lectura de audio
with audio as source:
    r.adjust_for_ambient_noise(source)
    clean_file = r.record(source)

print("lectura terminada")
#reconocemos la voz del audio
result = r.recognize_google(clean_file,language="es-ES")

print("")
print(result)
#escribimos el texto en un nuevo archivo txt
with open('/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Trans/Arroz_meloso_carabineros.txt','w') as file:
    file.write("RECOGNIZED SPEECH: \n") 
    file.write(result)
    #file.write(" "+result)

print("\nEscritura terminada")

报错信息:

OSError: MoviePy error: failed to read the duration of file /Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.mp4.
Here are the file infos returned by ffmpeg:

ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.mp4: Invalid argument

解决方案

1. 检查文件路径与权限

  • 确认OneDrive同步状态:文件可能因同步未完成导致损坏或无法访问,等待同步结束后重试,或把视频复制到本地非OneDrive目录测试。
  • 简化文件路径:路径中的空格和复杂层级可能引发解析问题,将视频移至简单路径(如/Users/leti/test.mp4),修改代码路径后重新运行。
  • 修复文件权限:在终端执行chmod +r "/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.mp4",确保当前用户有读取权限。

2. 验证视频文件完整性

  • 手动播放视频:用播放器打开视频,确认文件未损坏、能正常播放,若损坏则重新获取完整文件。
  • 用ffmpeg检测文件:在终端执行ffmpeg -i "/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.mp4",若输出错误,执行ffmpeg -i input.mp4 -c copy output_fixed.mp4重新封装修复视频。

3. 调整代码与依赖版本

  • 分离链式调用:把VideoFileClip和subclip拆分为两步,避免潜在异常:
clip = mp.VideoFileClip("/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.mp4")
clip = clip.subclip(0, 150)
  • 更新依赖:执行pip install --upgrade moviepy升级MoviePy,同时将ffmpeg更新至最新稳定版(Mac可通过brew install ffmpeg安装,其他系统用对应包管理器)。

4. 替代方案:直接用ffmpeg提取音频

如果MoviePy仍有问题,跳过它用ffmpeg命令行提取音频:

ffmpeg -i "/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.mp4" -ss 0 -t 150 -acodec pcm_s16le -ar 16000 "/Users/leti/OneDrive - Universidad Europea de Madrid/Proyecto Computacion I/Videos sin procesar/Sergio Procesados/Arroz_meloso_carabineros.wav"

之后保留代码中SpeechRecognition部分的逻辑即可。

内容的提问来源于stack exchange,提问作者Letie18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:41:28