これを自動化する明白な方法がないように思われる場合、Windows 用の最新の FFmpeg バイナリ アーカイブを取得するにはどうすればよいでしょうか?

これを自動化する明白な方法がないように思われる場合、Windows 用の最新の FFmpeg バイナリ アーカイブを取得するにはどうすればよいでしょうか?

FFmpeg の公式ダウンロード ページは次のとおりです。出典: ffmpeg.org

Windows の場合、次のリンクにリンクします。https://ffmpeg.zeranoe.com/builds/

私はこれら 2 つのページを注意深く研究しましたが、次のタスクを自動化できる方法が見つかりません。

  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 には、最新の Git ビルド用の「最新」ビルド.zipファイルがあり、GPL 3.0 ライセンスで提供されています (数日ごとに更新されていると思います)。静的にリンクされたバージョンでよい場合は、次の場所から入手できます。

静的にリンクされたビルドだけが利用可能なビルドではないことに注意してください。特に、上記の URL での代わりにshared(共有ライブラリの場合) または(開発バージョンの場合) を使用することで、それらの Git ビルドにもアクセスできます。devstatic

残念ながら、通常の非 Git リリース バージョン (「現在の安定バージョン」とは、おそらくこれを指すものだと思います) の場合、自動的に更新される同等のファイルは見つからないようです。そのため、最新バージョンの HTML を調べることに行き詰まっている可能性があります。


概要

以下のタスクを自動化できる方法がわかりません [...]

現在の安定バージョンの確認

上記の「最新」の Git バージョン ファイルを使用しないと仮定すると.zip、基本的なプロセス (現時点では) は、次の操作を実行するスクリプト (または複数のスクリプト) を使用することになります。

  • Zeranoe から指定された HTML ページをダウンロードします。

  • <a>そのページから要素だけを抽出します。

  • これらの要素内のテキストを使用して<a>、ダウンロードする FFmpeg の非 Git リリース バージョンを決定します。

  • そのバージョン情報を含むスクリプトによって決定された URL を何らかのダウンロード ツール (スクリプト自体の場合もあります) に渡します。

最初のステップの詳細については、ページソースオプションこの回答の最後のほうのセクションを参照してください。また、そのセクションの後に、<a>テキスト要素の抽出に役立つ可能性のある、非常に簡単な PowerShell の例も含めました。現時点では、関連する HTML ページ ソースのどの<a>要素にも完全なダウンロード URL が含まれていないことに注意してください。

Zeranoe は、通常のリリースと Git リリースの両方のリリース リストを自動的に順序付けしているようです。そのため、要素やファイル名を個別に分析する必要がない場合は<a>、設定された位置を使用するだけで、最新の非 Git バージョンを判別できる可能性があります。


つまり、最新の非 Git FFmpeg バージョン/ファイル名は現在、<a>ページ ソースの最初の要素 ( のレンダリング バージョンの場合https://ffmpeg.zeranoe.com/builds/)、またはページ ソースの最後から 2 番目/最後から 3 番目の<a>要素 (サーバー生成のディレクトリ リストの場合) のいずれかに含まれています。


Windows アーカイブ URL の決定

良い方法はないと思う自動的に特定のリリースの Windows アーカイブへの URL を決定します。サイトが現在どのように構築されているかに関する観察に頼る必要がある可能性が高いです (つまり、ダウンロード スクリプトに URL の構築方法を指示する必要がある可能性が高いです)。

バージョン名

現在の状況だけを言えばZeranoe からの FFmpeg ビルド要素テキストから FFmpeg の最新バージョンを判断するのは<a>それほど難しくありません。

  • 通常のリリースでは、単純な「1.2.3」スキーム (参照) が使用されます。したがって、例: バージョンは4.3バージョンよりも新しいです4.2.3

  • 最新の Git ビルド (上記の「メジャー」バージョン間でリリースされる) の場合、現在のスキームでは、ビルドされた日付 ( year/month/day-gitstuff) でマークされます。

Git ビルドが とマークされていると仮定すると20200628-4cfcfb3、ダッシュの後の部分 (例: -4cfcfb3) を削除して、 と を残すことができます20200628。その結果、このバージョンの FFmpeg は 2020 年 6 月 28 日 (または、お住まいの地域によっては 2020 年 6 月 28 日) にビルドされたという結論が導き出されます。

と入力するとffmpeg.exe -version、次のように出力されます [...]

Zeranoe の Windows 用 FFmpeg の現在のバージョンでは、-versionバナーに、Web サイトに記載されているバージョン名と同じ命名スキームが使用されています。

例: Zeranoe FFmpeg バナー

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

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

ダウンロード URL 形式

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/

  • platformwin64は、 、win32または の3 つのオプションのいずれかですmacos64

  • linkingstaticは、 、sharedまたは の3 つのオプションのいずれかですdev

  • ffmpeg単に「ffmpeg」です。

  • versionはバージョンです(例:4.3または20200628-4cfcfb3)。

  • 追加のみは、.zipFFmpeg のバージョンが GPL 3.0 ライセンスの下にあることを意味し、追加は、-lgpl.zipFFmpeg のバージョンが LGPL 3.0 ライセンスの下にあることを意味します。

誰かがダウンロードしたいと仮定すると:

  • Windows 64 ビット、共有ライブラリ、LGPL 3.0 ライセンス版の FFmpeg 4.3
  • Windows 32 ビット、静的リンク、GPL 3.0 ライセンス版の FFmpeg Git ビルド 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 バージョンでのみ利用できるようです。したがって、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

上記のファイルに対応する 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 のバージョン情報は、Zeranoe の関連 HTML ページ ソースの (アンカー) 要素にプレーンテキストとして含まれています。これらの要素を提供するには、レンダリングされたバージョンまたは特定のビルドのサーバー生成ディレクトリ リストの<a>いずれかを使用できますが、注意すべき点がいくつかあります。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/、Web ページがブラウザ ウィンドウに表示されている場合にのみ (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/

  • platformwin64は、 、win32または の3 つのオプションのいずれかですmacos64

  • linkingstaticは、 、sharedまたは の3 つのオプションのいずれかですdev

だから全てたとえば、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>

つまり、これらが欠落する可能性はなく、各ディレクトリ リストのページ ソースはコマンド ライン ツール (例: 、など) を使用して取得できcurlますwget


ちょっとした注意点として、curl -O( --remote-name) を使用するとリモート ディレクトリの取得が失敗します。出力ファイルの名前を手動で指定する必要があります (例curl -o zeranoe_win32.html https://ffmpeg.zeranoe.com/builds/win32/static/)。


Powershell の例

<a>PowerShell の Zeranoe からサーバー生成のディレクトリ リストから要素テキストを取得します。

例: 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>

ex. 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ウェブページを解析する方法をもう少し詳しく知りたい場合は、この例の出典となったリンクをご覧ください。ここ

関連情報