如何在我的Python程序的硬代码中包含FFMPEG?

时间:2019-05-30 00:30:53

标签: python ffmpeg export pyinstaller hardcode

我写了一个Python程序,使用ffmpeg进行编码,将音频文件从任何受支持的格式转换为.flac。 Ffmpeg已安装在我的计算机中,因此在我的计算机上运行它时没有任何问题。

我使用pyinstaller在.exe中对程序进行硬编码,现在我希望我的朋友尝试一下。 由于ffmpeg对于随机用户而言不像我的朋友那样容易安装,因此我希望以某种方式将其包含在我的程序中。

首先想到的是,我将包括一个脚本来自动执行ffmpeg安装过程,并为ffmpeg安装程序打包好我的东西,但是我不知道该怎么做。

这甚至可能吗?如果是,该怎么办?这是一个好的解决方案吗?如果不是,您有什么建议?

致谢

1 个答案:

答案 0 :(得分:0)

如果要在项目中使用外部文件,则需要将其捆绑到输出可执行文件中。只要可执行文件运行,它将把所有依赖项提取到temp目录中,并在代码中使用它。为此,您可以add-data标记。

首先,从here下载预编译的二进制文件。然后将内容提取到名为ffmpeg的文件夹中(脚本文件旁边)。在下面的示例中,应用(script.py)尝试使用ffplay播放示例视频。我假设输入视频的路径将作为外部参数传递给程序。

import subprocess
import os
import sys


def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)


def play():
   ffplay_path = "./ffmpeg/ffplay.exe"
   if len(sys.argv) > 1:
      file_path = sys.argv[1]
      p = subprocess.Popen([resource_path(ffplay_path), file_path])
   else:
      print("No file passed as argument!")


if __name__ == "__main__":
   play()

使用以下命令生成可执行文件:

pyinstaller -F --add-data "./ffmpeg/*;./ffmpeg/" script.py

并使用如下程序:

script.exe sample.mp4