导入ffmpeg后moviepy.editor仍报ffmpeg未找到错误的原因
问题描述
编写Python视频处理脚本时,计划先通过pytube库下载目标YouTube视频,再调用moviepy实现视频裁剪、旋转、画中画合成并导出GIF,对应实现代码如下:
#from pytube import YouTube as YT #How to get video.mp4 ''' url = 'https://www.youtube.com/watch?v=JC-EGagoM3k' vid = YT(url) Streams = vid.streams filtered = vid.streams.filter(progressive = True, mime_type = 'video/mp4') filtered.get_highest_resolution().download(filename = 'Video.mp4') ''' import ffmpeg import moviepy from moviepy.editor import * clip = (VideoFileClip('Video.mp4').subclip((1,22),(1,23)).rotate(180)) screenshot = clip.crop(x2 = clip.w/2).to_ImageClip(0.2).set_duration(clip.duration) c = CompositeVideoClip([clip,screenshot]) clip.write_gif('clip.gif')
运行代码后抛出如下报错:
核心疑问:代码中已经显式导入了ffmpeg模块,为何moviepy.editor仍会抛出ffmpeg未找到的错误?
错误根因
你代码里import ffmpeg导入的是Python第三方封装库ffmpeg-python,这只是一个Python层的FFmpeg调用包装,并不是moviepy运行依赖的FFmpeg原生可执行程序。
moviepy的所有视频读写、剪辑、编码操作都需要直接调用系统层面的FFmpeg二进制文件,和你有没有装Python的ffmpeg包没有关系。只装Python的ffmpeg库、没有安装原生FFmpeg程序并配置到系统路径时,moviepy自然会报找不到ffmpeg的错误。
解决方案
- 安装原生FFmpeg程序,根据自己的操作系统选择对应方式:
- Windows:下载官方编译好的FFmpeg压缩包,解压后将包内
bin目录的绝对路径添加到系统PATH环境变量,重启IDE/终端后执行ffmpeg -version,能正常输出版本信息即配置生效 - Mac:通过Homebrew执行
brew install ffmpeg即可自动完成安装配置 - Debian/Ubuntu系Linux:执行
sudo apt update && sudo apt install ffmpeg完成安装
- Windows:下载官方编译好的FFmpeg压缩包,解压后将包内
- 代码中
import ffmpeg的语句对moviepy识别FFmpeg没有任何作用,可以直接删除。 - 如果不想修改系统环境变量,可以在导入moviepy编辑模块前,手动指定FFmpeg可执行文件的路径,示例代码:
from moviepy.config import change_settings # 替换为你本地ffmpeg可执行文件的完整路径,Windows下注意路径转义 change_settings({"FFMPEG_BINARY": "C:/ffmpeg/bin/ffmpeg.exe"}) # 之后再导入moviepy.editor相关模块 from moviepy.editor import *
- 额外注意:你现有代码最后导出GIF调用的是原
clip对象,不是合成后的画中画对象c,最终导出的GIF不会包含你做的半屏截图层,需要将最后一行改为c.write_gif('clip.gif')才能得到预期的画中画效果。
内容的提问来源于stack exchange,提问作者InfiniteCodeR
相关产品推荐
相关产品推荐

