Skip to content

Command line

Generated from pconv --help and pconv profiles of pconv 1.0.1.

Usage: pconv <input> <output> [--profile fast|balanced|best] [--size S] [--fps N] [--crf N | --qp N] [--tune T] [--loudness LUFS|youtube [--true-peak DBTP]] [--audio-bitrate KBPS] [--force] [--json] [--no-progress]
pconv join <input> <input>... <output> [the same options]
pconv probe <input>
pconv profiles
pconv --version
pconv --help
  • pconv <input> <output> converts one file. The output’s extension picks the container: mp4, mov, mkv, webm, gif or webp.
  • pconv join <input> <input>... <output> joins two or more clips, in order, into one mp4, mov, mkv or webm, and takes the same options.
  • pconv probe <input> prints what pconv reads from a file, as JSON (formats).
  • pconv profiles lists the profiles, as below.
  • pconv --version prints pconv 1.0.1; pconv --help (or -h) prints the help below.
Option What it does
--profile fast|balanced|best The profile: balanced (the default), best or fast (VAAPI, Linux only). See Profiles below.
--size S A width (1280, the height follows the aspect), WxH within 1 % of the source’s aspect, or 720p, 1080p, 1440p or 2160p. pconv never stretches a picture.
--fps N The output’s frame rate.
--crf N The quality for balanced and best (x264 1 to 51, VP9 0 to 63); lower is better and larger.
--qp N The quality for fast (VAAPI), 1 to 51.
--tune T x264’s tune; animation suits screen and terminal recordings.
--loudness LUFS|youtube Level the audio to a target from -70 to -5 LUFS in two EBU R128 passes, or youtube (-14 LUFS under -2 dBTP, AAC 320k).
--true-peak DBTP The true-peak ceiling for --loudness, -1 dBTP by default.
--audio-bitrate KBPS The audio bitrate, 32 to 512 kbps; re-encodes the audio.
--force Replace an existing output instead of refusing it.
--json Print one JSON document instead of the plain lines, and never draw progress.
--no-progress Don’t draw the progress line on a terminal.

The output’s extension picks the container: mp4, mov, mkv (H.264), webm (VP9, keeps alpha), gif or webp (animated, looping, 800 px wide at 12 fps by default).

Light web: –profile best –crf 23 (.webm: –crf 40)

For x264 terminal masters: –tune animation

–loudness N brings the audio to N LUFS integrated in two EBU R128 passes (loudnorm), linear where the true peak allows, under a -1 dBTP true-peak ceiling (–true-peak sets it), and prints the loudness before and after; youtube is -14 LUFS under -2 dBTP.

Audio is AAC-LC 320k stereo at 48000 Hz, or Opus 128k in .webm; an AAC source is copied when nothing changes its audio. –audio-bitrate KBPS (32–512) sets the rate and re-encodes.

With –loudness or –audio-bitrate and no –profile, –size, –fps, –crf, –qp or –tune, the video is copied untouched where the container takes its codec.

join stitches two or more clips, in the order given, into one mp4, mov, mkv or webm. With no video option it is a stream copy when every clip matches the first (codec, profile, size, pixel aspect, rotation, rate, pixel format, colour tags, codec headers and audio); otherwise it re-encodes every clip to the first one’s size and rate (or –size and –fps) with the profile, letterboxing other shapes and filling a clip without audio with silence. It prints which it did and why; –loudness and –audio-bitrate apply to the joined audio.

While it works, pconv draws one progress line on stderr when stderr is a terminal: a spinner, the step, a bar, the percent, the speed in fps and the ETA. It never draws it with –json, –no-progress, TERM=dumb or when stderr is a pipe or a file, so scripts and agents read only the result.

pconv profiles prints:

fast: h264_vaapi on the GPU, QP 25 (VA-API, Linux only)
balanced: libx264 preset medium, CRF 20
best: libx264 preset slow, CRF 18
balanced .webm: libvpx-vp9 cpu-used 4, CRF 32, keeps alpha
best .webm: libvpx-vp9 cpu-used 2, CRF 28, keeps alpha
balanced, best .gif: a palette from the clip, then sierra2_4a dithering, loops forever, keeps alpha as on or off; without alpha each frame stores only what changed by more than 12 levels (4 with best)
balanced .webp: libwebp_anim quality 75, compression level 4, loops forever, keeps alpha
best .webp: libwebp_anim quality 75, compression level 6, loops forever, keeps alpha
.gif and .webp: 800 px wide at 12 fps by default, or the source's width and rate where smaller; --size and --fps set them
light web: --profile best --crf 23 (.webm: --crf 40)
--loudness youtube: -14 LUFS under a -2 dBTP true-peak ceiling, two EBU R128 passes; with no video option the video is copied where the container takes it
audio: AAC-LC 320k stereo at 48000 Hz (an AAC source is copied when nothing changes its audio), Opus 128k in .webm; --audio-bitrate 32–512 sets the rate
Code Meaning
0 It worked.
1 Failed or refused once the input was read; one line on stderr starting pconv: .
2 The command line is wrong, answered on stderr the way clap-based tools answer.
128 plus the signal A signal stopped it; 130 for Ctrl-C on Windows.