- Home
- Skills
- Image & Video
- Video Export QA
Works with the AI Agents you already use
Video Export QA
Measure what is really inside an exported video or GIF and the loudness and silence of its audio: delivery-spec checks, silent audio, GIF speed and frame-by-frame edit proof.
Free
Video Export QA
Example session with this skill installed
I made a 4 second barcode test clip with your make_test_clip.py (1920x1080, 24 fps, 96 frames) and put it in my editor. I deleted frames 30 to 35 and rejoined the clip, exported it as input.mp4, and I have to deliver it to the spec in spec_h264_1080p24.json. Can you check that the export has exactly the frames I meant and meets the spec?
- Read your context and instructions
- Compiled the video export qa
Demo file: input.mp4 was built with ffmpeg to contain four typical faults (a cut that treats the out point as exclusive, untagged colour, 4:4:4 pixels and a silent audio track). The numbers below are the real, unedited output of the skill on that file.
Verdict: FAIL. 5 of 26 checks failed, 0 warned, 3 were not measured. The export does not match the spec or the edit you described. (Frame numbers count from 0, as the barcode does. No tolerance had to be chosen: every length in the spec is exact.)
| Check | Status | Measured | Expected |
|---|---|---|---|
color_tags | FAIL | space=unknown, transfer=bt709, primaries=bt709, range=tv | space=bt709, transfer=bt709, primaries=bt709, range=tv |
pix_fmt | FAIL | yuv444p | yuv420p |
not_silent | FAIL | mean_volume_db=-91.0, integrated_lufs=-70.0 | mean volume above -90 dB and integrated loudness above -70 LUFS |
lufs_target | FAIL | -70.0 | target=-23.0, tol=1.0 |
expect | FAIL | 0-29,35-95 (91 frames) | 0-29,36-95 (90 frames) |
Reading the expect row: the export holds source frames 0-29,35-95, so the cut removed frames 30 to 34 (five frames) and frame 35 is still there. The out point was treated as exclusive. The edit you described is 0-29,36-95. Size, frame rate, codec and channel layout all matched the spec; the problems are the cut, the colour tags, the pixel format and an audio track that is digital silence.
Next steps
color_tags: space is unknown, spec wants bt709
Do: Convert and tag in one step, see references/pitfalls.md (untagged colour). Re-run and check the tags. A GIF cannot carry tags and is SKIP.pix_fmt: measured yuv444p, expected yuv420p
Do: Export again with the required pixel format (ffmpeg: -pix_fmt yuv420p).not_silent: audio stream present but silent: mean volume -91.0 dB is digital silence
Do: Play the file, then re-export with the audio enabled. A stream that exists is not proof of sound. If the sound is only in the LFE channel, ignore the loudness numbers: BS.1770 does not count that channel.lufs_target: measured -70.0 LUFS, 47.0 LU from the target
Do: Normalise the mix to the target (or pick the correct target for the recipient) and export again.expect: decoded 91 frames, expected 90; first mismatch at output frame 30: expected 36, got 35; 61 mismatching output frame(s)
Do: Read the runs (listed under Barcode runs in report.md, or qa_frames.py --show-runs) to see what the export really contains, then fix the edit or the expectation.
Not measured (SKIP, so no claim is made): no_dropped_frames, no_duplicate_frames, monotonic. They were skipped because the frame expectation was declared with --barcode-expect, which makes expect the verdict for dropped, repeated and re-ordered frames.
Full report: qa_out/report.md and qa_out/report.json. Your export was not modified.
Connects securely to your tools. The creator never sees your data.
About this skill
Prove what is really inside an exported video or GIF, and measure the loudness and silence of its audio. Video Export QA gives your agent measuring tools instead of guesses: every result is a number from ffprobe or ffmpeg, a count of decoded frames, a read of a frame-number barcode, or (for GIF delays) a read of the file's own bytes by a built-in parser.
Questions it answers
- Does this export match the delivery spec? (codec, pixel format, size, frame rate, constant frame rate, frame count, duration, colour tags, audio format)
- Did my edit keep exactly the right frames, in order? Nothing dropped, repeated, reversed or shifted?
- Is the audio silent, too quiet, too loud, reaching the -0.1 dBTP true-peak ceiling or full of gaps? Including the export that has an audio track but only silence.
- How long does this GIF really play, and is it running fast because of rounded frame delays?
- Is this file really constant frame rate? Are two files identical in their decoded picture frames? (Audio and timing are not compared.)
How it works
Make a test clip with the included script (every frame carries a barcode of its own frame number), run it through your editor, and export. The skill reads the barcode on every frame and tells you which source frame sits on each output frame. The check is made on the exported file, so it does not depend on the editor or encoder. Real-editor coverage is limited, though: the recipe was run (by script, not by hand) through Blender 5.1, DaVinci Resolve Studio 21.1 and a third editor, and not through Premiere Pro, After Effects or Final Cut. One command (run_qa.py) produces a single report with PASS / WARN / FAIL / SKIP for each check, the verdict and the next steps first, and then the exact commands used.
Honest by design Nothing is called a PASS unless it was measured. A check that could not run is SKIP, and the report says why. If a check that applies could not be measured, the overall result is WARN (marked NOT MEASURED), never PASS, and a loudness, peak or silence limit on a file with no audio is a FAIL. That includes an audio start offset requested for a file that lacks audio or video: nothing is compared, so it is NOT MEASURED (on a file without audio, a spec that itself says audio.present is false makes that limit vacuous, a plain SKIP). It never edits, converts or deletes your files. The scripts open no network connections themselves and read no environment variables except PATH, which they use to find ffmpeg and ffprobe; the ffmpeg programs they start inherit your normal environment.
What is inside Seven Python tools (standard library only), three spec examples (a full delivery spec, the same without the loudness keys for a barcode run, and a GIF spec), a real sample report and a complete example session, plus reference notes on measured traps: variable frame rate, GIF delay rounding, AAC start offsets, untagged colour, full-range pixel formats, silent exports, raw streams, and a short note for an agent that receives the skill as text with no skill folder (references/no-skill-folder.md: the few files each task needs, and a short program that writes them to a fresh temporary folder and checks every file by SHA-256 before any script runs).
Requirements ffmpeg and ffprobe on your PATH, Python 3.9 or newer. The scripts were run from Claude Code on Windows 11. The 985 automated tests include negative controls (each check is shown to be able to fail); they live in the public repository https://github.com/sawizzle/video-export-qa and are not in the zip. The suite for this version passes on Windows 11 with ffmpeg 5.1, 7.1, 8.0.1, 8.1.1 and 9.0.1 on Python 3.14.6, with ffmpeg 8.1.1 also on Python 3.9.25 and 3.13.13, and in Ubuntu 22.04, Debian 12, Ubuntu 24.04 and Ubuntu 26.04 containers with ffmpeg 4.4.2, 5.1.9, 6.1.1 and 8.0.1. Not tested: macOS, ffmpeg older than 4.4 and other agents. Free.
Source and licence Source code and tests: https://github.com/sawizzle/video-export-qa (MIT OR Apache-2.0), by PurpleDaddy. The copy you get through Agensi is under Agensi's buyer terms (a personal, non-transferable licence).
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
3 installs
Downloaded by developers to date
Free forever
No account required to browse
Trust & safety
Security scanned
Verified clean 2 days ago
- Free to download with an account