Skip to content

Install

pconv runs on Linux (x86_64), Windows (x86_64) and macOS (Apple Silicon). It needs ffmpeg and ffprobe on the PATH. Each release carries a binary for all three, with a SHA256SUMS file.

sudo apt install ffmpeg # or your distribution's ffmpeg package
v=$(basename "$(curl -fsSLo /dev/null -w '%{url_effective}' https://github.com/gmrdad82/pconv/releases/latest)")
mkdir -p ~/.local/bin && curl -fsSL "https://github.com/gmrdad82/pconv/releases/download/$v/pconv-$v-linux-x86_64.tar.gz" | tar -xz -C ~/.local/bin pconv

For --profile fast, a VAAPI GPU at /dev/dri/renderD128 with an H.264 encoder (check with vainfo). Optionally setpriv (util-linux), so an ffmpeg step ends with pconv even when pconv is killed.

brew install ffmpeg-full && export PATH="$(brew --prefix ffmpeg-full)/bin:$PATH"
v=$(basename "$(curl -fsSLo /dev/null -w '%{url_effective}' https://github.com/gmrdad82/pconv/releases/latest)")
mkdir -p ~/.local/bin && curl -fsSL "https://github.com/gmrdad82/pconv/releases/download/$v/pconv-$v-macos-arm64.tar.gz" | tar -xz -C ~/.local/bin pconv

Homebrew’s plain ffmpeg has no zimg or libwebp, so pconv needs ffmpeg-full, which is keg-only: keep its bin on your PATH.

winget install Gyan.FFmpeg
$v = (Invoke-RestMethod https://api.github.com/repos/gmrdad82/pconv/releases/latest).tag_name
Invoke-WebRequest "https://github.com/gmrdad82/pconv/releases/download/$v/pconv-$v-windows-x86_64.zip" -OutFile "$env:TEMP\pconv.zip"
Expand-Archive "$env:TEMP\pconv.zip" "$env:LOCALAPPDATA\pconv" -Force
[Environment]::SetEnvironmentVariable('Path', [Environment]::GetEnvironmentVariable('Path', 'User') + ";$env:LOCALAPPDATA\pconv", 'User')

choco install ffmpeg works too. Open a new terminal so it sees the new PATH.

On any of the three, with Rust 1.97 or newer:

cargo install --locked --git https://github.com/gmrdad82/pconv --tag vX.Y.Z pconv

Replace vX.Y.Z with a tag.

ffmpeg and ffprobe built with libx264, libvpx, libwebp and zimg. Resizing a clip with alpha needs ffmpeg 9 or newer; everything else works with older ones. --profile fast encodes through VAAPI, so it is Linux only; on Windows and macOS pconv refuses it and balanced or best do the job.

On Linux and macOS, ~/.local/bin needs to be on your PATH. Then:

$ pconv --version
pconv 1.0.1
$ pconv talk.mp4 readme.gif
readme.gif

pconv prints the file it wrote. That is a looping GIF, 800 px wide at 12 fps (or the source’s own width and rate where smaller). Next, deliver a video for the web or make a README GIF to your size.