使用 cx_freeze 编译时找不到 ffmpeg 可执行文件
ffmpeg executable not found when compiled with cx_freeze
我从 ffmpy
代码构建了一个可执行文件,我用 cx_freeze
编译了它。正如预期的那样,它可以在我的 PC 上运行,我认为这是因为我在 Windows.
上安装了 ffmpeg
但是,我需要这个编译后的代码可以在任何 PC 上运行,而不仅仅是安装了 ffmpeg
的地方。
当我 运行 可执行文件时,ffmpy
错误显示 Executable "ffmpeg" not found
.
这是我的 setup.py
cx_freeze
。这个 setup.py
适用于任何我想编译的东西,除了使用 ffmpeg
的地方。
import sys
from cx_Freeze import setup, Executable
from cx_Freeze import setup
from distutils.core import Extension
import os
os.environ['TCL_LIBRARY'] = r'C:\Users\Acer\Miniconda3\envs\updated\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Users\Acer\Miniconda3\envs\updated\tcl\tk8.6'
addtional_mods = ['numpy.core._methods', 'numpy.lib.format']
setup(
name = 'programm',
version = '5.0.1',
description = 'PyQt',
options = {'build_exe': {'includes': addtional_mods}},
executables = [Executable('ffmpy_test.py', base = "Win32GUI")])
我的问题是,我的 ffmpy_test.py
可执行文件如何在编译目录中找到 ffmpeg.exe
。我试图将 ffmpeg 目录放在那里,但那没有用。
这是我编译的测试代码:
from ffmpy import FFmpeg
ff = FFmpeg(inputs={'input.wmv': None}, outputs={'output.mp4': None})
ff.cmd
'ffmpeg -i input.ts output.mp4'
ff.run()
此导入语句:from ffmpy import FFmpeg
在我的 python 代码中从 ffmpy
module.This class 导入 FFmpeg
class在 C:/ffmpeg/bin/ffmpeg.exe
上寻找 ffmpeg.exe
,其中 ffmpeg
安装在我的 Windows.
上
受到@l'L'l 评论的启发,我研究了 ffmpeg
是如何在 ffmpy
模块的 FFmpeg
class 中导入的。
在ffmpy
模块中:
class FFmpeg(object):
"""Wrapper for various `FFmpeg <https://www.ffmpeg.org/>`_ related applications (ffmpeg,
ffprobe).
"""
def __init__(self, executable='ffmpeg', global_options=None, inputs=None, outputs=None):
...
因此,我需要更改 executable
参数中的路径,以便将导入语句定向到我手动放置在代码所在目录中的 ffmpeg
目录。
但是,我在我的代码中修改了 executable
参数的默认值,而不是在 ffmpy
模块中,像这样:
from ffmpy import FFmpeg
import os
d = os.getcwd()
ff = FFmpeg(executable=d+'/ffmpeg/bin/ffmpeg.exe',inputs={'input.wmv': None}, outputs={'output.mp4': None})
ff.cmd
'ffmpeg -i input.wmv output.mp4'
ff.run()
我从 ffmpy
代码构建了一个可执行文件,我用 cx_freeze
编译了它。正如预期的那样,它可以在我的 PC 上运行,我认为这是因为我在 Windows.
ffmpeg
但是,我需要这个编译后的代码可以在任何 PC 上运行,而不仅仅是安装了 ffmpeg
的地方。
当我 运行 可执行文件时,ffmpy
错误显示 Executable "ffmpeg" not found
.
这是我的 setup.py
cx_freeze
。这个 setup.py
适用于任何我想编译的东西,除了使用 ffmpeg
的地方。
import sys
from cx_Freeze import setup, Executable
from cx_Freeze import setup
from distutils.core import Extension
import os
os.environ['TCL_LIBRARY'] = r'C:\Users\Acer\Miniconda3\envs\updated\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Users\Acer\Miniconda3\envs\updated\tcl\tk8.6'
addtional_mods = ['numpy.core._methods', 'numpy.lib.format']
setup(
name = 'programm',
version = '5.0.1',
description = 'PyQt',
options = {'build_exe': {'includes': addtional_mods}},
executables = [Executable('ffmpy_test.py', base = "Win32GUI")])
我的问题是,我的 ffmpy_test.py
可执行文件如何在编译目录中找到 ffmpeg.exe
。我试图将 ffmpeg 目录放在那里,但那没有用。
这是我编译的测试代码:
from ffmpy import FFmpeg
ff = FFmpeg(inputs={'input.wmv': None}, outputs={'output.mp4': None})
ff.cmd
'ffmpeg -i input.ts output.mp4'
ff.run()
此导入语句:from ffmpy import FFmpeg
在我的 python 代码中从 ffmpy
module.This class 导入 FFmpeg
class在 C:/ffmpeg/bin/ffmpeg.exe
上寻找 ffmpeg.exe
,其中 ffmpeg
安装在我的 Windows.
受到@l'L'l 评论的启发,我研究了 ffmpeg
是如何在 ffmpy
模块的 FFmpeg
class 中导入的。
在ffmpy
模块中:
class FFmpeg(object):
"""Wrapper for various `FFmpeg <https://www.ffmpeg.org/>`_ related applications (ffmpeg,
ffprobe).
"""
def __init__(self, executable='ffmpeg', global_options=None, inputs=None, outputs=None):
...
因此,我需要更改 executable
参数中的路径,以便将导入语句定向到我手动放置在代码所在目录中的 ffmpeg
目录。
但是,我在我的代码中修改了 executable
参数的默认值,而不是在 ffmpy
模块中,像这样:
from ffmpy import FFmpeg
import os
d = os.getcwd()
ff = FFmpeg(executable=d+'/ffmpeg/bin/ffmpeg.exe',inputs={'input.wmv': None}, outputs={'output.mp4': None})
ff.cmd
'ffmpeg -i input.wmv output.mp4'
ff.run()