Download the ffprobe archive on macOS - #854
Conversation
FfprobePlatformDefaults pointed the macOS branch at evermeet.cx's *ffmpeg*
archive, but every consumer searches the extracted files for a binary named
"ffprobe". The download succeeds, the extraction finds no matching binary, and
installation reports failure:
[INF] Downloaded ffprobe archive SHA256=...
[INF] No ffprobe binary found in extracted files under .../config/ffmpeg
[WRN] ffprobe install did not produce the expected binary at .../ffmpeg/ffprobe
[WRN] ffprobe was not installed or auto-install disabled
The leftover in the config directory is a 78 MB file named "ffmpeg" and no
"ffprobe", which confirms the wrong asset is being fetched.
Point macOS at the ffprobe release instead. Linux is unaffected (the static
tarball contains both binaries) and so is Windows (the "essentials" archive
ships ffprobe.exe), which is why this only breaks macOS.
Use the "getrelease" endpoint so the current build is tracked rather than
pinning 6.0, which is now several years old.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
We have both written this fix, which I only noticed sweeping our own branches. Ours is #786, opened before yours and stale on 1.2.2, so I am not raising this to stake a claim. There is one substantive difference and I think it matters. The URLs differ in where the extension sits. Yours is
if (downloadUrl.EndsWith(".zip", ...) || downloadUrl.EndsWith(".ffmpeg.zip", ...))
{
// ZipArchive extraction
}
if (downloadUrl.EndsWith(".tar.xz", ...) || downloadUrl.EndsWith(".tar.gz", ...) || downloadUrl.EndsWith(".tgz", ...))
{
// tar extraction
}
File.Move(tmpFile, safeFfprobePath);
return true;
I have read that rather than run it. I have not downloaded from either URL, and I do not know whether evermeet's If the I have no attachment to our URL and would rather one of these landed than that we both sat here. Worth saying that our branch carries a test asserting every platform's configured URL ends in a suffix the extractor recognises, which is the check that would have caught this, and it would apply to your URL just as well as ours. Happy to send that test on its own against whichever URL you settle on, if that is useful. |
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630) (cherry picked from commit 529e40e2982bd62c7bed0bef78764d99722661d0)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630) (cherry picked from commit 529e40e2982bd62c7bed0bef78764d99722661d0)
…convention Local-stack only. PR Listenarrs#786 was cut before BackendArchitectureTests started requiring test classes to inherit BaseTests, and it is deliberately not rebased upstream while the Listenarrs#854 conversation is open. On the combined stack that convention test fails, so the class is brought up to date here rather than on the branch. (cherry picked from commit bf9500e31c1fdc73e8dabf04da707c0c4b23b630) (cherry picked from commit 529e40e2982bd62c7bed0bef78764d99722661d0)
Summary
FfprobePlatformDefaults.GetDownloadUrl()returns the ffmpeg archive for macOS, but every consumer looks for a binary namedffprobein the extracted files. The download succeeds and the install then fails:The residue in the config directory confirms the wrong asset is fetched — a 78 MB file named
ffmpeg, and noffprobe:Consequence: on macOS the unmatched scan runs with
ffprobePath == null, so embedded-tag extraction is skipped entirely and books import with only path-derived metadata.macOS is the only affected platform. Linux downloads a static tarball containing both binaries, and the Windows "essentials" archive ships
ffprobe.exe— so both happen to satisfy theffprobesearch by accident.Changes
Fixed
https://evermeet.cx/ffmpeg/getrelease/ffprobe/zip) rather than the ffmpeg archive.The
getreleaseendpoint tracks the current build instead of pinningffmpeg-6.0.zip, which is several years old.Testing
Downloaded the corrected URL and confirmed the archive contains a working
ffprobethat depends only on system frameworks:Placed at the expected path, the running instance picks it up with no restart, and tag extraction works against a real library:
Notes
Only the URL changes; the download, checksum, extraction and install paths are untouched. Users who already have a working
ffprobein their config directory are unaffected, since installation short-circuits when the binary is present.🤖 Generated with Claude Code