Add cx_Freeze setup script for Windows build ffmpeg

This commit is contained in:
Mohamed
2025-08-27 01:05:36 +03:00
committed by GitHub
parent 13b481bd40
commit f5ee279bfc
+138
View File
@@ -0,0 +1,138 @@
"""
cx_Freeze setup script for YTSage with FFmpeg bundle
Supports building executables, MSI installers, and ZIP distributions with FFmpeg
"""
import sys
from pathlib import Path
from cx_Freeze import setup, Executable
import os
# Get FFmpeg path from environment variable or use default
FFMPEG_PATH = os.environ.get('FFMPEG_PATH', r'C:\Users\atela\AppData\Local\ffmpeg\ffmpeg-7.1.1-full_build\bin')
# Build options for executable
build_exe_options = {
# Packages to include
"packages": [
"PySide6.QtCore",
"PySide6.QtGui",
"PySide6.QtWidgets",
"src.gui.ytsage_gui_main",
"src.core.ytsage_utils",
"src.core.ytsage_downloader",
"src.core.ytsage_ffmpeg",
"src.core.ytsage_yt_dlp",
"src.core.ytsage_style",
"src.core.ytsage_logging",
"src.gui.ytsage_gui_format_table",
"src.gui.ytsage_gui_video_info",
"src.gui.ytsage_gui_dialogs",
"src.gui.ytsage_gui_dialogs.ytsage_dialogs_base",
"src.gui.ytsage_gui_dialogs.ytsage_dialogs_custom",
"src.gui.ytsage_gui_dialogs.ytsage_dialogs_ffmpeg",
"src.gui.ytsage_gui_dialogs.ytsage_dialogs_selection",
"src.gui.ytsage_gui_dialogs.ytsage_dialogs_settings",
"src.gui.ytsage_gui_dialogs.ytsage_dialogs_update",
"src.utils.ytsage_constants",
# Additional packages that might be needed
"requests",
"PIL", # Pillow is imported as PIL
"packaging",
"markdown",
"playsound3",
"loguru",
"setuptools"
],
# Packages to exclude (to reduce size)
"excludes": [
"PySide6.QtBluetooth",
"PySide6.QtNetwork",
"PySide6.QtOpenGL",
"PySide6.QtPrintSupport",
"PySide6.QtSvg",
"PySide6.QtTest",
"PySide6.QtXml",
"PySide6.QtSql",
"PySide6.QtHelp",
"PySide6.QtMultimedia",
"PySide6.QtQml",
"PySide6.QtQuick",
"PySide6.QtWebEngineCore",
"PIL.ImageDraw",
"PIL.ImageFont",
"numpy",
"scipy",
"wx",
"pandas",
"tkinter",
"yt_dlp", # Excluded - downloaded dynamically at runtime (all imports are conditional)
"unittest",
"test",
"tests"
],
# Include files (assets + FFmpeg binaries)
"include_files": [
("assets/Icon/icon.png", "assets/Icon/icon.png"),
("assets/sound/notification.mp3", "assets/sound/notification.mp3"),
("assets/branding/icons/YTSage.ico", "YTSage.ico"),
# FFmpeg binaries
(os.path.join(FFMPEG_PATH, "ffmpeg.exe"), "ffmpeg.exe"),
(os.path.join(FFMPEG_PATH, "ffprobe.exe"), "ffprobe.exe"),
(os.path.join(FFMPEG_PATH, "ffplay.exe"), "ffplay.exe"),
],
# Zip includes (can help reduce file count)
"zip_include_packages": "*",
"zip_exclude_packages": [],
# Other options
"optimize": 2, # Optimize bytecode
"build_exe": "dist/YTSage-FFmpeg", # Output directory for executable
}
# MSI build options
bdist_msi_options = {
"upgrade_code": "{87654321-4321-8765-CBA9-987654321CBA}", # Different GUID for FFmpeg version
"add_to_path": False,
"initial_target_dir": r"[ProgramFilesFolder]\YTSage",
"install_icon": "assets/branding/icons/YTSage.ico",
"summary_data": {
"author": "oop7",
"comments": "YouTube Video Downloader with FFmpeg - Complete video processing solution",
"keywords": "youtube, downloader, video, audio, converter, ffmpeg"
}
}
# Base configuration for Windows GUI application
base = None
if sys.platform == "win32":
base = "Win32GUI" # This prevents console window from appearing
# Executable configuration
executable = Executable(
"main.py",
base=base,
icon="assets/branding/icons/YTSage.ico",
target_name="YTSage-v4.8.0-ffmpeg.exe",
copyright="Copyright (c) 2024-2025 YTSage",
trademarks="YTSage"
)
# Setup configuration
setup(
name="YTSage-FFmpeg",
version="4.8.0",
description="YouTube Video Downloader with FFmpeg",
author="oop7",
author_email="oop7_support@proton.me",
url="https://github.com/oop7/ytsage",
license="MIT",
options={
"build_exe": build_exe_options,
"bdist_msi": bdist_msi_options
},
executables=[executable]
)