
Это официальная страница загрузки FFmpeg:http://ffmpeg.org/download.html
Для Windows это ссылки на:https://ffmpeg.zeranoe.com/builds/
Я внимательно изучил обе эти страницы и не вижу способа автоматизировать следующие задачи:
- Определите, какая версия FFmepg является текущей стабильной.
- Определите URL-адрес архива Windows для этой текущей стабильной версии.
Если я локально введу:
ffmpeg.exe -version
Выводит следующее:
ffmpeg version N-94664-g0821bc4eee Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.1 (GCC) 20190807
Похоже, что "N-94664-g0821bc4eee" — моя текущая версия. Кхм. Честно говоря, я не понимаю, почему они не могут использовать простую схему "1.2.3", но, думаю, я просто проверю, является ли моя текущая версиядругойиз того, что было определено как последняя стабильная версия, а не пытаться «сравнить» их как целые числа или разумные строки версий.
Я только что прошел через то же самое с ExifTool, но, по крайней мере, у них был простой URL для отображения последней версии и предсказуемая схема URL для ZIP-файла Windows, содержащего двоичные файлы. Это не относится к FFmpeg, что для меня действительно странно.
(Пожалуйста, не говорите мне использовать Chocolately.)
решение1
Обратите внимание, что в ответе ниже я сосредоточился на сборках FFmpeg, предоставленных Zeranoe. Эта информация была актуальна по состоянию на июль 2020 года. Пожалуйста, простите меня, если я что-то упустил или осветил то, что вы уже знаете. =)
TL;DR
Zeranoe имеет "последние" .zip
файлы сборки для своих последних сборок Git, лицензированные по GPL 3.0 (я полагаю, они обновляются каждые несколько дней). Если вас устраивают статически скомпонованные версии, вы можете получить их здесь:
https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip
https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-latest-win64-static.zip
Обратите внимание, что статически связанные сборки — не единственные доступные сборки. В частности, вы также можете заменить shared
(для общих библиотек) или dev
(для версий dev) вместо static
в URL-адресах выше, чтобы получить доступ и к этим сборкам Git.
К сожалению, для обычных версий релизов не-Git (которые, как я предполагаю, вы подразумеваете под "текущей стабильной версией"), похоже, нет эквивалентного автоматически обновляемого файла, который я мог бы найти. Так что вам, вероятно, придется изучать HTML на предмет последних версий.
Обзор
Я не вижу способа автоматизировать следующие задачи [...]
Определение текущей стабильной версии
Если вы не хотите использовать .zip
файлы «последней» версии Git, описанные выше, то основной процесс (в настоящее время) скорее всего будет заключаться в использовании скрипта (или скриптов) для:
Загрузите нужную HTML-страницу из Zeranoe.
Извлеките только
<a>
элементы с этой страницы.Используйте текст в этих
<a>
элементах, чтобы определить, какую версию FFmpeg (не Git) вы хотите загрузить.Передайте определенный скриптом URL-адрес, содержащий информацию о версии, какому-либо инструменту загрузки (возможно, самому скрипту).
Более подробную информацию о первом шаге см.Параметры исходного кода страницыраздел ближе к концу этого ответа. Я также включил крайне минимальный пример PowerShell после этого раздела, который может помочь с <a>
извлечением текстового элемента. Имейте в виду, что ни один из <a>
элементов в соответствующих источниках HTML-страницы, по-видимому, не содержит полных URL-адресов загрузки на данный момент.
Судя по всему, Zeranoe автоматически упорядочивает списки релизов как для обычных, так и для Git-релизов, поэтому, если вы не хотите анализировать <a>
элементы или имена файлов по отдельности, вы можете схитрить, просто используя заданную позицию для определения последней версии, отличной от Git.
То есть последняя версия/имя файла FFmpeg, отличная от Git, в настоящее время содержится либо в первом <a>
элементе исходного кода страницы (для визуализированной версии https://ffmpeg.zeranoe.com/builds/
), либо в предпоследнем/третьем с конца <a>
элементе исходного кода страницы (для списков каталогов, сгенерированных сервером).
Определение URL-адреса архива Windows
Я не верю, что есть хороший способавтоматическиопределить URL-адрес архива Windows для данного релиза. Вам, скорее всего, придется просто положиться на наблюдения о том, как в настоящее время устроен сайт (то есть вам, вероятно, придется указать вашему скрипту загрузки, как строить URL-адреса).
Названия версий
Говоря исключительно о текущемСборки FFmpeg от Zeranoe, определение последних версий FFmpeg по <a>
тексту элемента не должно быть слишком сложным.
Для обычных релизов используется простая схема "1.2.3" (как вы ее называете). Так что ex. версия
4.3
более поздняя, чем версия4.2.3
.Для актуальных сборок Git (которые выпускаются между «основными» версиями, указанными выше) текущая схема заключается в том, чтобы отмечать их по дате сборки (
year/month/day-gitstuff
).
Если предположить, что сборка Git была помечена 20200628-4cfcfb3
, то часть после дефиса (например, -4cfcfb3
) можно опустить, 20200628
и тогда получится, что эта версия FFmpeg была собрана 28.06.2020 (или, возможно, 28.06.2020, в зависимости от того, где вы живете).
Если я ввожу
ffmpeg.exe -version
, он выводит [...]
Текущие версии FFmpeg для Windows от Zeranoe используют в своих -version
баннерах те же схемы именования, что и для названий версий, указанных на веб-сайте:
например, баннеры Zeranoe FFmpeg
ffmpeg version 4.3 Copyright (c) 2000-2020 ...
ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 ...
Формат URL-адреса для загрузки
Я только что прошел через то же самое с ExifTool, но, по крайней мере, у них был простой URL для отображения последней версии и предсказуемая схема URL для ZIP-файла Windows, содержащего двоичные файлы. Это не относится к FFmpeg, что для меня действительно странно.
Хотя это может быть неочевидно, все, что https://ffmpeg.zeranoe.com/builds/
делает JavaScript, — это «реконструирует» URL-адрес, связанный с основной кнопкой «Загрузить сборку» (внизу страницы) на лету, связывая ее с различными статическими вариантами загрузки.
Перебрав несколько различных вариантов, можно прийти к выводу, что создание окончательного URL-адреса для загрузки довольно просто:
например, Zeranoe FFmpeg Загрузка URL-адреса конструкции
url/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip)
Где:
url
являетсяhttps://ffmpeg.zeranoe.com/builds/
.platform
один из трех вариантов:win64
,win32
илиmacos64
.linking
один из трех вариантов:static
,shared
илиdev
.ffmpeg
это просто "ffmpeg".version
это версия (например,4.3
или20200628-4cfcfb3
).Добавление
.zip
означает только то, что версия FFmpeg находится под лицензией GPL 3.0, а добавление-lgpl.zip
означает, что версия FFmpeg находится под лицензией LGPL 3.0.
Итак, предположим, что кто-то хочет скачать:
- Версия FFmpeg 4.3 для Windows 64-бит, общая библиотека, лицензия LGPL 3.0
- 32-битная, статически связанная версия FFmpeg Git build 20200628-4cfcfb3 для Windows, лицензированная по лицензии GPL 3.0
Эти URL-адреса будут выглядеть так:
например, URL-адреса Zeranoe FFmpeg
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
Обратите внимание, что лицензия LGPL 3.0, по-видимому, доступна только для не-Git версий FFmpeg, распространяемых Zeranoe. Поэтому ex. ffmpeg-20200628-4cfcfb3-win32-static-lgpl.zip
не будет действительным.
Контрольные суммы SHA256
Ссылка на соответствующий файл SHA256 для данной загрузки по сути представляет собой ту же конструкцию URL, в которой между основными url
и вставлено «sha256» platform
, а в конце добавлено «.sha256»:
например, Zeranoe SHA256 URL-конструкция
url/sha256/platform/linking/ffmpeg-version-platform-linking(.zip)(-lgpl.zip).sha256
Соответствующие URL-адреса SHA256 для файлов выше будут выглядеть следующим образом:
например, URL-адреса 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
Параметры исходного кода страницы
Информация о версии FFmpeg содержится в виде открытого текста в <a>
элементах (якорных) в соответствующих источниках HTML-страницы из Zeranoe. Вы можете использовать либо визуализированную версию, https://ffmpeg.zeranoe.com/builds/
либо сгенерированные сервером списки каталогов для данной сборки, чтобы предоставить эти <a>
элементы, но есть некоторые вещи, о которых следует знать.
Используя ffmpeg.zeranoe.com/builds/
Использование https://ffmpeg.zeranoe.com/builds/
для сбора информации о текущей версии имеет некоторые недостатки:
<a>
элементы, содержащие информацию о версии, содержат только информацию о версии:<a role="menuitem" href="#" target="_self" class="dropdown-item">4.3</a>
Это значит, что вам придется самостоятельно придумать имя файла для желаемой загрузки.
<a>
элементы forhttps://ffmpeg.zeranoe.com/builds/
не все просто номера версий. Каждый<a>
тег определяет часть всплывающего/раскрывающегося текста, что означает, что вам нужно будет вручную сортировать номера версий в вашем скрипте.<a>
элементыhttps://ffmpeg.zeranoe.com/builds/
отображаются (через JavaScript) только в том случае, если веб-страница отображается в окне браузера.
Последний пункт означает, что обычные инструменты командной строки (например curl
, wget
, и т.д.) не могут быть использованы для сбора исходного кода страницы https://ffmpeg.zeranoe.com/builds/
(хотя их все еще можно использовать для загрузки файлов). Что касается автоматизации браузера (например, сохранения исходного кода страницы с помощьюSelenium Веб-драйвер, такелаж Save As
с чем-то вродеAutoHotkeyи т. д.), окно браузера должно быть видимым (т. е. вы не можете использовать headless
режим с Firefox/Chrome и Selenium).
Использование списков каталогов, созданных сервером
С учетом перечисленных выше недостатков, парсинг исходного кода HTML-страницы https://ffmpeg.zeranoe.com/builds/
может оказаться не самым предпочтительным вариантом. В настоящее время https://ffmpeg.zeranoe.com/builds/
это просто интерфейс для ряда общедоступных веб-каталогов с формами:
например Zeranoe Каталоги FFmpeg
url/platform/linking
и
например, каталоги Zeranoe SHA256
url/sha256/platform/linking
Где (снова):
url
являетсяhttps://ffmpeg.zeranoe.com/builds/
.platform
один из трех вариантов:win64
,win32
илиmacos64
.linking
один из трех вариантов:static
,shared
илиdev
.
Таким образом, длявсенапример, статически связанные сборки Windows 32-бит, размещенные Zeranoe (и соответствующие им контрольные суммы SHA256), полные списки каталогов будут доступны по адресу:
например, статически скомпонованные сборки Zeranoe Windows 32-бит
https://ffmpeg.zeranoe.com/builds/win32/static/
https://ffmpeg.zeranoe.com/builds/sha256/win32/static/
Поскольку эти списки не содержат JavaScript (они возвращают обычный HTML), вы можете извлечь необходимые <a>
элементы без их предварительной визуализации в браузере:
<a href="ffmpeg-4.3-win32-dev.zip">ffmpeg-4.3-win32-dev.zip</a>
Это означает, что они не будут потенциально отсутствовать, и что исходный код страницы для каждого списка каталогов можно получить с помощью инструментов командной строки (например, curl
, wget
и т. д.).
В качестве небольшого предостережения, curl -O
( --remote-name
) приведет к сбою извлечения удаленного каталога. Вам необходимо вручную указать имя выходного файла (например, curl -o zeranoe_win32.html https://ffmpeg.zeranoe.com/builds/win32/static/
).
Пример PowerShell
Извлечение <a>
текста элемента из списка каталогов, сгенерированного сервером из Zeranoe в PowerShell:
например 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
Обратите внимание, что в этом случае текст в href=
значении идентичен тексту между <a>
и <\a>
(как было сказано ранее, на данный момент ни один соответствующий <a>
элемент не содержит полный URL-адрес загрузки):
например extract_anchor_text.ps1 Вывод (командная строка)
[...]
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
Если вы хотите узнать больше о разборе HTML-страниц с помощью PowerShell, вы можете перейти по ссылке, откуда взят этот пример.здесь.