
Dies ist die offizielle Download-Seite für FFmpeg:http://ffmpeg.org/download.html
Für Windows enthält es Links zu:https://ffmpeg.zeranoe.com/builds/
Ich habe diese beiden Seiten nun sorgfältig studiert und sehe keine Möglichkeit, die folgenden Aufgaben zu automatisieren:
- Bestimmen Sie, welche die aktuelle stabile Version von FFmepg ist.
- Ermitteln Sie die URL zum Windows-Archiv für diese aktuelle stabile Version.
Wenn ich lokal eingebe:
ffmpeg.exe -version
Es gibt Folgendes aus:
ffmpeg version N-94664-g0821bc4eee Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.1 (GCC) 20190807
Es sieht so aus, als ob "N-94664-g0821bc4eee" meine aktuelle Version ist. Ähm. Ich verstehe ehrlich gesagt nicht, warum sie nicht ein einfaches "1.2.3"-Schema verwenden können, aber ich denke, ich werde einfach prüfen, ob meine aktuelle Versionandersvon der Version, die als die neueste stabile Version ermittelt wurde, anstatt zu versuchen, sie als Ganzzahlen oder vernünftige Versionszeichenfolgen zu „vergleichen“.
Ich habe gerade dasselbe mit ExifTool erlebt, aber sie hatten zumindest eine einfache URL, um die aktuellste Version anzuzeigen, und ein vorhersehbares URL-Schema für die Windows-ZIP-Datei mit den Binärdateien. Dies ist bei FFmpeg nicht der Fall, was ich wirklich seltsam finde.
(Sagen Sie mir bitte nicht, dass ich Chocolately verwenden soll.)
Antwort1
Beachten Sie, dass ich mich in der folgenden Antwort auf die von Zeranoe bereitgestellten FFmpeg-Builds konzentriere. Diese Informationen waren auf dem Stand von Juli 2020. Bitte verzeihen Sie mir, wenn ich etwas übersehe oder etwas behandle, das Sie bereits wissen. =)
Kurz zusammengefasst
Zeranoe hat „neueste“ Build- .zip
Dateien für seine neuesten Git-Builds, lizenziert unter GPL 3.0 (ich glaube, diese werden alle paar Tage aktualisiert). Wenn Sie mit statisch verknüpften Versionen zufrieden sind, können Sie diese hier herunterladen:
https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip
https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-latest-win64-static.zip
Beachten Sie, dass statisch verknüpfte Builds nicht die einzigen verfügbaren Builds sind. Insbesondere können Sie in den obigen URLs auch shared
(für gemeinsam genutzte Bibliotheken) oder dev
(für Entwicklerversionen) anstelle von verwenden static
, um auch auf diese Git-Builds zuzugreifen.
Leider scheint es für reguläre Nicht-Git-Release-Versionen (was Sie vermutlich mit „aktuelle stabile Version“ meinen) keine entsprechende automatisch aktualisierte Datei zu geben, die ich finden konnte. Sie müssen also wahrscheinlich HTML für aktuelle Versionen prüfen.
Überblick
Ich sehe keine Möglichkeit, die folgenden Aufgaben zu automatisieren [...]
Ermitteln der aktuellen stabilen Version
Vorausgesetzt, Sie möchten nicht die oben beschriebenen Dateien der „neuesten“ Git-Version verwenden .zip
, besteht der grundlegende Prozess (derzeit) wahrscheinlich darin, ein Skript (oder mehrere Skripte) zu verwenden, um:
Laden Sie eine bestimmte HTML-Seite von Zeranoe herunter.
Extrahieren Sie nur die
<a>
Elemente von dieser Seite.Verwenden Sie den Text in diesen
<a>
Elementen, um die Nicht-Git-Release-Version von FFmpeg zu bestimmen, die Sie herunterladen möchten.Geben Sie eine vom Skript festgelegte URL mit diesen Versionsinformationen an ein Download-Tool weiter (möglicherweise an das Skript selbst).
Weitere Einzelheiten zum ersten Schritt finden Sie imSeitenquellenoptionenAbschnitt gegen Ende dieser Antwort. Ich habe nach diesem Abschnitt auch ein äußerst minimales PowerShell-Beispiel eingefügt, das bei der <a>
Extraktion von Textelementen hilfreich sein kann. Beachten Sie, dass <a>
derzeit keines der Elemente in den relevanten HTML-Seitenquellen vollständige Download-URLs zu enthalten scheint.
Zeranoe scheint seine Versionslisten für reguläre und Git-Versionen automatisch zu sortieren. Wenn Sie also keine Lust haben, <a>
Elemente oder Dateinamen einzeln zu analysieren, können Sie möglicherweise schummeln, indem Sie einfach eine festgelegte Position verwenden, um die neueste Nicht-Git-Version zu ermitteln.
Das bedeutet, dass die neueste Nicht-Git-FFmpeg-Version/der neueste Dateiname derzeit entweder im ersten <a>
Element der Seitenquelle (für die gerenderte Version von https://ffmpeg.zeranoe.com/builds/
) oder im vorletzten/drittletzten <a>
Element der Seitenquelle (für servergenerierte Verzeichnislisten) enthalten ist.
Bestimmen einer Windows-Archiv-URL
Ich glaube nicht, dass es einen guten Weg gibt,automatischBestimmen Sie die URL zum Windows-Archiv für eine bestimmte Version. Sie müssen sich wahrscheinlich einfach auf Beobachtungen verlassen, wie die Site derzeit aufgebaut ist (was bedeutet, dass Sie Ihrem Download-Skript wahrscheinlich mitteilen müssen, wie URLs aufgebaut werden sollen).
Versionsnamen
Wenn wir nur über die aktuelleFFmpeg-Builds von Zeranoe, es sollte nicht allzu schwierig sein, die neuesten Versionen von FFmpeg anhand <a>
des Elementtexts zu bestimmen.
Für reguläre Releases wird ein einfaches „1.2.3“-Schema (wie Sie es nennen) verwendet. Also
4.3
ist z. B. Version neuer als Version4.2.3
.Aktuelle Git-Builds (die zwischen den oben genannten „Hauptversionen“ veröffentlicht werden) werden derzeit nach dem Erstellungsdatum (
year/month/day-gitstuff
) gekennzeichnet.
Angenommen, ein Git-Build war mit gekennzeichnet , könnte 20200628-4cfcfb3
der Teil nach dem Bindestrich (z. B. ) weggelassen werden, woraus sich die Schlussfolgerung ziehen lässt, dass diese Version von FFmpeg am 28.06.2020 (oder vielleicht am 28.06.2020, je nachdem, wo Sie leben) erstellt wurde.-4cfcfb3
20200628
Wenn ich eingebe
ffmpeg.exe -version
, wird [...] ausgegeben.
Die aktuellen Versionen von FFmpeg für Windows von Zeranoe verwenden in ihren Bannern dieselben Namensschemata -version
wie für die auf der Website aufgeführten Versionsnamen:
zB Zeranoe FFmpeg Banner
ffmpeg version 4.3 Copyright (c) 2000-2020 ...
ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 ...
Download-URL-Format
Ich habe gerade dasselbe mit ExifTool erlebt, aber sie hatten zumindest eine einfache URL, um die aktuellste Version anzuzeigen, und ein vorhersehbares URL-Schema für die Windows-ZIP-Datei mit den Binärdateien. Dies ist bei FFmpeg nicht der Fall, was ich wirklich seltsam finde.
Auch wenn es nicht sofort ersichtlich ist, https://ffmpeg.zeranoe.com/builds/
rekonstruiert das JavaScript lediglich im Handumdrehen die URL, die mit der primären Schaltfläche „Download Build“ (unten auf der Seite) verknüpft ist, und verknüpft sie mit verschiedenen statischen Download-Optionen.
Wenn man ein paar verschiedene Optionen ausprobiert, ist die Erstellung der endgültigen Download-URL ziemlich unkompliziert:
Beispiel: Zeranoe FFmpeg Download-URL-Konstruktion
url/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip)
Wo:
url
Isthttps://ffmpeg.zeranoe.com/builds/
.platform
ist eine von drei Optionen:win64
,win32
odermacos64
.linking
ist eine von drei Optionen:static
,shared
oderdev
.ffmpeg
ist nur "ffmpeg".version
ist die Version (zB4.3
oder20200628-4cfcfb3
).Anhängen
.zip
bedeutet nur, dass die Version von FFmpeg unter einer GPL 3.0-Lizenz steht, und Anhängen-lgpl.zip
bedeutet, dass die Version von FFmpeg unter einer LGPL 3.0-Lizenz steht.
Angenommen, jemand möchte Folgendes herunterladen:
- Die Windows 64-Bit, gemeinsam genutzte Bibliothek, LGPL 3.0 lizenzierte Version von FFmpeg 4.3
- Die 32-Bit-Windows-Version von FFmpeg, statisch verknüpft und unter GPL 3.0 lizenziert, Git Build 20200628-4cfcfb3
Diese URLs würden wie folgt aussehen:
zB Zeranoe FFmpeg URLs
https://ffmpeg.zeranoe.com/builds/win64/shared/ffmpeg-4.3-win64-shared-lgpl.zip
https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20200628-4cfcfb3-win32-static.zip
Beachten Sie, dass die LGPL 3.0-Lizenz anscheinend nur mit Nicht-Git-Versionen von FFmpeg verfügbar ist, die von Zeranoe vertrieben werden. Beispiel ffmpeg-20200628-4cfcfb3-win32-static-lgpl.zip
wäre also nicht gültig.
SHA256-Prüfsummen
Der Link zur entsprechenden SHA256-Datei für einen bestimmten Download ist im Wesentlichen dieselbe URL-Konstruktion, wobei zwischen dem primären url
und dem „sha256“ eingefügt platform
und am Ende „.sha256“ angehängt wird:
Beispiel: Zeranoe SHA256 URL-Konstruktion
url/sha256/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip).sha256
Die entsprechenden SHA256-URLs für die oben genannten Dateien würden folgendermaßen aussehen:
zB Zeranoe FFmpeg SHA256 URLs
https://ffmpeg.zeranoe.com/builds/sha256/win64/shared/ffmpeg-4.3-win64-shared-lgpl.zip.sha256
https://ffmpeg.zeranoe.com/builds/sha256/win32/static/ffmpeg-20200628-4cfcfb3-win32-static.zip.sha256
Seitenquellenoptionen
FFmpeg-Versionsinformationen sind als Klartext in <a>
(Anker-)Elementen in den entsprechenden HTML-Seitenquellen von Zeranoe enthalten. Sie können entweder die gerenderte Version https://ffmpeg.zeranoe.com/builds/
oder servergenerierte Verzeichnislisten für einen bestimmten Build verwenden, um diese <a>
Elemente bereitzustellen. Dabei sind jedoch einige Dinge zu beachten.
Verwenden von ffmpeg.zeranoe.com/builds/
Die Verwendung https://ffmpeg.zeranoe.com/builds/
zum Sammeln aktueller Versionsinformationen hat einige Nachteile:
<a>
Elemente mit Versionsinformationen enthalten nur Versionsinformationen:<a role="menuitem" href="#" target="_self" class="dropdown-item">4.3</a>
Dies bedeutet, dass Sie den Dateinamen für Ihren bevorzugten Download selbst erstellen müssen.
<a>
Elemente fürhttps://ffmpeg.zeranoe.com/builds/
sind nicht alle nur Versionsnummern. Jeder<a>
Tag gibt einen Flyout-/Dropdown-Text an, was bedeutet, dass Sie die Versionsnummern in Ihrem Skript manuell sortieren müssen.<a>
Elementehttps://ffmpeg.zeranoe.com/builds/
werden nur dann gerendert (über JavaScript), wenn die Webseite in einem Browserfenster sichtbar ist.
Dieser letzte Punkt bedeutet, dass normale Befehlszeilentools (z. B. curl
, wget
, usw.) nicht verwendet werden können, um die Seitenquelle abzurufen https://ffmpeg.zeranoe.com/builds/
(sie können jedoch weiterhin zum Herunterladen von Dateien verwendet werden). Was die Browserautomatisierung betrifft (z. B. das Speichern der Seitenquelle mitSelenium WebDriver, Takelage Save As
mit etwas wieAutoHotkey, usw.), muss das Browserfenster sichtbar sein (d. h. Sie können headless
den Modus nicht mit Firefox/Chrome und Selenium verwenden).
Verwenden von servergenerierten Verzeichnislisten
Aufgrund der oben genannten Nachteile ist das Parsen der HTML-Seitenquelle https://ffmpeg.zeranoe.com/builds/
möglicherweise nicht die bevorzugte Option. Derzeit https://ffmpeg.zeranoe.com/builds/
ist lediglich ein Frontend für eine Reihe frei verfügbarer Webverzeichnisse mit den folgenden Formularen verfügbar:
zB Zeranoe FFmpeg-Verzeichnisse
url/platform/linking
Und
zB Zeranoe SHA256 Verzeichnisse
url/sha256/platform/linking
Wo (nochmals):
url
Isthttps://ffmpeg.zeranoe.com/builds/
.platform
ist eine von drei Optionen:win64
,win32
odermacos64
.linking
ist eine von drei Optionen:static
,shared
oderdev
.
So füralledie beispielsweise von Zeranoe gehosteten statisch verknüpften 32-Bit-Windows-Builds (und ihre entsprechenden SHA256-Prüfsummen), vollständige Verzeichnislisten wären verfügbar unter:
Beispiel: Zeranoe Windows 32-Bit statisch verknüpfte Builds
https://ffmpeg.zeranoe.com/builds/win32/static/
https://ffmpeg.zeranoe.com/builds/sha256/win32/static/
Da diese Auflistungen kein JavaScript enthalten (sie geben normales HTML zurück), können Sie die erforderlichen <a>
Elemente extrahieren, ohne sie zuerst in einem Browser darzustellen:
<a href="ffmpeg-4.3-win32-dev.zip">ffmpeg-4.3-win32-dev.zip</a>
Dies bedeutet, dass sie nicht möglicherweise fehlen und dass die Seitenquelle für jeden Verzeichniseintrag mit Befehlszeilentools (z. B. curl
, wget
, usw.) abgerufen werden kann.
Als kleine Einschränkung: curl -O
( --remote-name
) führt dazu, dass das Abrufen des Remote-Verzeichnisses fehlschlägt. Sie müssen manuell einen Namen für die Ausgabedatei angeben (z. B. curl -o zeranoe_win32.html https://ffmpeg.zeranoe.com/builds/win32/static/
).
Powershell-Beispiel
Abrufen <a>
von Elementtext aus einer servergenerierten Verzeichnisliste von Zeranoe in PowerShell:
Beispiel: extract_anchor_text.ps1
# Print the text associated with each <a> element for the given Zeranoe
# server-generated directory listing at the command line.
$SiteAdress = "https://ffmpeg.zeranoe.com/builds/win32/static/"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
# Get the href= value for each link
# $HttpContent.Links | Foreach {$_.href }
# Get the inner text between <a> and <\a> for each link
$HttpContent.Links | innerText
Beachten Sie, dass in diesem Fall der Text im Wert mit dem Text zwischen und href=
identisch ist (wie bereits erwähnt, enthält derzeit kein relevantes Element eine vollständige Download-URL):<a>
<\a>
<a>
Beispiel: extract_anchor_text.ps1 Ausgabe (Befehlszeile)
[...]
ffmpeg-20200626-7447045-win32-static.zip
ffmpeg-20200628-4cfcfb3-win32-static.zip
[...]
ffmpeg-4.3-win32-static-lgpl.zip
ffmpeg-4.3-win32-static.zip
Wenn Sie etwas mehr über das Parsen von HTML-Webseiten mit PowerShell lesen möchten, können Sie den Link besuchen, von dem dieses Beispiel stammtHier.