pyinstaller 打包exe报错求助
最近想写一个压缩视频的小程序,没打包前运行没问题,但是用pyinstaller打包后就报错,源码如下,求大神指点。报错信息如图。
import tkinter as tkfrom tkinter import filedialog, messagebox
from moviepy.video.io.VideoFileClip import VideoFileClip
class VideoCompressorApp:
def __init__(self, root):
self.root = root
self.root.title("视频压缩器")
# 创建选择视频按钮
self.select_button = tk.Button(root, text="选择视频文件", command=self.select_file)
self.select_button.pack(pady=20)
# 创建压缩按钮
self.compress_button = tk.Button(root, text="压缩视频", command=self.compress_video, state=tk.DISABLED)
self.compress_button.pack(pady=20)
# 显示选择的文件路径
self.file_path_label = tk.Label(root, text="")
self.file_path_label.pack(pady=10)
self.video_path = ""
def select_file(self):
self.video_path = filedialog.askopenfilename(filetypes=[("视频文件", "*.mp4 *.avi *.mov")])
if self.video_path:
self.file_path_label.config(text=self.video_path)
self.compress_button.config(state=tk.NORMAL)
def compress_video(self):
if not self.video_path:
messagebox.showerror("错误", "请先选择一个视频文件")
return
output_path = self.video_path.rsplit('.', 1) + "_compressed.mp4"
try:
with VideoFileClip(self.video_path) as video:
video.write_videofile(output_path, bitrate="500k")# 设定压缩比特率
messagebox.showinfo("成功", f"视频已压缩并保存为:\n{output_path}")
except Exception as e:
messagebox.showerror("错误", f"压缩视频时出错:{str(e)}")
if __name__ == "__main__":
root = tk.Tk()
app = VideoCompressorApp(root)
root.mainloop()
使用PyInstaller的--hidden-import
pyinstaller --hidden-import=moviepy --hidden-import=moviepy.audio --hidden-import=moviepy.video your_script.py
错误代码扔给AI分析一下就知道了 一般我都是给到GPT问下原因..... 根据错误栈看一下吧,不在你贴的代码里面 PJwail 发表于 2024-11-18 11:37
一般我都是给到GPT问下原因.....
gpt怎么用呀 import tkinter as tk
from tkinter import filedialog, messagebox
from moviepy.editor import VideoFileClip# 修正: 从moviepy.editor导入
class VideoCompressorApp:
def __init__(self, root):
self.root = root
self.root.title("视频压缩器")
# 创建选择视频按钮
self.select_button = tk.Button(root, text="选择视频文件", command=self.select_file)
self.select_button.pack(pady=20)
# 创建压缩按钮
self.compress_button = tk.Button(root, text="压缩视频", command=self.compress_video, state=tk.DISABLED)
self.compress_button.pack(pady=20)
# 显示选择的文件路径
self.file_path_label = tk.Label(root, text="")
self.file_path_label.pack(pady=10)
self.video_path = ""
def select_file(self):
self.video_path = filedialog.askopenfilename(filetypes=[("视频文件", "*.mp4 *.avi *.mov")])
if self.video_path:
self.file_path_label.config(text=self.video_path)
self.compress_button.config(state=tk.NORMAL)
def compress_video(self):
if not self.video_path:
messagebox.showerror("错误", "请先选择一个视频文件")
return
output_path = self.video_path.rsplit('.', 1) + "_compressed.mp4"
try:
with VideoFileClip(self.video_path) as video:
video.write_videofile(output_path, bitrate="500k")# 设定压缩比特率
messagebox.showinfo("成功", f"视频已压缩并保存为:\n{output_path}")
except Exception as e:
messagebox.showerror("错误", f"压缩视频时出错:{str(e)}")
if __name__ == "__main__":
root = tk.Tk()
app = VideoCompressorApp(root)
root.mainloop() 压缩视频的小任务,没必要调用第三方库,直接调用ffmpeg 就行了,打包就非常简单了
只不过,ffmpeg 要另外下载,然后加到电脑 PATH 中去(这是很简单的,且对于工作机来说 是必备的)
*比如代码(AI写的,没写gui)
import subprocess
import pathlib
def compress_video(input_path, bitrate='500k'):
input_path = pathlib.Path(input_path)
output_path = input_path.with_stem('(compressed)' + input_path.stem)
# ffmpeg 压缩命令
cmd = [
'ffmpeg',
'-i', input_path,# 输入文件
'-b:v', bitrate, # 设置视频比特率为500k
'-maxrate', f'{bitrate[:-1]}k',# 最大比特率与目标比特率相同
'-bufsize', '1M',# 缓冲区大小
'-y',# 覆盖输出文件
output_path
]
# 执行 ffmpeg 命令
subprocess.run(cmd, check=True)
print(f"视频已压缩到 {bitrate}{output_path.name}")
input_video = input('视频地址:').strip('"')
compress_video(input_video)
input('')
总结一下就是ffmpeg 路径问题:
[*]错误信息显示与 moviepy 和 imageio 有关,尤其是在加载 ffmpeg 可执行文件时出错。
[*]imageio 的 get_ffmpeg_exe() 方法未能正确找到 ffmpeg 的路径,这可能是由于环境中未正确安装 ffmpeg 或路径未配置。
解决方法参考图片中的方法
页:
[1]