python - 如何将 FFMPEG 导出到我的 Python 程序中?
问题描述
我为 Windows 10 编写了一个 Python 程序,它将音频文件从任何支持的格式转换为 .flac,并使用 FFMPEG 进行编码。
FFMPEG 已安装在我的计算机上,因此在我的计算机上运行该程序时没有任何问题。
我曾经PyInstaller
以 .exe 格式导出我的程序,现在我想在发行版中包含 FFMPEG,这样人们就不必单独下载它来运行我的脚本。
我可以将 FFMPEG 包装/包含到我的程序中,并在需要时自动安装/使用它吗?如何?
解决方案
如果你想在你的项目中使用外部文件,你需要将它捆绑到你的输出可执行文件中。每当您的可执行文件运行时,它都会将所有依赖项提取到临时目录中并在您的代码中使用它。为此,您可以add-data
标记。
首先,从这里下载预编译的二进制文件。然后将内容提取到名为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
推荐阅读
- java - 双精度不能转换为计算器不兼容的类型
- c# - 超过 SignalR 的 MaximumReceiveMessageSize 属性的消息大小会导致活动会话断开连接
- cmake - 配置 cmake 以使用自制库而不是系统提供的库
- python - 在 python 中的多标签问题中使用准确度分数的问题
- class - 自写类的操作重载 __add__ 发生了奇怪的内存访问问题
- android - Android TextView 文本选择弹出菜单多行?
- php - 如何在 Laravel 中将数组集合转换为雄辩风格的对象集合
- terraform - 尝试升级 Azure SQL DB 时 Terraform 抛出错误
- docker - 奇点和 github 包注册表
- sql - 对格式不同的日期进行排序 - SQL