ffmpeg_extract_subclip函数和moviepy字符串输出错误

ffmpeg_extract_subclip function and moviepy string output error

我一直在开发这个小应用程序来下载和剪切 Youtube 视频。 它工作正常但是错误或格式错误的消息是我没有解决的问题。在切割过程中,使用了 ffmpeg_extract_subclip 函数,在那之后,我得到了以下奇怪的错误:

下面,脚本工作正常。

负责剪辑视频的函数

# cutting the video by section
def cut_video(video_local_path, start_time, end_time, final_file):

    print("- Cutting your video...")
    ffmpeg_extract_subclip(video_local_path, time_to_sec(start_time), time_to_sec(end_time), targetname=f"{final_file}.mp4")

如有必要,您可以在github上查看完整代码here

我已经广泛阅读了 ffmpeg 和 moviepy 的 API,在 vscode 上调试并检查了像 VideoFileClip 这样的替代品,但它永远不会给我相同的性能。

提前致谢。

有几种方法可以解决此问题。

1.暂时重定向 stdout/stderr

this post

2。直接使用FFmpeg

moviepy appears to be depending on imageio-ffmpeg 因为其 FFmpeg 支持,imageio-ffmpegIMAGEIO_FFMPEG_EXE 环境路径获取 FFmpeg 路径 在安装包时下载 FFmpeg 可执行文件.因此,您应该能够执行以下操作


import imageio_ffmpeg
import subprocess as sp

ffmpeg_path = imageio_ffmpeg.get_ffmpeg_exe()

sp.run([ffmpeg_path, '-ss', start_time, '-to', end_time, '-i', video_local_path, 
       final_file, '-y'], stderr=sp.NULL, stdout=sp.NULL)

现在,如果您仅将 moviepy 用于此操作(以及其他 FFmpeg 操作),则可以将其完全删除并将 ffmpeg_path 设置为 FFmpeg 路径。 并通过 ffmpeg-downloader or static-ffmpeg 包下载 FFmpeg 二进制文件。如果您在多个 venvs 中使用 FFmpeg,前者是更好的选择(因为它将 FFmpeg 文件保存在 OS 指定的用户数据区域,因此它只下载一次)。后者是 100% 自动下载方法,类似于 imageio-ffmpeg,但没有多余的装饰

[编辑:imageio-ffmpeg 不会自行下载 FFmpeg,因此您的系统上应该已经有 FFmpeg 可执行文件。]