# SONGTANK — Electron 44.2.0 / FFmpeg 対応ソース

提供者：株式会社BLTP　info@bltp.jp

SONGTANKは、FFmpegプロジェクトのライブラリをLGPL 2.1以降の条件で使用しています。FFmpeg自体の権利は各著作者に帰属します。著作権表示は各ソース、`ffmpeg/CREDITS`、`ffmpeg/COPYING.LGPLv2.1`、`ffmpeg/LICENSE.md`を参照してください。

## 対応関係

- Electron公式配布 44.2.0（macOS arm64 / x64、Windows x64）
- Chromium 152.0.7977.76
- FFmpeg `2b68d2babae73714846961fb0ee47e3b3d2e39a9`
- FFmpegはElectronの`link_with_loader_path.patch`適用済み。差分は`changes.diff`。BLTPによるFFmpegソースの追加変更はありません。
- Electron公式の共有ライブラリを使用。macOSの2アーキテクチャをUniversal化し、アプリと共にアドホック署名しています。Windowsのffmpeg.dllは公式ZIPと同一です。
- `ffmpeg_branding="Chrome"`、`proprietary_codecs=true`、`is_component_ffmpeg=true`。対象3構成の`CONFIG_GPL`・`CONFIG_NONFREE`・`CONFIG_GPLV3`はすべて0。
- Electronが別途配布する「ffmpeg-v44.2.0-*.zip」はChromiumブランドの別構成です。本品に同梱する通常のElectron内FFmpegとは異なります。

## 収録内容

`ffmpeg/`にヘッダー・ソース・ビルドスクリプト・Chromium用設定を含む対応ソース一式を収録しています。`chromium/config/Chrome/mac/arm64`、`mac/x64`、`win/x64`のconfig.h先頭に元のconfigure引数があります。これらはコード選択用の設定を生成した上流の引数であり、最終的な共有ライブラリはGNの`BUILD.gn`で構築されます。

`electron-v44.2.0.tar.gz`にはElectronのソース、パッチ、GNビルド設定、プラットフォーム別のビルド手順を収録しています。`chromium-build.tar.gz`は同じChromium版のbuild/、`chromium-media-ffmpeg.tar.gz`はmedia/ffmpeg/、`chromium-opus-build.tar.gz`はthird_party/opus/（対応するOpusソース・BSDライセンスを含む）です。Electron-DEPS、Chromium-DEPS、取得URL・SHA-256を記録したffmpeg-source-lock.json、各ファイルのSHA256SUMS.jsonも同梱します。

## ビルド・改変

BLTPではFFmpegを独自再ビルドせず、Electron公式バイナリをパッケージしています。次は同じソース・設定を使った改変用ビルド手順です。完全なElectron/Chromiumビルド環境、各OSのSDK・コンパイラ等の一般的な開発ツールは別途必要です。全ChromiumのソースやツールチェーンはこのZIPの収録対象ではなく、固定したDEPSから取得します。上流バイナリとバイト単位で一致する再ビルドをBLTPで検証したという意味ではありません。

1. Electronアーカイブ内 `docs/development/build-instructions-gn.md` と対象OSの `build-instructions-macos.md` / `build-instructions-windows.md` の前提ツールを用意します。
2. 空の作業ディレクトリで `gclient config --name "src/electron" --unmanaged https://github.com/electron/electron` を実行し、`gclient sync --revision src/electron@v44.2.0 --with_branch_heads --with_tags` で版を固定して取得します。DEPSとFFmpegの版を本書と照合してください。
3. Electronの同期フックが同梱パッチを適用します。FFmpegに同じパッチを二重適用しないでください。改変する場合は、適用済みの本ZIPのffmpeg/を `src/third_party/ffmpeg/` の元として使用できます。
4. `src/out/Release/args.gn` に `import("//electron/build/args/release.gn")` と対象の `target_cpu="arm64"` または `target_cpu="x64"` を設定し、`use_remoteexec=false` を追加します。共有FFmpegとChromeブランドの上記設定を維持します。Windowsでは上流の案内に従って `DEPOT_TOOLS_WIN_TOOLCHAIN=0` を使えます。
5. srcから `gn gen out/Release`、`autoninja -C out/Release ffmpeg` を実行します。共有ライブラリは通常out/Release内の `libffmpeg.dylib` / `ffmpeg.dll` です。環境により上流が案内するninjaを使用してください。
6. macOS Universal版は各CPU向けにビルドし、`lipo -create arm64/libffmpeg.dylib x64/libffmpeg.dylib -output libffmpeg.dylib` で統合します。

元のバイナリとの照合記録は配布物の `binary-source-verification.json` に収録します。Macは署名・Universal化でコンテナが変わるため、一時コピーから各アーキテクチャを抽出し、署名を除去したバイナリ全体を完全一致で比較しています。

## 差し替え

アプリを終了し元のライブラリを退避してから、互換ABI・CPU構成でビルドしたライブラリに差し替えてください。

- Windows：`SONGTANK.exe` と同じフォルダの `ffmpeg.dll`。
- Mac：`SONGTANK.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib`。変更で署名が無効になるため、必要に応じて `codesign --force --deep --sign - SONGTANK.app` を実行します。

SONGTANK利用規約第11条は、LGPLが認める改変、差し替え・再リンク、改変のデバッグに必要なリバースエンジニアリングを制限しません。改変版FFmpegの再配布にはその改変に対応したソース・表示等も必要です。

## 入手先・配布運用

本ソースZIPはアプリのResources/legal（Windowsはresources/legal）と同じ配布パッケージに同梱します。また、[BLTPの第三者ライセンスページ](https://bltp.jp/soundcastle/?page_id=21599&songtank_page=licenses)から認証不要で入手できます。将来アプリ本体のダウンロード場所を追加する場合は、同じサーバーに対応ソースを置き、配布ページにもFFmpegとソースへのリンクを併記します。旧版の配布中は旧版のソースも保持します。

OSSライセンスの条件と、配布地域・コーデックに応じた特許条件は別です。本書はソースと構成の提供記録で、特許実施料の不存在や非侵害の保証ではありません。
