吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 257|回复: 8
收起左侧

[求助] pyinstaller 打包exe报错求助

[复制链接]
mm3344 发表于 2024-11-18 10:04
最近想写一个压缩视频的小程序,没打包前运行没问题,但是用pyinstaller打包后就报错,源码如下,求大神指点。
报错信息如图。
[Python] 纯文本查看 复制代码
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)[0] + "_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()
IMG_0208.jpg

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sunyue2719 发表于 2024-11-18 10:53
使用PyInstaller的--hidden-import
[Shell] 纯文本查看 复制代码
pyinstaller --hidden-import=moviepy --hidden-import=moviepy.audio --hidden-import=moviepy.video your_script.py
22kGDS 发表于 2024-11-18 11:23
PJwail 发表于 2024-11-18 11:37
ssslike 发表于 2024-11-18 13:50
根据错误栈看一下吧,不在你贴的代码里面
PaulLiang77 发表于 2024-11-18 14:00
PJwail 发表于 2024-11-18 11:37
一般我都是给到GPT问下原因.....

gpt怎么用呀
qq405228772 发表于 2024-11-18 14:52
[Python] 纯文本查看 复制代码
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)[0] + "_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()
pyjiujiu 发表于 2024-11-18 15:05
压缩视频的小任务,没必要调用第三方库,直接调用ffmpeg 就行了,打包就非常简单了
只不过,ffmpeg 要另外下载,然后加到电脑 PATH 中去(这是很简单的,且对于工作机来说 是必备的)

*比如代码(AI写的,没写gui)

[Python] 纯文本查看 复制代码
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('')

rootbot007 发表于 2024-11-19 13:49
总结一下就是ffmpeg 路径问题
  • 错误信息显示与 moviepy 和 imageio 有关,尤其是在加载 ffmpeg 可执行文件时出错。
  • imageio 的 get_ffmpeg_exe() 方法未能正确找到 ffmpeg 的路径,这可能是由于环境中未正确安装 ffmpeg 或路径未配置。

解决方法参考图片中的方法

问题解答

问题解答
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-4 00:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表