Add Unlicense and ship ffmpeg's GPL license in release archives

The project is now public domain under the Unlicense (LICENSE, README).

The packaged archives bundle GPL ffmpeg/ffprobe builds but did not include
their license. fetch_ffmpeg.py now extracts the build's LICENSE.txt into
ffmpeg/LICENSE.txt, and build.py --ffmpeg-dir copies it into the archive as
ffmpeg-LICENSE.txt, failing before the PyInstaller run if it can't find one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-06 18:18:55 +00:00
parent bf0d661eed
commit fb2b5ce91f
4 changed files with 94 additions and 29 deletions

View File

@@ -46,8 +46,9 @@ The app looks for `ffmpeg` and `ffprobe` in this order:
3. Your `PATH`
The release archives (`FFmpegWrapper-<version>-windows-x64.zip` / `-linux-x64.tar.gz`) already
include ffmpeg and ffprobe next to the executable. If you use the bare executable, install ffmpeg
(`sudo apt install ffmpeg`, `winget install ffmpeg`, ...) or point the app at it.
include ffmpeg and ffprobe next to the executable, with ffmpeg's license as `ffmpeg-LICENSE.txt`.
If you use the bare executable, install ffmpeg (`sudo apt install ffmpeg`, `winget install ffmpeg`,
...) or point the app at it.
## Running from source
@@ -68,7 +69,7 @@ PyInstaller does not cross-compile. Build the Windows `.exe` on Windows and the
```bash
pip install -r requirements-dev.txt
python build.py # -> dist/FFmpegWrapper or dist/FFmpegWrapper.exe
python build.py --ffmpeg-dir ffmpeg/bin # also bundles ffmpeg + ffprobe into a .zip / .tar.gz
python build.py --ffmpeg-dir ffmpeg/bin # also bundles ffmpeg + ffprobe + their license into a .zip / .tar.gz
python scripts/smoke_test.py dist/FFmpegWrapper # optional: headless start-up check
```
@@ -87,9 +88,11 @@ Forgejo Actions can run it too, but they need a Windows runner registered.
- **PySide6 is pinned below 6.12.** PySide6 6.12.0 mis-counts references to Python's `None`
(in `QComboBox.clear()`/`currentData()`), which crashes the app on Python 3.11. Python 3.12+ is
not affected, but keep the pin until a fixed PySide6 ships.
- **Licensing:** the bundled ffmpeg builds come from
[BtbN/FFmpeg-Builds](https://github.com/BtbN/FFmpeg-Builds) and are GPL. Keep that in mind if you
redistribute the archives.
- **ffmpeg licensing:** the bundled ffmpeg builds come from
[BtbN/FFmpeg-Builds](https://github.com/BtbN/FFmpeg-Builds) and are GPLv3, so their license has to
ship with them. `scripts/fetch_ffmpeg.py` saves it as `ffmpeg/LICENSE.txt`, and
`build.py --ffmpeg-dir` copies it into the archive as `ffmpeg-LICENSE.txt`. It looks in the ffmpeg
folder and the folder above it, and stops with an error if the license isn't in either.
- Settings (last options, window size, ffmpeg location) are saved per user through Qt's QSettings:
the registry on Windows, `~/.config/ffwrap/FFmpegWrapper.conf` on Linux.
@@ -106,3 +109,12 @@ build.py PyInstaller build + packaging
scripts/ fetch_ffmpeg.py, smoke_test.py, make_icon.py
tests/ unit tests + real-ffmpeg integration tests
```
## License
FFmpeg Wrapper is public domain, released under [the Unlicense](LICENSE). Kopimi: copy it, change
it, share it, sell it. No permission needed.
That covers this project's own code. The ffmpeg and ffprobe binaries in the release archives are
GPLv3 (license in `ffmpeg-LICENSE.txt`, source at <https://ffmpeg.org/download.html>), and the Qt
libraries built into the executable are LGPLv3.