
Esta es la página de descarga oficial de FFmpeg:http://ffmpeg.org/download.html
Para Windows, enlaza con:https://ffmpeg.zeranoe.com/builds/
He estudiado cuidadosamente ambas páginas ahora y no veo ninguna manera de automatizar las siguientes tareas:
- Determine cuál es la versión estable actual de FFmepg.
- Determine la URL del archivo de Windows para esta versión estable actual.
Si escribo localmente:
ffmpeg.exe -version
Produce esto:
ffmpeg version N-94664-g0821bc4eee Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.1 (GCC) 20190807
Parece que "N-94664-g0821bc4eee" es mi versión actual. Ejem. Francamente, no entiendo por qué no pueden usar un esquema simple "1.2.3", pero supongo que comprobaré si mi versión actual esdiferentede lo que se haya determinado que es la última versión estable, en lugar de intentar "compararlos" como números enteros o cadenas de versiones sanas.
Acabo de pasar por lo mismo con ExifTool, pero al menos tenían una URL simple para mostrar la última versión actual y tenían un esquema de URL predecible para el archivo ZIP de Windows que contiene los binarios. Este no es el caso de FFmpeg, lo cual me resulta realmente extraño.
(Por favor, no me digas que use Chocolately).
Respuesta1
Tenga en cuenta que en la respuesta a continuación, me estoy centrando en las compilaciones de FFmpeg proporcionadas por Zeranoe. Esta información estaba actualizada en julio de 2020. Perdóneme si me pierdo algo o cubro algo que ya sabe. =)
TL;DR
Zeranoe tiene .zip
archivos de compilación "más recientes" para sus compilaciones de Git más recientes, con licencia GPL 3.0 (creo que se actualizan cada pocos días). Si está satisfecho con las versiones vinculadas estáticamente, puede obtenerlas en:
https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip
https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-latest-win64-static.zip
Tenga en cuenta que las compilaciones vinculadas estáticamente no son las únicas compilaciones disponibles. En particular, también puede sustituir shared
(para bibliotecas compartidas) o dev
(para versiones de desarrollo) en lugar de static
en las URL anteriores para acceder también a esas compilaciones de Git.
Desafortunadamente, para las versiones regulares que no son de Git (lo que supongo que quieres decir con "versión estable actual"), no parece haber un archivo equivalente actualizado automáticamente que pueda encontrar. Por lo tanto, es probable que se quede atascado examinando HTML en busca de versiones recientes.
Descripción general
No veo ninguna manera en la que pueda automatizar las siguientes tareas [...]
Determinar la versión estable actual
Suponiendo que no desea utilizar los .zip
archivos de la versión "más reciente" de Git detallada anteriormente, el proceso básico (actualmente) probablemente sería utilizar un script (o scripts) para:
Descargue una página HTML determinada de Zeranoe.
Extraiga solo los
<a>
elementos de esa página.Utilice el texto de esos
<a>
elementos para determinar la versión de FFmpeg que no es Git y que desea descargar.Introduzca una URL determinada por el script que contenga la información de esa versión en alguna herramienta de descarga (posiblemente el propio script).
Para obtener más detalles sobre el primer paso, consulte laOpciones de origen de páginasección hacia el final de esta respuesta. También he incluido un ejemplo de PowerShell extremadamente mínimo después de esa sección que puede ayudar con <a>
la extracción de elementos de texto. Tenga en cuenta que ninguno de los <a>
elementos de las fuentes de páginas HTML relevantes parece contener URL de descarga completas en este momento.
Zeranoe parece ordenar automáticamente sus listados de lanzamientos para lanzamientos regulares y Git, por lo que si no le interesa analizar <a>
elementos o nombres de archivos individualmente, puede hacer trampa simplemente usando una posición establecida para determinar la última versión que no es Git.
Es decir, la última versión/nombre de archivo de FFmpeg que no es Git está actualmente contenido en el primer <a>
elemento de la fuente de la página (para la versión renderizada de https://ffmpeg.zeranoe.com/builds/
) o en el penúltimo/tercero al último <a>
elemento de la fuente de la página ( para listados de directorios generados por el servidor).
Determinar una URL de archivo de Windows
No creo que haya una buena manera deautomáticamentedetermine la URL del archivo de Windows para una versión determinada. Probablemente necesitarás simplemente confiar en las observaciones sobre cómo está construido actualmente el sitio (lo que significa que probablemente necesitarás indicarle a tu script de descarga cómo construir URL).
Nombres de versión
Hablando únicamente de la actualidadFFmpeg construye desde Zeranoe, determinar las últimas versiones de FFmpeg a partir <a>
del texto del elemento no debería ser demasiado difícil.
Para las versiones regulares, se utiliza un esquema simple "1.2.3" (como usted lo llama). Entonces ej. La versión
4.3
es más reciente que la versión4.2.3
.Para las compilaciones de Git actualizadas (que se publican entre las versiones "principales", arriba), el esquema actual es marcarlas por la fecha en que fueron compiladas (
year/month/day-gitstuff
).
Suponiendo que se marcó una compilación de Git 20200628-4cfcfb3
, la parte después del guión (ej. -4cfcfb3
) podría eliminarse, dejando 20200628
la conclusión de que esta versión de FFmpeg se creó el 28 de junio de 2020 (o quizás el 28 de junio de 2020, dependiendo de dónde). tu vives).
Si escribo
ffmpeg.exe -version
, me sale [...]
Las versiones actuales de FFmpeg para Windows de Zeranoe utilizan los mismos esquemas de nombres en sus -version
banners que los nombres de las versiones que figuran en el sitio web:
ex. Pancartas FFmpeg de Zeranoe
ffmpeg version 4.3 Copyright (c) 2000-2020 ...
ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 ...
Descargar formato de URL
Acabo de pasar por lo mismo con ExifTool, pero al menos tenían una URL simple para mostrar la última versión actual y tenían un esquema de URL predecible para el archivo ZIP de Windows que contiene los binarios. Este no es el caso de FFmpeg, lo cual me resulta realmente extraño.
Si bien puede que no sea inmediatamente obvio, todo lo https://ffmpeg.zeranoe.com/builds/
que hace JavaScript es "reconstruir" la URL vinculada al botón principal "Descargar compilación" (cerca de la parte inferior de la página) sobre la marcha, vinculándola a diferentes opciones de descarga estática.
Examinando algunas opciones diferentes, la construcción de la URL de descarga final es bastante sencilla:
ex. Construcción de URL de descarga de FFmpeg de Zeranoe
url/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip)
Dónde:
url
eshttps://ffmpeg.zeranoe.com/builds/
.platform
es una de tres opciones:win64
,win32
omacos64
.linking
es una de tres opciones:static
,shared
odev
.ffmpeg
es simplemente "ffmpeg".version
es la versión (ej.4.3
o20200628-4cfcfb3
).Agregar solo
.zip
significa que la versión de FFmpeg está bajo una licencia GPL 3.0 y agregar-lgpl.zip
significa que la versión de FFmpeg está bajo una licencia LGPL 3.0.
Entonces, suponiendo que alguien quisiera descargar:
- Biblioteca compartida de Windows de 64 bits, versión con licencia LGPL 3.0 de FFmpeg 4.3
- La versión Windows de 32 bits, vinculada estáticamente y con licencia GPL 3.0 de FFmpeg Git build 20200628-4cfcfb3
Estas URL se verían así:
ex. URL de 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
Tenga en cuenta que parece que la licencia LGPL 3.0 solo está disponible con versiones de FFmpeg que no sean Git distribuidas por Zeranoe. Entonces ej. ffmpeg-20200628-4cfcfb3-win32-static-lgpl.zip
no sería válido.
Sumas de comprobación SHA256
El enlace al archivo SHA256 apropiado para una descarga determinada es esencialmente la misma construcción de URL con "sha256" insertado entre el principal url
y platform
".sha256" añadido al final:
ex. Construcción de URL Zeranoe SHA256
url/sha256/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip).sha256
Las URL SHA256 correspondientes a los archivos anteriores se verían así:
ex. URL de Zeranoe FFmpeg SHA256
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
Opciones de origen de página
La información de la versión de FFmpeg está contenida como texto sin formato en <a>
elementos (anclados) en las fuentes de páginas HTML relevantes de Zeranoe. Puede utilizar la versión renderizada https://ffmpeg.zeranoe.com/builds/
o los listados de directorios generados por el servidor para una compilación determinada para proporcionar estos <a>
elementos, pero hay algunas cosas que debe tener en cuenta.
Usando ffmpeg.zeranoe.com/builds/
Usarlo https://ffmpeg.zeranoe.com/builds/
para recopilar información de la versión actual tiene algunas desventajas:
<a>
los elementos que contienen información de versión solo contienen información de versión:<a role="menuitem" href="#" target="_self" class="dropdown-item">4.3</a>
Esto significa que usted mismo deberá crear el nombre del archivo para su descarga preferida.
<a>
Los elementos parahttps://ffmpeg.zeranoe.com/builds/
no son todos solo números de versiones. Cada<a>
etiqueta especifica un fragmento de texto flotante/desplegable, lo que significa que deberá ordenar los números de versión manualmente en su secuencia de comandos.<a>
Los elementos parahttps://ffmpeg.zeranoe.com/builds/
solo se representan (a través de JavaScript) si la página web es visible en una ventana del navegador.
Este último elemento significa que las herramientas normales de línea de comandos (por ejemplo curl
, wget
, etc.) no se pueden usar para recopilar la fuente de la página https://ffmpeg.zeranoe.com/builds/
(aunque aún se pueden usar para descargar archivos). En cuanto a la automatización del navegador (por ejemplo, guardar la fuente de la página conControlador web de selenio, aparejando Save As
con algo comoAutoHotkey, etc.), la ventana del navegador debe estar visible (es decir, no puede usar headless
el modo con Firefox/Chrome y Selenium).
Uso de listados de directorios generados por el servidor
Con los inconvenientes enumerados anteriormente, analizar la fuente de la página HTML https://ffmpeg.zeranoe.com/builds/
puede no ser la opción preferible. Actualmente, https://ffmpeg.zeranoe.com/builds/
es simplemente una interfaz para una serie de directorios web disponibles abiertamente con los formularios:
ex. Directorios de Zeranoe FFmpeg
url/platform/linking
y
ex. Directorios Zeranoe SHA256
url/sha256/platform/linking
Donde (nuevamente):
url
eshttps://ffmpeg.zeranoe.com/builds/
.platform
es una de tres opciones:win64
,win32
omacos64
.linking
es una de tres opciones:static
,shared
odev
.
entonces paratodoPor ejemplo, las compilaciones vinculadas estáticamente de Windows de 32 bits alojadas por Zeranoe (y sus correspondientes sumas de comprobación SHA256), los listados completos de directorios estarían disponibles en:
ex. Zeranoe Windows compilaciones vinculadas estáticamente de 32 bits
https://ffmpeg.zeranoe.com/builds/win32/static/
https://ffmpeg.zeranoe.com/builds/sha256/win32/static/
Dado que estos listados no contienen JavaScript (devuelven HTML normal), puedes extraer los <a>
elementos necesarios sin renderizarlos primero en un navegador:
<a href="ffmpeg-4.3-win32-dev.zip">ffmpeg-4.3-win32-dev.zip</a>
Esto significa que potencialmente no faltarán y que la fuente de la página para cada listado de directorio se puede recuperar con herramientas de línea de comandos (por ejemplo curl
, wget
, etc.).
Como advertencia menor, curl -O
( --remote-name
) hará que falle la búsqueda del directorio remoto. Debe especificar manualmente un nombre para el archivo de salida (p. ej curl -o zeranoe_win32.html https://ffmpeg.zeranoe.com/builds/win32/static/
.).
Ejemplo de PowerShell
Obteniendo <a>
texto de elemento de una lista de directorio generada por el servidor desde Zeranoe en PowerShell:
ex. extraer_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
Tenga en cuenta que en este caso, el texto del href=
valor es idéntico al texto entre <a>
y <\a>
(como se indicó anteriormente, ningún elemento relevante <a>
contiene una URL de descarga completa en este momento):
ex. extract_anchor_text.ps1 Salida (línea de comando)
[...]
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 desea leer un poco más sobre cómo analizar páginas web HTML con PowerShell, puede visitar el enlace del que se tomó este ejemplo.aquí.