Moviepy 无法加载视频

问题描述 投票:0回答:1

在 ubuntu 24.04.1 上使用 python 3.11.10 和 moviepy 1.0.3(在 Windows 10 上的 VirtualBox 7.1.3 中),我在加载视频剪辑时遇到问题。测试代码只是

from moviepy.editor import VideoFileClip
clip = VideoFileClip("testvideo.ts")

但是错误是

Traceback (most recent call last):
  File "/home/alex/.cache/pypoetry/virtualenvs/pypdzug-WqasAXAr-py3.11/lib/python3.11/site-packages/moviepy/video/io/ffmpeg_reader.py", line 285, in ffmpeg_parse_infos
    line = [l for l in lines if keyword in l][index]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/alex/Repos/pypdzug/tester.py", line 5, in <module>
    clip = VideoFileClip("testvideo.ts")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/alex/.cache/pypoetry/virtualenvs/pypdzug-WqasAXAr-py3.11/lib/python3.11/site-packages/moviepy/video/io/VideoFileClip.py", line 88, in __init__
    self.reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt,
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/alex/.cache/pypoetry/virtualenvs/pypdzug-WqasAXAr-py3.11/lib/python3.11/site-packages/moviepy/video/io/ffmpeg_reader.py", line 35, in __init__
    infos = ffmpeg_parse_infos(filename, print_infos, check_duration,
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/alex/.cache/pypoetry/virtualenvs/pypdzug-WqasAXAr-py3.11/lib/python3.11/site-packages/moviepy/video/io/ffmpeg_reader.py", line 289, in ffmpeg_parse_infos
    raise IOError(("MoviePy error: failed to read the duration of file %s.\n"
OSError: MoviePy error: failed to read the duration of file testvideo.ts.
Here are the file infos returned by ffmpeg:

ffmpeg version 4.2.2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8 (Debian 8.3.0-6)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
  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

它说无法读取文件的持续时间,但文件可以正常播放(带有

mplayer
)并且
ffmpeg -i testvideo.ts
返回

ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
  configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
Input #0, mpegts, from 'testvideo.ts':
  Duration: 00:10:10.13, start: 0.133333, bitrate: 3256 kb/s
  Program 1 
    Metadata:
      service_name    : 2024-10-04 11:49:49.917
      service_provider: gvos-6.0
  Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080, 15 fps, 15 tbr, 90k tbn

这里明确给出了时长为10分10.13秒。那么导致此错误/问题的原因可能是什么?

python ffmpeg virtualbox moviepy ubuntu-24.04
1个回答
0
投票

FFMPEG_BINARY

通常,您可以将其保留为默认值(“ffmpeg-imageio”),在这种情况下,imageio 将下载正确的 ffmpeg 二进制文件(首次使用时),然后始终使用该二进制文件。
第二个选项是“自动检测”。在这种情况下,ffmpeg 将是计算机上找到的任何二进制文件:通常是 ffmpeg(在 Linux/macOS 上)或 ffmpeg.exe(在 Windows 上)。
最后,您可以通过指定确切的路径将其设置为使用磁盘上特定位置的二进制文件。

使用此代码:

import os
os.environ["FFMPEG_BINARY"] = "/path/to/custom/ffmpeg"

其中路径是 ffmpeg 6.1.1-3ubuntu5 的路径,它可能在您的

PATH
中,它可能位于此处
/usr/local/bin/bin/ffmpeg
,如果不只是从 https://ffmpeg.org/ 下载 ffmpeg 6.1.2下载.html#releases 并使用它

为什么:

从错误中进行调试: moviepy 默认使用 ffmpeg 版本

4.2.2-static
(错误说明),您的电脑中有 ffmpeg 版本 6.1.1-3ubuntu5(使用 ffmpeg -i *.ts 在终端输出中说明),它能够读取视频时间, moviepy 还指出“这也可能意味着您正在使用已弃用的 FFMPEG 版本。例如,在 Ubuntu/Debian 上,存储库中的版本已弃用。请从网站更新到最新版本。”在类似错误的最后一行这里这也是“代码在Windows上运行良好”的原因在这里ig

因此,使用能够处理 moviepy 中的 .ts 文件(即 6.1.1)的 ffmpeg 将是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.