
evidence-midgop-gray-dead-air.png / mg_12.0.png). Same leak the checklist below flags — not the green KEEP timeline on the LosslessCut product review.You just exported KEEP segments from LosslessCut. Do not drop that MP4 into HandBrake, Premiere, or Resolve yet. First check whether the container duration matches the keep length you marked, whether video packet counts match expected frames, and whether a mid-GOP cut leaked dead-air gray into the junction — then decide whether the file is clean enough to encode for delivery.
This Guide is the post-export QA checklist. The same-day LosslessCut interview-cut review covers how we marked segments and exported. Do not treat them as the same article.
Test note: October 16, 2026, Asia/Shanghai, Debian GNU/Linux 13 (trixie). Tools: LosslessCut 3.69.0 (official Linux x64 tarball); ffmpeg / ffprobe 7.1.5-0+deb13u1. Fixture: 36.000 s Seattle interview, 1280×720 H.264 (keyint=30) + AAC eng + soft captions. We probed exports under evidence/losslesscut/out/. We did not run HandBrake (or any other delivery encoder) on these files — HandBrake appears only as the decision gate after QA.
Accept criteria before you encode
Persona: an editor who already cut dead air in LosslessCut and needs a binary go / no-go before a delivery encode. Minimum checks:
| Check | PASS | FAIL | HOLD |
|---|---|---|---|
| Stream copy (optional) | Export log shows -c copy on mapped streams | Unexpected re-encode in the logged ffmpeg line | No export log available |
| Container duration vs keep | Duration within your delivery tolerance of expected KEEP sum | Multi-second unexpected content you can see at the junction | You never recorded expected keep length |
nb_read_packets vs frames | Packet count matches expected picture length at nominal fps | Extra packets that sample as dead air / wrong segment | Unknown fps / keyint assumptions |
| Junction / blackframe | No unwanted near-black (or dead-air color) at the cut | Mid-GOP gray (#333) or other dead-air leak in keep timeline | — |
| A/V duration delta | Tens of ms (AAC priming scale) | Multi-second A/V drift in ffprobe durations | Player sync not measured here |
In our fixture, mid-GOP gray leak at the junction is an automatic FAIL for clean interview delivery — even though the export still used stream copy.
1. Confirm what LosslessCut wrote (optional but useful)
If you still have the app log from Export+merge, scan for copy codecs. Our keyframe keep merge logged lines like:
ffmpeg … -t '12.000000' … '-c:0' copy '-c:1' copy '-c:2' copy … KEEP A …
ffmpeg … -ss '24.000000' -i … '-c:0' copy … KEEP B …
ffmpeg … -f concat … '-c:0' copy '-c:1' copy '-c:2' copy … cut-merged …
Codecs on the merged MP4 were h264 + aac + mov_text. The Success dialog itself warned: “Cutpoints may be inaccurate.” Treat that as a reminder to run the probes below — not as proof the file is wrong.
2. Probe container duration and streams
ffprobe -hide_banner -show_entries format=duration -show_streams -of default export.mp4
On keep-merged-keyframe.mp4 we measured format duration ≈ 25.021 s (duration=25.021333), not the exact 24.000 s of KEEP A (0–12) + KEEP B (24–36). Video stream duration reported 25.000000 with nb_frames=720; audio AAC 25.021333. A/V duration delta ≈ 21 ms — AAC priming scale, not multi-second drift.
If you do not know the expected keep sum, mark HOLD and stop guessing from the filename alone.
3. Count video packets
ffprobe -count_packets -select_streams v:0 \
-show_entries stream=nb_read_packets,codec_name \
-of default=noprint_wrappers=1 export.mp4
Our keyframe merge reported nb_read_packets=720 (codec_name=h264). The mid-GOP merge reported 735 packets. Separate-files segA (marked 0–12 s) had 360 packets while format duration=13.000000 — container longer than the 12 s of frames those packets represent (duration padding).
4. Sample the junction (blackframe + stills)
When dead air in the source was near-black, a blackframe pass is a quick reject screen:
ffmpeg -i export.mp4 -vf blackframe=amount=98:threshold=32 -an -f null -
Our keyframe-aligned merge produced no hits (empty probe). That does not catch mid-GOP gray (#333) dead air — blackframe looks for near-black, not medium gray. Pull stills around the KEEP junction:
ffmpeg -ss 12.0 -i export.mp4 -frames:v 1 junc_12.0.png
ffmpeg -ss 12.4 -i export.mp4 -frames:v 1 junc_12.4.png
On the mid-GOP merge (end=12.5 / start=24.4), LosslessCut still logged -c copy, with -t 12.500000 and -ss 24.400000 (keyframe seek before -i). Extracted frames at ~12.0–12.4 s sampled as dead-air gray (#333) — the leak that fails clean interview delivery.
out/frames/mg_12.0.png from keep-merged-midgop.mp4 — uniform gray dead-air (~#333) inside the exported keep timeline after a mid-GOP cut.Worked compare (our probes)
| Export | Format duration | Video packets | Junction / picture | Verdict for clean delivery |
|---|---|---|---|---|
Keyframe merge (keep-merged-keyframe.mp4) | ≈ 25.021 s (vs 24.000 s marked keep) | 720 | blackframe: no hits; A/V Δ ≈ 21 ms | PASS* (padding noted) |
Mid-GOP merge (keep-merged-midgop.mp4) | ≈ 25.021 s | 735 | Gray (#333) frames ~12.0–12.4 s | FAIL mid-GOP leak |
| Separate segA (0–12 s mark) | 13.000 s | 360 (12 s of frames) | Container longer than frame content | HOLD / note padding** |
*PASS here means “no mid-GOP dead-air leak and no multi-second A/V drift in ffprobe”; the ~1 s container padding vs marked keep is expected lossless-cut behavior on this fixture — decide against your delivery tolerance.
**segA alone is not a merge verdict; flag duration padding before you assume the file is exactly 12.000 s of picture.
Decision gate
- PASS — duration/packets within tolerance; no mid-GOP dead-air leak → safe to hand a copy to a delivery encoder such as HandBrake (or an NLE). We did not test HandBrake quality on these files.
- FAIL (mid-GOP leak) — recut on keyframes in LosslessCut, or accept the leak and send to a delivery encoder knowing the gray/dead-air frames remain in the bitstream until a re-encode that can retime them.
- HOLD — you lack expected keep duration, fps, or export log context; do not invent a pass.
Download the checklist
Download the LosslessCut export duration-audit checklist (Markdown). Fill expected keep length before you probe, attach ffprobe excerpts on rejects, and keep the LosslessCut original untouched when you open an encode copy.
FAQ
What should I check after a LosslessCut Export+merge before encoding?
On our October 16, 2026 Seattle fixture (LosslessCut 3.69.0 / ffprobe 7.1.5), we checked container duration vs expected keep length, video nb_read_packets vs expected frames, A/V duration delta, blackframe hits, and extracted frames at the KEEP junction for mid-GOP gray dead-air leak — before any delivery encode.
What failed the mid-GOP export in our test?
The mid-GOP project (end=12.5, start=24.4) still used stream copy (-c copy) with ffmpeg -t 12.500000 and -ss 24.400000, but extracted frames around 12.0–12.4 s in the merged MP4 were dead-air gray (#333). Packet count was 735 vs 720 on the keyframe-aligned merge. Treat that leak as FAIL for clean interview delivery.
Is container duration longer than keep length always a fail?
Not by itself in our evidence. The keyframe-aligned merge measured format duration ≈ 25.021 s against 24.000 s of marked KEEP A+B, with 720 video packets and no blackframe hits. Separate-files segA showed duration=13.000 s with only 360 video packets (12 s of frames) — container padding. Decide against your delivery tolerance; HOLD if you lack an expected keep length.
Did you test HandBrake on these exports?
No. HandBrake appears only as the delivery-encoder decision gate after QA. We did not measure HandBrake encode quality, presets, or sync on these fixtures.
Honest limits
- Windows, macOS, and mobile LosslessCut UIs were not tested.
- Smart Cut mode was not tested.
- Hour-long / multi-GB sources were not tested (fixture is a 36 s synthetic Seattle interview).
- HandBrake (or any delivery encoder) encode quality was not tested on these exports.
- Player A/V sync beyond the ffprobe duration delta (~21 ms) was not measured.
When the checklist fails on mid-GOP leak, recut on keyframes or document the leak before encode. When it passes, encode a copy and keep the LosslessCut export bit-identical for the dispute trail.
Test basis: probes on October 16, 2026 under evidence/losslesscut/. Companion product review: LosslessCut interview-cut review.