Applies to: FFmpeg project current online manuals read 2026-11-08; generated documentation may be newer than an installed package; check local build options
The useful distinctions
- The concat demuxer reads an ordered file list.
- Segments must have matching streams, codecs and time bases.
- Incorrect segment durations can disrupt adjusted timestamps.
Check compatibility before ordering
Two files that play independently are not automatically suitable for packet-level joining. Begin with segments produced under the same settings and compare their stream inventories. A mixture of codecs or timing assumptions needs a different processing plan. This gate is more useful than repeatedly rearranging a list whose entries do not satisfy the joining method’s requirements.
Keep the list easy to audit
The original example uses two simple relative filenames in the desired order. Place the list with those segments and review it as a small editorial decision: opening first, closing second. There is no need to relax path safeguards for this arrangement. Keep the output name distinct so a mistake in order does not overwrite a source segment that would be needed to correct it later.
Inspect every transition
After creating a joined derivative, examine the passage around each join rather than checking only the beginning and end. Look for an unexpected gap, repeated action or lost audio. Compare the total duration with the intended sequence, allowing the actual container timing to guide investigation. If an artifact appears, preserve the original list and segment reports so a maintainer can distinguish a duration problem from an incompatible-stream problem without guessing from the final file alone.
A focused way to proceed
- Compare the segment stream properties and keep the originals.
- Create an ordered list using safe relative local filenames.
- Run the concat demuxer to a distinct streamcopy destination.
- Inspect each join for continuity and verify total duration.
Worked example · synthetic
ffconcat version 1.0
file workshop-opening.ts
file workshop-closing.tsRead the comparison
Independent playability is weaker than concat compatibility; a successful command still needs join inspection.
When to stop or ask for help
Escalate timestamp artifacts with the list and segment stream reports rather than a random replacement command.