Join clips

pconv join stitches two or more clips, in the order given, into one mp4, mov, mkv or webm. The last name is the output.
Matching clips are copied
Section titled “Matching clips are copied”$ pconv join intro.mp4 scene.mp4 outro.mp4 film.mp4film.mp4joined 3 clips by stream copy, no re-encode: every clip is h264 1280x720 at 30 fps with aac stereo at 48000 HzWhen every clip matches the first (codec, profile, size, pixel aspect, rotation, rate, pixel format, colour tags, codec headers and audio), pconv copies every packet through ffmpeg’s concat demuxer. Three 30 s 1080p clips join in 0.42 s this way, against 21.6 s re-encoded.
Other clips are re-encoded
Section titled “Other clips are re-encoded”$ pconv join film.mp4 phone.mp4 cut.mp4cut.mp4joined 2 clips by re-encoding to 1280x720 at 30 fps (balanced): phone.mp4 is 720x1280, not 1280x720 like film.mp4Otherwise pconv re-encodes every clip to the first one’s size and rate with the profile (balanced by default), letterboxing a clip of another shape and giving a clip without audio silence of its own length. It says which clip didn’t match and why.
Choosing the result
Section titled “Choosing the result”Any of --profile, --size, --fps, --crf, --qp or --tune asks for a re-encode, even of matching clips:
pconv join a.mp4 b.mp4 c.mp4 whole.mp4 --size 720p --profile best--loudness and --audio-bitrate apply to the joined audio; see loudness.
With --json, the manifest has sources (each clip’s path and sha256) and join with its method (copy or encode), reason and clips; see the formats reference.