From 58f1b7419b3a39458b9bcdcc23a150606476af1d Mon Sep 17 00:00:00 2001 From: WyattBlue Date: Mon, 5 Jan 2026 20:45:22 -0500 Subject: [PATCH 1/2] Try setting arch to x86_64 --- .github/workflows/build-ffmpeg.yml | 4 ++-- README.rst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 5d9e389a..4299751c 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -33,7 +33,7 @@ jobs: arch: x86_64 shell: bash - os: windows-latest - arch: AMD64 + arch: x86_64 shell: 'msys2 {0}' msys_prefix: mingw-w64-x86_64 msys_system: MINGW64 @@ -69,7 +69,7 @@ jobs: path-type: inherit - name: Build FFmpeg env: - CIBW_ARCHS: ${{ matrix.arch }} + CIBW_ARCHS: ${{ matrix.msys_prefix && 'AMD64' || matrix.arch }} CIBW_BEFORE_BUILD: python scripts/build-ffmpeg.py /tmp/vendor --community CIBW_BEFORE_BUILD_WINDOWS: python scripts\build-ffmpeg.py C:\cibw\vendor --community CIBW_BUILD: cp311-* diff --git a/README.rst b/README.rst index 95cf1d67..776453b7 100644 --- a/README.rst +++ b/README.rst @@ -7,7 +7,7 @@ users to easily install PyAV without perform error-prone compilations. The builds are provided for several platforms: -- Linux (x86_64, aarch64) +- Linux (x86_64, aarch64) - macOS (x86_64, arm64) - Windows (x86_64) From 9eec3654688481f6beeb32ad350bff690eb50cc1 Mon Sep 17 00:00:00 2001 From: WyattBlue Date: Tue, 6 Jan 2026 01:20:17 -0500 Subject: [PATCH 2/2] Rewrite tarball naming func. Skip building frontends --- scripts/build-ffmpeg.py | 106 ++++++++++++++++++---------------------- scripts/cibuildpkg.py | 26 +--------- 2 files changed, 48 insertions(+), 84 deletions(-) diff --git a/scripts/build-ffmpeg.py b/scripts/build-ffmpeg.py index dcf71fd2..dd61e68d 100644 --- a/scripts/build-ffmpeg.py +++ b/scripts/build-ffmpeg.py @@ -6,8 +6,9 @@ import platform import shutil import subprocess +import sys -from cibuildpkg import Builder, Package, When, fetch, get_platform, log_group, run +from cibuildpkg import Builder, Package, When, fetch, log_group, run plat = platform.system() is_musllinux = plat == "Linux" and platform.libc_ver()[0] != "glibc" @@ -66,37 +67,11 @@ def calculate_sha256(filename: str) -> str: ] codec_group = [ - Package( - name="aom", - source_url="https://storage.googleapis.com/aom-releases/libaom-3.13.1.tar.gz", - sha256="19e45a5a7192d690565229983dad900e76b513a02306c12053fb9a262cbeca7d", - requires=["cmake"], - build_system="cmake", - build_arguments=[ - "-DENABLE_DOCS=0", - "-DENABLE_EXAMPLES=0", - "-DENABLE_TESTS=0", - "-DENABLE_TOOLS=0", - ], - build_parallel=False, - ), - Package( - name="dav1d", - source_url="https://code.videolan.org/videolan/dav1d/-/archive/1.5.2/dav1d-1.5.2.tar.bz2", - sha256="c748a3214cf02a6d23bc179a0e8caea9d6ece1e46314ef21f5508ca6b5de6262", - requires=["meson", "nasm", "ninja"], - build_system="meson", - ), - Package( - name="libsvtav1", - source_url="https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v3.1.0/SVT-AV1-v3.1.0.tar.bz2", - sha256="8231b63ea6c50bae46a019908786ebfa2696e5743487270538f3c25fddfa215a", - build_system="cmake", - ), Package( name="lame", source_url="http://deb.debian.org/debian/pool/main/l/lame/lame_3.100.orig.tar.gz", sha256="ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e", + build_arguments=["--disable-gtktest"], ), Package( name="ogg", @@ -127,6 +102,33 @@ def calculate_sha256(filename: str) -> str: sha256="b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b", requires=["ogg"], ), + Package( + name="aom", + source_url="https://storage.googleapis.com/aom-releases/libaom-3.13.1.tar.gz", + sha256="19e45a5a7192d690565229983dad900e76b513a02306c12053fb9a262cbeca7d", + build_system="cmake", + build_arguments=[ + "-DENABLE_DOCS=0", + "-DENABLE_EXAMPLES=0", + "-DENABLE_TESTS=0", + "-DENABLE_TOOLS=0", + ], + build_parallel=False, + ), + Package( + name="dav1d", + source_url="https://code.videolan.org/videolan/dav1d/-/archive/1.5.2/dav1d-1.5.2.tar.bz2", + sha256="c748a3214cf02a6d23bc179a0e8caea9d6ece1e46314ef21f5508ca6b5de6262", + requires=["nasm"], + build_system="meson", + ), + Package( + name="libsvtav1", + source_url="https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v3.1.0/SVT-AV1-v3.1.0.tar.bz2", + sha256="8231b63ea6c50bae46a019908786ebfa2696e5743487270538f3c25fddfa215a", + build_system="cmake", + build_arguments=["-DBUILD_APPS=OFF"], + ), Package( name="vpx", source_url="https://github.com/webmproject/libvpx/archive/v1.15.1.tar.gz", @@ -136,6 +138,7 @@ def calculate_sha256(filename: str) -> str: "--disable-examples", "--disable-tools", "--disable-unit-tests", + "--disable-dependency-tracking", ], ), Package( @@ -168,16 +171,8 @@ def calculate_sha256(filename: str) -> str: source_url="https://github.com/cisco/openh264/archive/refs/tags/v2.6.0.tar.gz", sha256="558544ad358283a7ab2930d69a9ceddf913f4a51ee9bf1bfb9e377322af81a69", source_filename="openh264-2.6.0.tar.gz", - requires=["meson", "ninja"], build_system="meson", ), - Package( - name="fdk_aac", - source_url="https://github.com/mstorsjo/fdk-aac/archive/refs/tags/v2.0.3.tar.gz", - sha256="e25671cd96b10bad896aa42ab91a695a9e573395262baed4e4a2ff178d6a3a78", - when=When.commercial_only, - build_system="cmake", - ), Package( name="opencore-amr", source_url="http://deb.debian.org/debian/pool/main/o/opencore-amr/opencore-amr_0.1.5.orig.tar.gz", @@ -191,10 +186,9 @@ def calculate_sha256(filename: str) -> str: source_url="https://code.videolan.org/videolan/x264/-/archive/32c3b801191522961102d4bea292cdb61068d0dd/x264-32c3b801191522961102d4bea292cdb61068d0dd.tar.bz2", sha256="d7748f350127cea138ad97479c385c9a35a6f8527bc6ef7a52236777cf30b839", # assembly contains textrels which are not supported by musl - build_arguments=["--disable-asm"] if is_musllinux else [], + build_arguments=["--disable-cli"] + (["--disable-asm"] if is_musllinux else []), # parallel build runs out of memory on Windows build_parallel=plat != "Windows", - when=When.community_only, ), Package( name="x265", @@ -202,22 +196,7 @@ def calculate_sha256(filename: str) -> str: sha256="a31699c6a89806b74b0151e5e6a7df65de4b49050482fe5ebf8a4379d7af8f29", build_system="cmake", source_dir="source", - when=When.community_only, ), - # Package( - # name="srt", - # source_url="https://github.com/Haivision/srt/archive/refs/tags/v1.5.4.tar.gz", - # sha256="d0a8b600fe1b4eaaf6277530e3cfc8f15b8ce4035f16af4a5eb5d4b123640cdd", - # build_system="cmake", - # build_arguments=( - # [r"-DOPENSSL_ROOT_DIR=C:\Program Files\OpenSSL"] - # if plat == "Windows" - # else ["-DENABLE_ENCRYPTION=OFF"] - # if plat == "Darwin" - # else [""] - # ), - # when=When.community_only, - # ), ] alsa_package = Package( @@ -245,7 +224,6 @@ def calculate_sha256(filename: str) -> str: name="libvpl", source_url="https://github.com/intel/libvpl/archive/refs/tags/v2.16.0.tar.gz", sha256="d60931937426130ddad9f1975c010543f0da99e67edb1c6070656b7947f633b6", - requires=["cmake"], build_system="cmake", build_arguments=[ "-DINSTALL_LIB=ON", @@ -305,6 +283,20 @@ def download_tars(packages: list[Package]) -> None: print(f"{name} generated an exception: {exc}") raise +def make_tarball_name() -> str: + isArm64 = platform.machine() in {"arm64", "aarch64"} + + if sys.platform.startswith("win"): + return "ffmpeg-windows-aarch64" if isArm64 else "ffmpeg-windows-x86_64" + elif sys.platform.startswith("linux"): + if is_musllinux: + return "ffmpeg-musllinux-aarch64" if isArm64 else "ffmpeg-musllinux-x86_64" + else: + return "ffmpeg-manylinux-aarch64" if isArm64 else "ffmpeg-manylinux-x86_64" + elif sys.platform.startswith("darwin"): + return "ffmpeg-macos-arm64" if isArm64 else "ffmpeg-macos-x86_64" + else: + return "ffmpeg-unknown" def main(): parser = argparse.ArgumentParser("build-ffmpeg") @@ -335,8 +327,8 @@ def main(): output_dir = os.path.abspath("output") if plat == "Linux" and os.environ.get("CIBUILDWHEEL") == "1": output_dir = "/output" - output_tarball = os.path.join(output_dir, f"ffmpeg-{get_platform()}.tar.gz") + output_tarball = os.path.join(output_dir, make_tarball_name() + ".tar.gz") if os.path.exists(output_tarball): return @@ -403,7 +395,6 @@ def main(): "--enable-libopus", "--enable-libspeex", "--enable-libsvtav1", - # "--enable-libsrt" if community else "--disable-libsrt", "--enable-libtwolame", "--enable-libvorbis", "--enable-libvpx", @@ -424,9 +415,6 @@ def main(): if use_libvpl: ffmpeg_package.build_arguments.append("--enable-libvpl") - if not community: - ffmpeg_package.build_arguments.append("--enable-libfdk_aac") - if plat == "Darwin": ffmpeg_package.build_arguments.extend( [ diff --git a/scripts/cibuildpkg.py b/scripts/cibuildpkg.py index 2215bd11..d6a1b959 100644 --- a/scripts/cibuildpkg.py +++ b/scripts/cibuildpkg.py @@ -18,28 +18,6 @@ def fetch(url: str, path: str) -> None: run(["curl", "-L", "-o", path, url]) -def get_platform() -> str: - """ - Get the current platform tag. - """ - system = platform.system() - machine = platform.machine() - if system == "Linux": - if platform.libc_ver()[0] == "glibc": - return f"manylinux_{machine}" - else: - return f"musllinux_{machine}" - elif system == "Darwin": - return f"macosx_{machine}" - elif system == "Windows": - if struct.calcsize("P") * 8 == 64: - return "win_amd64" - else: - return "win32" - else: - raise Exception(f"Unsupported system {system}") - - @contextlib.contextmanager def chdir(path: str) -> Iterator[None]: """ @@ -353,9 +331,7 @@ def _build_x265(self, package: Package, for_builder: bool) -> None: flags_high_bits = [] disable_sve = platform.system() == "Linux" and platform.machine() == "aarch64" - platform_str = get_platform() - - if not ("x86_64" in platform_str or "amd64" in platform_str): + if platform.machine() not in {"x86_64", "amd64"}: flags_high_bits.append("-DENABLE_ASSEMBLY=0") flags_high_bits.append("-DENABLE_ALTIVEC=0")