A pause between event replay files can come from silent audio, a gap in timestamps, or a video stream that freezes while audio continues. Those are different faults: silencedetect can help locate quiet audio, while a file-boundary problem calls for checking durations, timestamps and stream compatibility before you choose a concat method.
Start by inspecting a representative join rather than applying a filter to every file. Once you know whether the unwanted interval is in the audio samples or in the way the files meet, you can remove only what is necessary and check that the output remains in sync.
1. Identify what “dead air” means in your replay
Play a short section that includes the end of one file, the join, and the beginning of the next. Listen for whether the audio itself goes quiet. Also watch the picture: it may freeze, show an empty interval, or move normally while the sound pauses. A visual pause is not audio silence, and audio filters cannot repair a timestamp discontinuity.
The distinction matters because a silence detector works on audio levels. It reports quiet intervals in an audio stream; it does not decide whether the video timeline contains a gap, whether a file’s reported duration is wrong, or whether two streams have matching timestamps. Conversely, joining files with a concat method does not automatically remove quiet samples that are part of a recording.
For a devotional replay, for example, the room tone after a bhajan may be quiet but intentional. A news replay may include a silent slate between recorded segments. If the join is supposed to be immediate, a pause may instead come from the files’ durations or timestamps. Decide what you consider unwanted before trimming: a threshold that removes a quiet audience or a soft spoken introduction may make the result worse.
If the symptom appears in a stream made from a repeating playlist rather than in a finished file, check the playback arrangement as well as the media. The causes and remedies differ; this guide to OBS looping gaming videos is relevant when a source is failing to loop, rather than when a pair of replay files has a bad join.
2. Inspect durations and stream compatibility
Before changing media, inspect each input’s streams and reported duration with ffprobe, then compare those details across the files. Note whether each file has audio and video, its codecs, resolution, frame rate and time base, as well as the stream durations. The objective is not to collect details for their own sake: you need to know whether the files are alike enough for a stream-copy join and whether their reported lengths plausibly match what you see in playback.
The concat demuxer uses file durations to place later files. FFmpeg’s documentation explains that timestamps are adjusted so that each file starts where the previous one finishes, but warns that unequal stream lengths can still create gaps. Inaccurate duration information can also produce artefacts. A container duration may not tell the whole story when one stream ends before another, so examine the audio and video separately if the join looks wrong.
If a file’s duration is inaccurate and you have established the correct value, the concat list supports a duration entry for that file. Treat this as a correction to known metadata, not a guess to make playback look better. A guessed duration can move the next segment to the wrong point and introduce a different discontinuity.
Also look for differences that prevent stream copying: one replay may use a different codec, resolution, audio layout or time base. The concat demuxer expects corresponding streams to match; it is not a general-purpose converter. FFmpeg’s concat demuxer documentation describes the requirements and duration behaviour. If the files do not satisfy them, plan to filter and re-encode rather than expecting -c copy to reconcile them.
For a channel built from prepared recordings, keep original files unchanged and make a separate test output. This makes it possible to compare a join before and after editing, and to return to the source if trimming removes a cue, opening phrase or natural pause that matters. The broader workflow for a recorded-video YouTube stream in India also depends on preparing and checking source material before putting it into a continuous channel.
3. Locate quiet intervals with silencedetect
When playback confirms that the unwanted pause is quiet audio, run silencedetect on a representative file. For example:
ffmpeg -i replay.mp4 -af silencedetect=n=-50dB:d=2 -f null -
This is an illustrative command, not a universal setting. The threshold says how quiet the signal must be, and the duration says how long it must remain quiet before it is reported. FFmpeg’s filters documentation uses silencedetect=n=-50dB:d=5 as an example; the value is a configurable example, not a recommended setting for every recording. Check the FFmpeg filters documentation against the version installed on your system.
Read the reported start and end times, then listen around those points. A detector can identify low-level sound that is not silence to a listener, especially in a recording with crowd ambience, rain, harmonium or a soft voice. If the threshold is set too high, those details can be treated as quiet; if the duration is too short, brief dips in level can be reported as intervals. Adjust settings in a test, then listen again rather than relying on the log alone.
Run the check on each file where the problem may occur. A clean join can still be followed by silence inside the next replay, and one file’s threshold results do not establish what is happening in another recording. If you are unsure which stream is being analysed, check the input’s audio streams and specify the intended one with the appropriate FFmpeg stream selection for your file.
Keep the diagnostic output as a map of candidate intervals, not as an edit instruction. Note where the quiet section begins and ends, whether it is at a file edge or in the middle, and whether speech or music is cut off at its boundaries. That gives you a basis for a measured trim in the next step.
4. Trim audio silence with silenceremove
silenceremove removes silence from the beginning, middle or end of audio. It is useful when a quiet interval in the audio itself is the problem and you have reviewed where it occurs. Its detection threshold and duration settings determine what counts as silence, so use the same care as with silencedetect: a soft line of dialogue or an intentional musical rest should not disappear merely because its level is low.
A filter can change audio timing. If you trim audio from a video segment without making a corresponding decision about its video, the two streams may no longer describe the same moment. That is especially important when preparing segments for a later join. Make trims deliberately and keep audio and video edits coherent; do not assume an audio-only filter will fix a visual freeze or a timestamp gap.
The exact filter graph depends on where silence occurs, how many files you have, which streams they contain and whether video needs trimming at the same boundaries. For that reason, avoid copying a single complex filter graph into a different set of files without checking its inputs and output. Test one segment first, examine the resulting duration, and listen to the start, end and every edited point.
There is also a practical trade-off. Trimming can remove waiting time, but it may make a live replay feel abrupt if room tone or a natural pause was intended. If the silence is part of the event, leaving it in may be more faithful than editing it out. If it is an accidental recording gap, a carefully chosen trim can help—but the decision should follow listening, not just an automatic threshold report.
5. Choose the concat demuxer or concat filter
Use the concat demuxer when you want to avoid re-encoding and the input files have matching streams and compatible parameters. A basic list for known-compatible inputs looks like this:
ffconcat version 1.0
file 'replay-01.mp4'
file 'replay-02.mp4'
Then, for example:
ffmpeg -f concat -i list.ffconcat -c copy joined.mp4
This copies the streams into a joined output; it does not detect or trim silent audio. Stream copying is often the simpler path when the files genuinely match and their duration information is sound. It avoids another encode, but it gives you no conversion step to reconcile mismatched stream layouts, codecs or time bases. Do not use it as if it could make incompatible inputs compatible.
The concat filter is the re-encoding route when you need to align or convert segments, or when the inputs do not meet the demuxer’s matching-stream requirements. FFmpeg’s FAQ on concatenating video files distinguishes the concat filter from the demuxer, and the concat filter documentation sets out its constraints. In general, each segment must start at timestamp zero and corresponding streams need compatible parameters. If resolutions differ, you need an explicit conversion to a common size; other differences may also call for conversion or stream mapping before joining.
The filter works with audio and video together, but synchronization needs attention. FFmpeg notes that it uses the longest stream in a segment to determine that segment’s duration, except for the last, and may pad shorter audio with silence. A difference between the audio and video lengths in an early segment can therefore affect the stitch. Trim related streams coherently, reset segment timestamps as needed, and check what the output does at each boundary.
| Situation | More suitable route | Main trade-off |
|---|---|---|
| Matching streams, compatible parameters, accurate durations; preserve encoded streams | Concat demuxer with stream copy | No conversion step; it cannot reconcile incompatible inputs, and duration errors may affect joins. |
| Inputs need conversion or stream parameters do not match | Concat filter with re-encoding | Offers a place to align formats, but requires encoding and careful audio/video timing. |
| Quiet audio within a file, with no boundary fault | silencedetect to locate, then silenceremove if appropriate |
Requires listening and threshold tuning; it is not a timestamp-gap repair. |
| Frozen picture or unexplained boundary pause | Inspect streams and timestamps first | A silence filter is not the fix; the underlying stream or duration issue must be identified. |
The FFmpeg FAQ is a useful starting point, but the correct command still depends on your actual media. If you need a broader view of the operational choices for an always-on channel, compare cloud playout and a self-hosted VPS; that decision is separate from making a technically clean file join.
6. Verify every transition before using the output
Render a short test and inspect the end of each segment and the start of the next. Listen through the join on headphones or speakers at a sensible level, and watch the picture as well as the audio. Check that speech, music and any event cues are intact, that neither stream starts late, and that the transition does not add silence or cut material unexpectedly.
For a long playlist, do not verify only the first transition. Each pair of files can have different durations, stream layouts or trim points. Make a simple checklist of the joins you have inspected, especially after changing a concat list or filter graph. If the output is encoded, review the actual rendered file rather than assuming a successful FFmpeg exit message proves the result sounds right.
If a new pause appears, return to the evidence: compare the segment durations, inspect the stream timestamps, and listen around the reported silence boundaries. Avoid compensating for a duration mismatch by trimming arbitrary audio, because that can leave video and audio out of sync. If a media file is correct but the live channel still pauses when sources change, investigate the playback and streaming workflow separately. This FFmpeg audio-drift troubleshooting guide covers a related but distinct symptom.
For a continuous channel, a prepared file can remove the need to keep a local playback machine running through every hand-off. StreamNeo is useful when the specific problem is keeping a prepared replay on air while your own computer is switched off; it does not replace checking the file’s joins or deciding what quiet intervals belong in the recording.
Before committing, compare the operating options on the pricing page. When the file and channel are ready, start free — 24-hour trial, no card.
FAQ
Does silencedetect remove dead air between files?
No. It reports quiet intervals in audio; it does not change the file and does not repair timestamp or duration gaps. Use it to locate quiet audio, then decide whether to trim that audio with silenceremove.
Can I use the concat demuxer if the files have different codecs?
Not as a way to make them compatible. The demuxer expects matching stream layouts and compatible stream properties for stream copying; if conversion is needed, use a concat-filter workflow and re-encode as appropriate.
Why does a pause remain after joining files?
The pause may be actual silence in the recording, inaccurate duration information, unequal audio and video lengths, or a timestamp discontinuity. Inspect the relevant streams and listen at the join before choosing a remedy; the same symptom can have different causes.
Should I always remove silence from event replays?
No. A quiet audience, room tone or pause between speakers may be part of the event. Remove only intervals you have confirmed are unwanted, and check that the edit does not cut speech or put audio out of sync with the picture.