當似乎沒有明顯的方法來自動執行此操作時,如何取得適用於 Windows 的最新 FFmpeg 二進位存檔?

當似乎沒有明顯的方法來自動執行此操作時,如何取得適用於 Windows 的最新 FFmpeg 二進位存檔?

這是 FFmpeg 的官方下載頁面:http://ffmpeg.org/download.html

對於 Windows,它連結到:https://ffmpeg.zeranoe.com/builds/

我現在已經仔細研究了這兩頁,但看不到任何可以自動執行以下任務的方法:

  1. 確定哪個是 FFmepg 目前的穩定版本。
  2. 確定目前穩定版本的 Windows 存檔的 URL。

如果我在本地輸入:

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 來顯示當前的最新版本,並且為包含二進位檔案的 Windows ZIP 檔案提供了可預測的 URL 方案。 FFmpeg 卻不是這樣,這對我來說真的很奇怪。

(請不要告訴我使用 Chocolately。)

答案1


請注意,在下面的答案中,我將重點放在 Zeranoe 提供的 FFmpeg 構建。此資訊截至 2020 年 7 月是最新的。 =)


長話短說

Zeranoe.zip為其最新的 Git 建置提供了「最新」建置文件,並根據 GPL 3.0 獲得許可(我相信這些文件每隔幾天更新一次)。如果您對靜態連結版本感到滿意,可以從以下位置取得它們:

請注意,靜態連結建置並不是唯一可用的建置。特別是,您也可以替換上面 URL 中的shared(對於共用程式庫) 或dev(對於開發版本) 來存取這些 Git 版本。static

不幸的是,對於常規的非 Git 發行版本(我假設您所說的“當前穩定版本”是指),似乎沒有我能找到的等效自動更新檔案。因此,您可能會一直在檢查 HTML 的最新版本。


概述

我看不出有什麼方法可以自動執行以下任務 [...]

確定目前的穩定版本

假設您不希望使用.zip上面詳述的「最新」Git 版本文件,則基本流程(目前)可能是使用一個(或多個)腳本來:

  • 從 Zeroe 下載給定的 HTML 頁面。

  • 僅提取<a>該頁面中的元素。

  • 使用這些元素中的文字<a>來決定您要下載的 FFmpeg 的非 Git 發行版本。

  • 將包含該版本資訊的腳本確定的 URL 提供給某些下載工具(可能是腳本本身)。

有關第一步的更多詳細信息,請參閱頁面來源選項本答案末尾部分。我還在該部分之後添加了一個極其簡單的 PowerShell 範例,它可能有助於<a>文字元素提取。請注意,<a>此時相關 HTML 頁面來源中的任何元素似乎都沒有包含完整的下載 URL。

Zeranoe 似乎會自動對常規版本和 Git 版本的版本清單進行排序,因此,如果您不想<a>單獨分析元素或檔案名,則可以透過簡單地使用設定的位置來確定最新的非 Git 版本來進行欺騙。


也就是說,最新的非 Git FFmpeg 版本/檔案名稱目前包含在<a>頁面來源中的第一個元素(對於 的渲染版本)或頁面來源中的https://ffmpeg.zeranoe.com/builds/倒數第二個/倒數第三個<a>


確定 Windows 存檔 URL

我不相信有什麼好的方法自動地確定給定版本的 Windows 存檔的 URL。您可能需要簡單地依賴對網站目前建置方式的觀察(這意味著您可能需要告訴下載腳本如何建立 URL)。

版本名稱

僅就目前情況而言FFmpeg 從 Zeranoe 構建,從元素文字確定 FFmpeg 的最新版本<a>應該不會太難。

  • 對於常規版本,使用簡單的“1.2.3”方案(如您所指)。所以前。 version4.3比 version 更新4.2.3

  • 對於最新的 Git 建置(在上面的「主要」版本之間發布),目前的方案是按建置日期來標記它們 ( year/month/day-gitstuff)。

假設 Git 構建被標記為20200628-4cfcfb3,破折號後面的部分(例如-4cfcfb3)可以被刪除,留下20200628這樣的結論:該版本的 FFmpeg 構建於 06-28-2020(或者可能是 28-06-2020,取決於位置)你住在)。

如果我輸入ffmpeg.exe -version,它會輸出 [...]

Zeranoe 的 Windows 版 FFmpeg 目前版本在其-version橫幅中使用與網站上列出的版本名稱相同的命名方案:

前任。 Zeranoe FFmpeg 橫幅

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

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

下載地址格式

我剛剛使用 ExifTool 經歷了同樣的事情,但至少他們有一個簡單的 URL 來顯示當前的最新版本,並且為包含二進位檔案的 Windows ZIP 檔案提供了可預測的 URL 方案。 FFmpeg 卻不是這樣,這對我來說真的很奇怪。

雖然可能不是很明顯,但所有 JavaScript 所做https://ffmpeg.zeranoe.com/builds/的都是動態「重建」連結到主要「下載建置」按鈕(靠近頁面底部)的 URL,將其連結到不同的靜態下載選項。

透過嘗試幾個不同的選項,最終下載 URL 的建置相當簡單:

前任。 Zeranoe FFmpeg 下載 URL 構建

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

在哪裡:

  • urlhttps://ffmpeg.zeranoe.com/builds/

  • platform是三個選項之一:win64win32macos64

  • linking是三個選項之一:staticshareddev

  • ffmpeg只是“ffmpeg”。

  • version是版本(例如4.320200628-4cfcfb3)。

  • 追加僅.zip表示 FFmpeg 版本採用 GPL 3.0 許可證,追加-lgpl.zip表示 FFmpeg 版本採用 LGPL 3.0 授權。

因此,假設有人希望下載:

  • Windows 64 位元、共用程式庫、LGPL 3.0 授權版本的 FFmpeg 4.3
  • Windows 32 位元、靜態連結、GPL 3.0 授權版本的 FFmpeg Git build 20200628-4cfcfb3

這些 URL 看起來像:

前任。 Zeranoe FFmpeg URL

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 授權似乎僅適用於由 Zeranoe 分發的 FFmpeg 的非 Git 版本。所以前。ffmpeg-20200628-4cfcfb3-win32-static-lgpl.zip將無效。


SHA256 校驗和

給定下載的相應 SHA256 文件的連結本質上是相同的 URL 結構,在主文件之間插入“sha256” url,並platform在末尾添加“.sha256”:

前任。 Zerooe SHA256 URL 構建

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

上述文件對應的 SHA256 URL 如下圖所示:

前任。 Zeranoe FFmpeg SHA256 URL

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>來自 Zeranoe 的相關 HTML 頁面來源中的(錨點)元素中。您可以使用給定構建的渲染版本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>的元素https://ffmpeg.zeranoe.com/builds/不僅僅是版本號。每個<a>標籤指定一段彈出/下拉文本,這表示您需要在腳本中手動整理版本號。

  • <a>https://ffmpeg.zeranoe.com/builds/只有當網頁在瀏覽器視窗中可見時,才會呈現(透過 JavaScript)的元素。

最後一項意味著普通的命令列工具(例如curlwget等)不能用於從中收集頁面來源https://ffmpeg.zeranoe.com/builds/(儘管它們仍然可以用於下載檔案)。至於瀏覽器自動化(例如儲存頁面原始碼)硒網路驅動程式Save As用類似的東西進行裝備自動熱鍵等等),瀏覽器視窗必須可見(即不能使用headlessFirefox/Chrome 和 Selenium 模式)。

使用伺服器產生的目錄列表

由於存在上面列出的缺點,解析 HTML 頁面原始碼https://ffmpeg.zeranoe.com/builds/可能不是更好的選擇。目前,https://ffmpeg.zeranoe.com/builds/它只是許多公開可用的 Web 目錄的前端,其形式如下:

前任。 Zeranoe FFmpeg 目錄

url/platform/linking

前任。 Zeranoe SHA256 目錄

url/sha256/platform/linking

哪裡(再次):

  • urlhttps://ffmpeg.zeranoe.com/builds/

  • platform是三個選項之一:win64win32macos64

  • linking是三個選項之一:staticshareddev

因此對於全部例如,Zeranoe 託管的 Windows 32 位元靜態連結版本(及其對應的 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>

這意味著它們不會遺失,並且可以使用命令列工具(例如curlwget等)來取得每個目錄清單的頁面來源。


需要注意的是,curl -O( --remote-name) 將導致獲取遠端目錄失敗。您需要手動指定輸出檔案的名稱(例如curl -o zeranoe_win32.html https://ffmpeg.zeranoe.com/builds/win32/static/)。


Powershell 範例

<a>從 PowerShell 中的 Zeroe 從伺服器產生的目錄清單中取得元素文字:

前任。 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=之間的文字相同(如前所述,目前沒有相關元素包含完整的下載 URL):<a><\a><a>

前任。 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

如果您想進一步了解如何使用 PowerShell 解析 HTML 網頁,您可以訪問此範例的鏈接這裡

相關內容