1 votes

Comment récupérer la dernière archive binaire FFmpeg pour Windows alors qu'il ne semble pas y avoir de moyen évident d'automatiser cette opération ?

Il s'agit de la page officielle de téléchargement de FFmpeg : http://ffmpeg.org/download.html

Pour Windows, il s'agit d'un lien vers : https://ffmpeg.zeranoe.com/builds/

J'ai étudié attentivement ces deux pages et je ne vois pas comment je pourrais automatiser les tâches suivantes :

  1. Déterminer quelle est la version stable actuelle de FFmepg.
  2. Déterminez l'URL de l'archive Windows pour cette version stable actuelle.

Si je tape localement :

ffmpeg.exe -version

Il sort ceci :

ffmpeg version N-94664-g0821bc4eee Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.1 (GCC) 20190807

Il semble que "N-94664-g0821bc4eee" soit ma version actuelle. Ahem. Je ne comprends franchement pas pourquoi ils ne peuvent pas utiliser un simple schéma "1.2.3", mais je suppose que je vais juste vérifier si ma version actuelle est différents à partir de ce qui a été déterminé comme étant la dernière version stable, plutôt que d'essayer de les "comparer" en tant qu'entiers ou chaînes de versions saines.

Je viens de passer par la même chose avec ExifTool, mais au moins ils avaient une URL simple pour afficher la dernière version actuelle, et avaient un schéma URL prévisible pour le fichier ZIP Windows contenant les binaires. Ce n'est pas le cas avec FFmpeg, ce qui est vraiment étrange pour moi.

(S'il vous plaît, ne me dites pas d'utiliser Chocolately.)

1voto

Anaksunaman Points 14675

Notez que dans la réponse ci-dessous, je me concentre sur les builds FFmpeg fournis par Zeranoe. Ces informations ont été mises à jour en juillet 2020. Veuillez me pardonner si je manque quelque chose ou si je couvre quelque chose que vous connaissez déjà. =)


TL;DR

Zeranoe a la "dernière" version .zip pour ses versions Git les plus récentes, sous licence GPL 3.0 (je crois que ces fichiers sont mis à jour tous les quelques jours). Si vous êtes satisfait des versions liées statiquement, vous pouvez les obtenir à partir de :

Notez que les builds liés statiquement ne sont pas les seuls builds disponibles. En particulier, vous pouvez également substituer shared (pour les bibliothèques partagées) ou dev (pour les versions dev) à la place de static dans les URLs ci-dessus pour accéder à ces builds Git également.

Malheureusement, pour les versions régulières non Git (ce que je suppose que vous entendez par "version stable actuelle"), il ne semble pas y avoir de fichier équivalent mis à jour automatiquement que j'ai pu trouver. Vous êtes donc probablement coincé en examinant le HTML pour les versions récentes.


Vue d'ensemble

Je ne vois pas comment je pourrais automatiser les tâches suivantes [...].

Détermination de la version stable actuelle

En supposant que vous ne souhaitez pas utiliser la "dernière" version de Git .zip détaillés ci-dessus, le processus de base (actuellement) serait probablement d'utiliser un script (ou script) pour :

  • Télécharger une page HTML donnée depuis Zeranoe.

  • Extraire seulement le <a> de cette page.

  • Utilisez le texte de ces <a> pour déterminer la version non-Git de FFmpeg que vous souhaitez télécharger.

  • Transmettre une URL script déterminée contenant ces informations de version à un outil de téléchargement (éventuellement le script lui-même).

Pour de plus amples détails concernant la première étape, voir le document Options de la source de la page vers la fin de cette réponse. J'ai également inclus un exemple PowerShell extrêmement simple après cette section, qui peut vous aider dans les domaines suivants <a> l'extraction d'éléments de texte. Soyez conscient qu'aucun des <a> dans les sources des pages HTML concernées semblent contenir les URL de téléchargement complètes pour le moment.

Zeranoe semble ordonner automatiquement ses listes de sorties pour les sorties régulières et les sorties Git, donc si vous ne voulez pas analyser <a> ou des noms de fichiers individuellement, vous pouvez peut-être tricher en utilisant simplement une position fixe pour déterminer la dernière version non-Git.


C'est-à-dire que la dernière version/fichier FFmpeg non-Git est actuellement contenue soit dans le premier fichier <a> dans la source de la page (pour la version rendue de l'élément https://ffmpeg.zeranoe.com/builds/ ) ou l'avant-dernier/troisième avant-dernier <a> dans la source de la page (pour les listes de répertoire générées par le serveur).


Détermination de l'URL d'une archive Windows

Je ne crois pas qu'il y ait un bon moyen de automatiquement déterminer l'URL de l'archive Windows pour une version donnée. Vous devrez probablement vous fier simplement à des observations sur la façon dont le site est actuellement construit (ce qui signifie que vous devrez probablement indiquer à votre script de téléchargement comment construire les URL).

Noms des versions

En parlant uniquement de l'actuel Constructions FFmpeg de Zeranoe déterminer les dernières versions de FFmpeg à partir de <a> Le texte de l'élément ne devrait pas être trop difficile.

  • Pour les versions régulières, un simple schéma "1.2.3" (comme vous l'appelez) est utilisé. Donc, par exemple, la version 4.3 est plus récente que la version 4.2.3 .

  • Pour les builds Git à jour (qui sont publiés entre les versions "majeures", ci-dessus), le schéma actuel consiste à les marquer par la date à laquelle ils ont été construits ( year/month/day-gitstuff ).

En supposant qu'un build Git a été marqué 20200628-4cfcfb3 la partie après le tiret (ex. -4cfcfb3 ) pourrait être abandonné, laissant 20200628 et la conclusion que cette version de FFmpeg a été construite le 28-06-2020 (ou peut-être le 28-06-2020, selon l'endroit où vous vivez).

Si je tape ffmpeg.exe -version il produit [...]

Les versions actuelles de FFmpeg pour Windows de Zeranoe utilisent les mêmes schémas de dénomination dans leur -version bannières comme pour les noms de version figurant sur le site web :

ex. Bannières FFmpeg de Zeranoe

ffmpeg version 4.3 Copyright (c) 2000-2020 ...

ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 ...

Télécharger le format URL

Je viens de passer par la même chose avec ExifTool, mais au moins ils avaient une URL simple pour afficher la dernière version actuelle, et avaient un schéma d'URL prévisible pour le fichier ZIP Windows contenant les binaires. Ce n'est pas le cas avec FFmpeg, ce qui est vraiment étrange pour moi.

Bien que cela ne soit pas immédiatement évident, tout le JavaScript sur https://ffmpeg.zeranoe.com/builds/ permet de "reconstruire" à la volée l'URL liée au bouton primaire "Download Build" (près du bas de la page), en la reliant à différentes options de téléchargement statique.

En jouant avec quelques options différentes, la construction de l'URL de téléchargement final est assez simple :

ex. Construction de l'URL de téléchargement de Zeranoe FFmpeg

url/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip)

Où :

  • url es https://ffmpeg.zeranoe.com/builds/ .

  • platform est l'une des trois options suivantes : win64 , win32 o macos64 .

  • linking est l'une des trois options suivantes : static , shared o dev .

  • ffmpeg est juste "ffmpeg".

  • version est la version (ex. 4.3 o 20200628-4cfcfb3 ).

  • Appending only .zip signifie que cette version de FFmpeg est sous licence GPL 3.0 et qu'ajouter -lgpl.zip signifie que cette version de FFmpeg est sous une licence LGPL 3.0.

Donc, en supposant que quelqu'un souhaite télécharger :

  • La version Windows 64-bit, bibliothèque partagée, LGPL 3.0 de FFmpeg 4.3.
  • La version Windows 32 bits, à liaison statique, sous licence GPL 3.0 de FFmpeg Git build 20200628-4cfcfb3

Ces URLs ressembleraient à :

ex. URLs FFmpeg de Zeranoe

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

Notez qu'il semble que la licence LGPL 3.0 ne soit disponible qu'avec les versions non-Git de FFmpeg distribuées par Zeranoe. Donc ex. ffmpeg-20200628-4cfcfb3-win32-static-lgpl.zip ne serait pas valable.


Sommes de contrôle SHA256

Le lien vers le fichier SHA256 approprié pour un téléchargement donné est essentiellement la même construction d'URL avec "sha256" inséré entre les caractères primaires url y platform et ".sha256" ajouté à la fin :

ex. Construction de l'URL SHA256 de Zeranoe

url/sha256/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip).sha256

Les URLs SHA256 correspondantes pour les fichiers ci-dessus ressembleraient à ceci :

ex. 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

Options de la source de la page

L'information sur la version de FFmpeg est contenue en texte clair dans <a> (ancre) dans les sources des pages HTML concernées de Zeranoe. Vous pouvez utiliser soit la version rendue de https://ffmpeg.zeranoe.com/builds/ ou des listes de répertoires générées par le serveur pour une construction donnée afin de fournir ces informations. <a> mais il y a certaines choses dont il faut être conscient.

En utilisant ffmpeg.zeranoe.com/builds/

Utilisation de https://ffmpeg.zeranoe.com/builds/ pour recueillir des informations sur la version actuelle a quelques inconvénients :

  • <a> Les éléments contenant des informations sur la version ne contiennent que des informations sur la version :

    <a role="menuitem" href="#" target="_self" class="dropdown-item">4.3</a>

    Cela signifie que vous devrez construire vous-même le nom de fichier de votre téléchargement préféré.

  • <a> éléments pour https://ffmpeg.zeranoe.com/builds/ ne sont pas que des numéros de version. Chaque <a> spécifie un morceau de texte déroulant, ce qui signifie que vous devrez trier les numéros de version manuellement dans votre script.

  • <a> éléments pour https://ffmpeg.zeranoe.com/builds/ ne sont rendus (via JavaScript) que si la page web est visible dans une fenêtre du navigateur.

Ce dernier point signifie que les outils normaux de ligne de commande (ex. curl , wget etc.) ne peut pas être utilisé pour recueillir la source de la page à partir de https://ffmpeg.zeranoe.com/builds/ (bien qu'ils puissent toujours être utilisés pour télécharger des fichiers). En ce qui concerne l'automatisation du navigateur (par exemple, l'enregistrement de la source de la page avec la fonction Selenium WebDriver gréement Save As avec quelque chose comme AutoHotkey etc.), la fenêtre du navigateur doit être visible (c'est-à-dire que vous ne pouvez pas utiliser l'option headless avec Firefox/Chrome et Selenium).

Utilisation des listes d'annuaire générées par le serveur

Avec les inconvénients énumérés ci-dessus, l'analyse de la source de la page HTML pour https://ffmpeg.zeranoe.com/builds/ peut ne pas être l'option préférable. Actuellement, https://ffmpeg.zeranoe.com/builds/ est simplement une interface vers un certain nombre de répertoires web disponibles en libre accès avec les formulaires :

ex. Répertoires FFmpeg de Zeranoe

url/platform/linking

y

ex. Répertoires SHA256 de Zeranoe

url/sha256/platform/linking

Où (encore) :

  • url es https://ffmpeg.zeranoe.com/builds/ .

  • platform est l'une des trois options suivantes : win64 , win32 o macos64 .

  • linking est l'une des trois options suivantes : static , shared o dev .

Donc pour tous les constructions liées statiquement pour Windows 32 bits hébergées par Zeranoe (et leurs sommes de contrôle SHA256 correspondantes), des listes complètes de répertoires seraient disponibles à l'adresse suivante :

ex. Constructions statiques de Windows 32 bits de Zeranoe

https://ffmpeg.zeranoe.com/builds/win32/static/

https://ffmpeg.zeranoe.com/builds/sha256/win32/static/

Étant donné que ces listes ne contiennent pas de JavaScript (elles renvoient du HTML ordinaire), vous pouvez extraire les données nécessaires à l'exécution de l'opération. <a> sans les rendre d'abord dans un navigateur :

<a href="ffmpeg-4.3-win32-dev.zip">ffmpeg-4.3-win32-dev.zip</a>

Cela signifie qu'ils ne seront pas potentiellement manquants et que la source de la page pour chaque liste de répertoire peut être récupérée avec des outils de ligne de commande (ex. curl , wget etc.).


_Une petite mise en garde, curl -O ( --remote-name ) fera échouer la récupération du répertoire distant. Vous devez spécifier manuellement un nom pour le fichier de sortie (par ex. curl -o zeranoe_win32.html https://ffmpeg.zeranoe.com/builds/win32/static/ )._


Exemple Powershell

Aller chercher <a> texte de l'élément à partir d'une liste de répertoire générée par le serveur de Zeranoe dans PowerShell :

ex. extrait_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

Notez que, dans ce cas, le texte de la rubrique href= est identique au texte entre <a> y <\a> (comme indiqué précédemment, aucune <a> contient une URL de téléchargement complète pour le moment) :

ex. Sortie de extract_anchor_text.ps1 (ligne de commande)

[...]
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

Si vous souhaitez en savoir plus sur l'analyse syntaxique des pages Web HTML avec PowerShell, vous pouvez consulter le lien dont cet exemple est tiré. aquí .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X