name: Install FFmpeg (Windows) description: >- Download a pinned FFmpeg GPL build for Windows from BtbN/FFmpeg-Builds and put ffmpeg.exe / ffprobe.exe on PATH. We bypass `choco install ffmpeg` because the Chocolatey community feed regularly returns 503 / 504 / NuGet resolver errors with no retry, which makes it unsuitable as a CI dependency. From the consumer's perspective this is equivalent — `where ffmpeg` (the PR #336 validation) and `findFFmpeg()` both pass. inputs: release-url: description: >- URL of a BtbN/FFmpeg-Builds zip to install. Pinned to a specific autobuild tag so a new upstream nightly can't silently change encoder behavior under us. The asset filename embeds the git hash, so both the tag and the filename must be bumped together when upgrading. required: false default: https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2026-04-30-13-44/ffmpeg-N-124278-gcc3ca17127-win64-gpl.zip max-attempts: description: Max download attempts before failing. required: false default: "8" runs: using: composite steps: - name: Install FFmpeg from BtbN/FFmpeg-Builds shell: pwsh run: | $ErrorActionPreference = 'Stop' $url = '${{ inputs.release-url }}' $maxAttempts = [int]'${{ inputs.max-attempts }}' $zip = Join-Path $env:RUNNER_TEMP 'ffmpeg.zip' $dir = Join-Path $env:RUNNER_TEMP 'ffmpeg' New-Item -ItemType Directory -Force -Path $dir | Out-Null for ($attempt = 1; $attempt -le $maxAttempts; $attempt++) { Write-Host "--- Downloading ffmpeg from BtbN/FFmpeg-Builds (attempt $attempt/$maxAttempts) ---" try { Invoke-WebRequest -Uri $url -OutFile $zip -UseBasicParsing break } catch { Write-Warning "Download failed: $($_.Exception.Message)" if ($attempt -eq $maxAttempts) { throw } Start-Sleep -Seconds (30 * $attempt) } } Write-Host "--- Extracting ffmpeg ---" Expand-Archive -Path $zip -DestinationPath $dir -Force $bin = Get-ChildItem -Path $dir -Recurse -Filter 'ffmpeg.exe' | Select-Object -First 1 if (-not $bin) { throw "ffmpeg.exe not found after extracting $url" } Add-Content -Path $env:GITHUB_PATH -Value $bin.Directory.FullName Write-Host "--- ffmpeg sanity check ---" & $bin.FullName -version | Select-Object -First 1