RUN 60s-1080p · 2026-10-23T10:35:45Z

60 s 1080p watermark splice benchmark

sim1080 · 1920×1080@30 · 128×32 mark · C wm-splice · 1,800-frame segment · 2 IDRs in one moof · 100 measured reps. This page is the full tagged result set, not a projection.

▶ live players #60s-1080p #1-moof #1800-samples #2-IDR #multi-GOP #probe-PASS #strict-decode-PASS #pixel-verified #SLO-p50-FAIL #SLO-p99-FAIL #RSS-129.8MiB
Verdict: 60 s is technically valid and verified — multi-GOP/multi-IDR in one segment works — but it is not deployable under the current per-segment SLO. 4 s is the only tested shape that passes both p50 (≤30 ms) and p99 (≤150 ms). 6 s is the safe upper bound to measure next.
Median wall
150.51 ms
100 reps · single-moof 60 s
p99 wall
161.36 ms
SLO ceiling 150 ms → fail
CPU mean
146.38 ms
0.146 CPU-s per segment
Peak RSS
129.8 MiB
per in-flight 60 s splice
Throughput
6.60 seg/s
single 2-CPU reference
100-seg batch
1.83 s
8 logical cores, ideal

Live players #video #60s #30s #4s

Native HTML5 H.264 players. The 4 s baseline autoplays muted as a loop; the 60 s player is the verified primary output. Both 60 s containers carry the same 1,800 samples, so one progressive MP4 covers both — the two-moof timing remains in the stats above. The lower pair is a 4× zoom of the 160×64 window around the 128×32 watermark region.

Muted by default · native controls · loops
60 s · single-moofVERIFIED1,800 samples2 IDRs
Primary benchmark output · 150.52 ms median · 161.36 ms p99 · 129.8 MiB peak RSSMP4
30 sVERIFIED900 samples1 IDR
68.00 ms median · 73.01 ms p99MP4
4 s baselineLIVE LOOP120 samples1 IDR
10.25 ms median · 11.12 ms p99 · contract baselineMP4

Watermark region · 4× zoom

160×64 crop at (1712,624), scaled 4× nearest. Left: original, no mark. Right: spliced output, region changed. This run uses the PCM placeholder fill, not the production text-plate library.

Original regionno mark
Source, unmodified regionMP4
Spliced regionregion changedPCM
0 non-region pixel diffs at frames 0 / 1500MP4

Players are recorded outputs, looped for preview. This is not a real-time encoder stream. The 60 s player and both zoom players use the verified single-moof output; the two-moof output is container-equivalent after progressive remux (byte-identical MP4).

Run shape #method #60s #1800f

Source / segment

Source
ffmpeg testsrc2 1920x1080@30, 1800 frames
Resolution / fps
1920x1080 @ 30 fps
Encoder
patched x264 0.164.x slice-map, keyint 900, min-keyint 900, CRF 28, veryfast, CAVLC, bframes 0, no-deblock, threads 1
Encoded
1,800 frames · 22.37 MB · 83 s · 2982.41 kb/s · encode wall 83
Sequence
keyint 900 / min-keyint 900 → exact 30 s IDR boundaries; 60 s segment contains two 30 s GOPs (IDRs at 0 and 900).
Zone
MB (108,40) · 8×2 MB / 1728×640 px · first_mb 4908 · C=8 R=2
Segment object
1 moof / 1 trun · 1,800 samples · 2 IDRs · 22.40 MB input; second variant has 2 moofs × 900 samples.

Benchmark method

Binary
/home/bein/wm/tools/c/wm-splice
Binary SHA-256
a98ec6a8aae99c3563f8c32a…
Reps
60 s 1-moof: 100; 60 s 2-moof: 50; 30 s: 50; 4 s: 100. 3 warm-ups discarded per case.
Execution
one C wm-splice process per request; full C post-probe; output written; warm page cache; sequential; taskset -c 0,1; RLIMIT_AS=4 GiB
Constraint
taskset -c 0,1 + RLIMIT_AS=4 GiB on a 16-logical-CPU / 65.75 GB host; no other benchmark load. This is a 2-CPU constrained reference, not a 2-vCPU VM.
Timing
wall + wait4 user/sys CPU + peak RSS per child; warm page cache.
Verification
C probe / Python probe, stock ffmpeg strict decode, ffprobe keyframes, pixel diff, SHA-256.

Segment-size comparison #fresh #100-reps #SLO

median bar (teal ≤150 ms, red >150 ms)30 ms p50 ceiling150 ms p99 ceiling
4 s baseline10.25 ms median · 10.07 CPU mean
30 s68.00 ms median · 67.36 CPU mean
60 s · single-moof150.51 ms median · 146.38 CPU mean
60 s · two-moof144.80 ms median · 141.61 CPU mean
ShapeSize / outputMedian wallp95p99CPU meanPeak RSSSLOTags / comment
4 s baseline
120 f · 1 IDR · 1 moof
1.52 MB
1.52 MB input · 1.52 MB output (+0.11%)
10.25 ms10.73 ms11.12 ms10.07 ms10.9 MiBPASS p50 / PASS p99
#1080p#4s#baseline#1-IDR#SLO-p50-PASS#SLO-p99-PASS#low-RSS
Contract-shaped baseline. 15 zone rotations/min, 1,800 requests/2 h, 10.9 MiB peak RSS. Passes both SLOs.
30 s
900 f · 1 IDR · 1 moof
11.18 MB
11.21 MB input · 11.18 MB output (-0.24%)
68.00 ms72.06 ms73.01 ms67.36 ms65.8 MiBFAIL p50 / PASS p99
#1080p#30s#1-IDR#exact-30s-keyint-900#SLO-p50-FAIL#SLO-p99-PASS
Exact 30 s requires keyint 900; with the original keyint 120 source use 28 s or 32 s. 2 rotations/min, 240 requests/2 h. p50 fails, p99 passes.
60 s · single-moof
1,800 f · 2 IDR · 1 moof
22.35 MB
22.40 MB input · 22.35 MB output (-0.23%)
150.51 ms159.07 ms161.36 ms146.38 ms129.8 MiBFAIL p50 / FAIL p99
#1080p#60s#1-moof#1800-samples#2-IDR#multi-GOP#multi-IDR#SLO-p50-FAIL#SLO-p99-FAIL#RSS-129.8MiB
1,800 samples in one moof/trun, IDRs at sample 0 and 900. Mark verified in the second GOP. 1 rotation/min, 120 requests/2 h. p50 and p99 both fail; 129.8 MiB peak RSS.
60 s · two-moof
1,800 f · 2 IDR · 2 moof
22.34 MB
22.39 MB input · 22.34 MB output (-0.23%)
144.80 ms152.14 ms155.04 ms141.61 ms130.0 MiBFAIL p50 / FAIL p99
#1080p#60s#2-moof#2-IDR#multi-fragment#SLO-p50-FAIL#SLO-p99-FAIL#RSS-130.0MiB
Two 900-sample fragments. Nearly the same latency as the single-moof shape. 120 requests/2 h. p50 and p99 both fail; 130.0 MiB peak RSS.

Fresh runs: 4 s 100 reps, 30 s 50 reps, 60 s 1-moof 100 reps, 60 s 2-moof 50 reps. The 60 s 1-moof shape is the primary run. All four fresh outputs passed the Python probe, the C wm-probe recheck, and stock ffmpeg strict decode (exit 0, 0 stderr bytes); keyframe/pixel detail is shown for the 60 s case. SLO is per segment: p50 ≤30 ms and p99 ≤150 ms.

60 s run detail #60s #100-reps #stats

Single-moof 60 s

Metric1 moof2 moof
n10050
Wall min143.60 ms139.01 ms
Wall median150.51 ms144.80 ms
Wall mean151.57 ms145.67 ms
Wall p95159.07 ms152.14 ms
Wall p99161.36 ms155.04 ms
Wall max163.24 ms156.79 ms
Wall stdev5.12 ms4.48 ms
Wall CV3.4%3.1%
CPU mean146.38 ms141.61 ms
CPU p95149.99 ms144.90 ms
CPU p99150.72 ms147.57 ms
Peak RSS129.8 MiB / 136.1 MB130.0 MiB / 136.3 MB
Throughput6.60 segments/s6.86 segments/s
100 segments CPU14.64 CPU-s14.16 CPU-s
100 on 8 cores1.83 s1.77 s
100 on 2 cores7.32 s7.08 s
120 on 8 cores2.20 s2.12 s
120 on 2 cores8.78 s8.50 s
SLO p50FAILFAIL
SLO p99FAILFAIL
C probe recheckPASS (1800 samples, rc 0)PASS (1800 samples, rc 0)
Output22.35 MB (-0.23% vs input)22.34 MB (-0.23% vs input)
SHA-2561ccdd36f722379d0d6a25d3d…170e19b0de49f8f609e5b31b…

Wall-time distribution

100 sequential warm-cache splices of the 60 s single-moof segment. Median 150.5 ms; p99 161.4 ms; SLO ceiling 150 ms.

0815143.60–145.01 ms: 13 samples145.01–146.41 ms: 8 samples146.41–147.81 ms: 6 samples147.81–149.21 ms: 15 samples149.21–150.62 ms: 9 samples150.62–152.02 ms: 1 samples152.02–153.42 ms: 5 samples153.42–154.82 ms: 9 samples154.82–156.23 ms: 12 samples156.23–157.63 ms: 10 samples157.63–159.03 ms: 6 samples159.03–160.43 ms: 2 samples160.43–161.84 ms: 3 samples161.84–163.24 ms: 1 samples143.6150.5161.3163.2median 150.5p99 161.3
count per binmedianp99

Verification #probe #decode #pixels

Probe

PASS

Python probe: 1800 samples · --expect-substituted · rc 0
C wm-probe recheck: PASS (1800 samples, rc 0)

Strict decode

exit 0

0 stderr bytes under -err_detect explode+crccheck -xerror

Keyframes

0, 900

IDR samples 0 and 900 → two GOPs in one 60 s segment

Pixel proof

frame 0
non-region diffs: 0
region changed: 3864
frame 1500 · second GOP
non-region diffs: 0
region changed: 3844
original · frame 0 · no substitution
original · frame 0 · no substitution
spliced · frame 0 · region changed (PCM placeholder)
spliced · frame 0 · region changed (PCM placeholder)
original · frame 1500 · second GOP
original · frame 1500 · second GOP
spliced · frame 1500 · mark persists
spliced · frame 1500 · mark persists

Crop: 160×64 px at (1712,624), scaled 4× nearest. This benchmark uses the fail-open PCM placeholder fill, not the production FreeType text-plate library. The image proves region substitution and persistence in the second GOP; it is not a text-legibility test.

SHA-256: 1ccdd36f722379d0d6a25d3dc4061da3f1f0dace6cc8d8f58280c56bb3ca795f
1ccdd36f722379d0d6a25d3dc4061da3f1f0dace6cc8d8f58280c56bb3ca795f · 22,346,965 bytes

Capacity math #10GB #CPU-seconds #concurrency

100 concurrent 60 s splices on a 10 GB unit: no. 10 GiB ÷ 129.8 MiB = 78.9 with zero overhead; 10 GB decimal ÷ 136.1 MB = 73.5; at 20% headroom that is 59–63. 100 × 129.8 MiB = 12.7 GiB just for the splices.
100 segments every 140 ms: also no for 60 s. One 60 s splice is ~0.146 CPU-s; 100 segments = 14.6 CPU-s. On 8 logical cores that is ~1.83 s, and you would need ~105 cores to finish in 140 ms. The 4 s shape needs only ~8 cores for the same 100/140 ms target.
Metric4 s30 s60 s single-moof60 s two-moof
Peak RSS (MiB)10.965.8129.8130.0
Max concurrent in 10 GiB (zero overhead)9381567979
Max concurrent in 10 GB decimal (zero overhead)8731457373
Max concurrent in 10 GiB at 80% headroom7501246363
CPU mean (ms/segment)10.0767.36146.38141.61
100 segments = CPU-s1.016.7414.6414.16
100 segments on 8 cores (s)0.130.841.831.77
100 segments on 2 cores (s)0.503.377.327.08
120 segments = CPU-s1.218.0817.5716.99
120 segments on 8 cores (s)0.151.012.202.12
Cores needed for 100 segments in 140 ms7.248.1104.6101.1
100 segments input I/O (GB)0.1521.1212.2402.239
I/O rate for 100 in 140 ms (GB/s)1.088.0116.0015.99

RSS is peak RSS per in-flight process, not per cached segment. CPU-seconds are single-core seconds; wall time scales as CPU-seconds / usable cores (ideal, no I/O or memory contention). Numbers include the current C post-probe and output write. Shared libc pages make RSS a slight overcount vs PSS.

Requests, startup and ABR granularity #requests #startup #seek

SegmentShapeSizeRequests / 2 hDownload @10 Mb/s@25 Mb/s@50 Mb/sSeek / ABR stepTags
4 s baseline120 f · 1 IDR · 1 moof1.52 MB1,8001.21 s0.49 s0.24 s4 s#1080p#4s#baseline#1-IDR#SLO-p50-PASS#SLO-p99-PASS#low-RSS
30 s900 f · 1 IDR · 1 moof11.21 MB2408.97 s3.59 s1.79 s30 s#1080p#30s#1-IDR#exact-30s-keyint-900#SLO-p50-FAIL#SLO-p99-PASS
60 s · single-moof1,800 f · 2 IDR · 1 moof22.40 MB12017.92 s7.17 s3.58 s60 s#1080p#60s#1-moof#1800-samples#2-IDR#multi-GOP#multi-IDR#SLO-p50-FAIL#SLO-p99-FAIL#RSS-129.8MiB
60 s · two-moof1,800 f · 2 IDR · 2 moof22.39 MB12017.91 s7.17 s3.58 s60 s#1080p#60s#2-moof#2-IDR#multi-fragment#SLO-p50-FAIL#SLO-p99-FAIL#RSS-130.0MiB

Full-segment download assumption. Progressive players may start before the segment completes, but common fMP4 players wait for the full segment; at 60 s the object is 22.4 MB. 30/60 s therefore trades 7.5–15× fewer requests for 7.5–15× coarser startup, seek and ABR steps.

Anti-crop cost #anti-crop #zone-rotation

60 s single-zone
Zone fixed for 1,800 frames. One static crop of the 128×32 region removes the mark for the full minute. 1 rotation/min.
30 s single-zone
Zone fixed for 900 frames. 2 rotations/min. Better than 60 s, still 7.5× less rotation than 4 s.
4 s baseline
15 zone rotations/min. A static crop only removes one 4 s window per minute. This is the anti-crop shape the schedule was designed for.

The 60 s grouped per-GOP test preserves the 4 s rotation inside one delivery object: 15 sub-splices + concat, 234 ms/60 s, strict decode exit 0. But the current whole-file one-schedule probe cannot validate it, and 234 ms is over the 150 ms p99 ceiling. It is not a drop-in path; it would need per-GOP schedule support in one splicer pass.

All per-iteration results #raw #300-runs

Every measured run, not just aggregates. Warm-up runs are excluded. Raw JSON: stats.json · stats.min.json.

4 s baseline — all 100 measured runs (wall ms, CPU ms, user ms, sys ms, peak RSS KB)
iwallcpuusersysRSS KBexit
010.4210.256.154.10106240
110.099.945.963.98105960
210.2910.147.103.04105960
310.4110.255.594.66106200
410.4010.195.095.09106080
510.089.885.933.95105960
610.039.855.913.94105960
710.609.966.972.99106240
810.119.916.942.97105960
910.029.826.872.94105240
1010.099.904.954.95105160
1110.159.955.973.98105360
129.889.677.522.15105360
1310.2210.015.464.55105680
149.849.636.423.21105960
159.829.616.413.20106000
169.759.576.702.87106240
179.759.574.784.78106160
189.749.556.682.86106240
1910.4610.265.135.13105120
2010.7710.557.672.88105920
2110.3510.217.143.06106200
2210.4410.285.614.67105960
2310.1610.036.024.01106200
2410.4010.277.193.08106240
2510.1810.046.034.02105920
2610.6610.525.265.26105240
2710.1710.027.013.00106040
2810.3710.235.115.11105960
2910.129.924.964.96106240
3010.289.676.443.22106160
319.929.734.864.86105240
329.949.737.791.95105680
339.869.646.752.89105120
349.689.477.581.89105200
3510.009.795.883.92105920
369.789.596.712.88105120
379.949.703.885.82105920
389.799.586.393.19106160
3911.2411.036.015.01106120
4010.3210.185.095.09105120
4110.2610.136.084.05106200
4210.2810.146.453.69106240
4310.5710.406.244.16106160
4410.2710.116.074.04106240
4510.3810.238.182.04105120
4610.2510.115.065.06105080
4710.3310.206.124.08105360
4810.3110.165.085.08106080
4910.5510.424.176.25106160
5010.4010.275.604.67106160
5110.159.946.962.98105920
5210.5210.305.155.15105360
5310.019.856.563.28105160
549.759.565.314.25105920
559.939.716.473.23106200
569.759.565.733.82106200
579.969.775.863.91106160
5810.049.844.924.92105920
5910.6110.384.725.67106120
6010.069.905.943.96105640
6110.3910.246.144.10105160
6210.4710.335.634.69106040
6310.2410.106.064.04105920
6410.129.915.953.96105680
6510.6210.386.613.77105120
6610.2810.147.093.04106200
6710.169.995.993.99105920
6810.009.805.883.92106160
6910.129.904.954.95111840
7010.5210.355.175.17106240
7110.2910.154.066.09106080
7210.5710.414.735.68105200
7310.109.975.983.99106120
7410.7110.484.765.72105120
7511.1210.724.875.85105240
7610.7710.627.732.90105120
7710.1310.016.004.00105240
7810.7210.586.733.85106080
7910.2910.134.056.08105960
8010.5410.407.283.12105120
8110.2910.145.075.07105240
8210.3010.154.066.09106200
8310.1310.008.002.00106200
8410.2310.105.055.05106120
8510.2110.055.025.02106040
8610.2610.116.074.05105960
8710.6710.553.846.71106160
8810.1210.006.004.00106200
8910.4010.285.145.14105160
9010.039.874.944.94105920
9110.4410.317.502.81105920
9210.1510.024.016.01106200
9310.7110.574.805.77106160
9410.9110.705.844.86106040
9510.4410.275.135.13106240
9610.089.894.954.95105360
9710.129.933.975.96106240
9810.3410.117.083.03105960
9910.019.795.873.92105240
30 s — all 50 measured runs (wall ms, CPU ms, user ms, sys ms, peak RSS KB)
iwallcpuusersysRSS KBexit
067.2366.9541.5925.36672760
169.4969.2342.1427.09673800
269.2668.9943.9925.00673840
367.9767.6644.4423.23673800
468.0367.3037.7329.57673880
568.4067.9840.9826.99672920
666.9066.6438.7927.85672880
767.9267.6543.7723.88673600
866.7066.4644.3122.15673800
967.0066.7046.4920.21673760
1067.1166.8442.9023.94673800
1166.3266.0840.0526.03673560
1267.4167.1039.0628.04673600
1368.2867.9838.9928.99673600
1469.2468.9841.9926.99672840
1567.3167.0240.0127.01673160
1669.3769.1038.0631.05672760
1767.1766.9139.9526.96672840
1868.6968.4237.6830.74673080
1973.1869.9042.9426.96673240
2067.6267.3642.5924.76673840
2171.8968.1243.0825.04673560
2270.6266.7943.5223.28673120
2366.8866.5643.3723.20673840
2466.3565.9243.6122.31673840
2568.2567.9443.9623.98673200
2666.8366.5742.7223.84673360
2771.3966.7840.8625.91672360
2872.0866.5141.6924.82673160
2968.5368.2944.1924.10673160
3066.5266.2441.1525.09672760
3168.2167.9537.9729.98673800
3267.3867.1238.0729.05673800
3368.0467.7945.8621.93672840
3467.4667.2138.5428.66672360
3572.8369.0042.6226.38673200
3669.3069.0343.0226.01673800
3770.5166.8740.9225.95673600
3867.8667.5640.3427.23672360
3966.5366.2243.1423.07673240
4066.2465.9739.9825.99672160
4166.0665.7738.8626.90672800
4266.2065.8942.5823.32673120
4370.8166.6344.4222.21673840
4472.0566.2536.6929.56673200
4571.6568.1037.0531.05672840
4668.0867.8038.8928.91673760
4766.9966.6941.4325.26672240
4868.1567.8244.5423.28673640
4967.6967.4243.2724.15673640
60 s · single-moof — all 100 measured runs (wall ms, CPU ms, user ms, sys ms, peak RSS KB)
iwallcpuusersysRSS KBexit
0153.19144.3986.2458.161329400
1149.98143.9289.9553.971329160
2150.46144.1889.1155.071329360
3145.05144.7583.4361.321328440
4153.58148.0689.0359.021328560
5153.75145.2986.9858.311328360
6161.22150.7189.4261.291329440
7157.42146.6292.3954.231328560
8149.50149.2286.1363.091329160
9147.34147.0492.0255.011329120
10156.05147.7587.8559.901329440
11148.32148.0384.0264.021329240
12147.76147.3684.6362.731329360
13147.83147.4790.2957.181328360
14144.74144.4676.2468.221328440
15154.07144.0581.5962.451328440
16156.18144.8186.4858.321328320
17155.73144.3686.8257.541329360
18158.79148.6888.4060.271329360
19148.35148.0588.0360.021329360
20150.07144.5683.3261.241329280
21154.91143.7789.2454.531329360
22155.03143.5189.6953.821329440
23145.32144.0484.0260.021329240
24145.39145.0785.0460.031329080
25146.16145.5586.7358.821329440
26153.51149.5993.3756.221328360
27158.33147.2787.5759.701329440
28157.55147.0293.6553.371329440
29159.01146.8280.4566.371329360
30149.06148.6488.3860.261329360
31148.77148.4593.2855.171328360
32153.54149.4583.6965.761328320
33156.62145.0793.0552.031329280
34155.63144.8284.0660.761329320
35155.04144.1780.6563.521329280
36144.40144.0984.0560.041329240
37150.15144.4786.2858.191329360
38156.27145.4586.8658.581328320
39155.16145.2986.7758.521328440
40148.80148.5081.2867.231328440
41147.41147.1194.0753.041328880
42147.80147.5090.6956.811329360
43153.39145.0286.0159.011328400
44143.80143.5286.7156.811328320
45145.00144.7088.8255.891328440
46144.49144.1683.0961.071328440
47145.35145.0494.0351.011329120
48155.32145.4283.2462.181328320
49156.92145.2587.7557.491329400
50155.62144.7888.8655.911328880
51160.64150.3490.2060.131328360
52148.50148.2089.1259.081328880
53145.20144.8783.9260.941328360
54146.28145.9786.9858.991329120
55149.06148.7286.8461.881329320
56145.45145.1483.0862.061329440
57144.85144.5088.3156.191329440
58150.57144.7088.8255.881329360
59156.26144.3886.2358.161328400
60161.34147.9789.5958.381329400
61147.87147.2889.1758.111329280
62144.59144.2591.1653.091329360
63147.84147.5390.7156.821329400
64147.32147.0388.0259.011329120
65153.38148.4491.2757.171329240
66156.32144.6295.0949.531329400
67159.05147.8690.3057.561328320
68157.78147.9989.3958.601329440
69148.12147.8389.8957.931329120
70149.71144.0583.4560.601329280
71154.79144.6384.3760.261329080
72153.38143.9580.9762.981328280
73149.13143.6989.4354.261329240
74143.60143.2996.2047.101329160
75143.76143.4784.6958.781329360
76151.89144.0688.0456.021329160
77144.10143.8089.8853.921329360
78150.31149.9791.9857.991328440
79150.15149.8589.9159.941329360
80148.35148.0390.0258.011329360
81155.88148.7198.1550.561328360
82163.24151.1991.1160.081328840
83157.88147.3391.2056.121328400
84157.16147.2386.5560.681329120
85147.55147.2687.5659.701328520
86157.59147.8785.9261.951329280
87158.95147.4386.6660.771329120
88156.36150.6887.8262.871328440
89152.95148.8485.9162.931328320
90149.13148.8290.8957.931328360
91153.60150.3591.2159.141329400
92159.44148.6991.8156.881328400
93153.43147.3381.1866.151328360
94144.66144.3391.2153.121328320
95143.68143.3888.6254.761329160
96148.30147.9988.9959.001328320
97144.06143.7688.8554.911329400
98154.54149.6593.7855.871329160
99156.09143.6781.8161.861328360
60 s · two-moof — all 50 measured runs (wall ms, CPU ms, user ms, sys ms, peak RSS KB)
iwallcpuusersysRSS KBexit
0148.37142.7684.4558.311330280
1140.52140.2487.1553.091331000
2150.83139.5989.7449.851330240
3150.02139.7783.4656.311331200
4145.61139.3085.5753.731331040
5156.79143.5192.3351.181330960
6142.99142.6889.4353.251331240
7147.61140.1190.0750.041331240
8150.20140.8279.4661.361330960
9145.71139.1987.1252.071331000
10151.70140.0886.4353.651331320
11146.84146.5392.7153.831331200
12143.35143.0388.0255.011330320
13139.90139.6282.7756.841331000
14144.51144.2087.5256.691330240
15146.18141.8687.9153.951331200
16149.33142.5495.3647.181331320
17149.94145.4898.3247.151331200
18151.38143.2388.1455.091331280
19142.90142.5883.7558.821331040
20148.22143.2987.1756.111331040
21149.39142.3488.5953.751331160
22153.22148.5693.7254.841331240
23151.23142.8387.9054.931330280
24142.22141.9281.9559.971330240
25140.03139.7185.8253.891331000
26148.27139.9686.5953.371331120
27139.50139.1887.1152.071331120
28143.38143.0793.0550.021331200
29143.70143.3989.2454.151331000
30140.18139.8788.5551.321331120
31149.88139.9887.6252.371330280
32144.44139.0682.0457.031331320
33152.30142.0588.0354.021331280
34142.99142.6797.4645.211331240
35139.01138.6686.4152.251330200
36144.96139.1283.0856.051331320
37149.52143.0690.0453.021331160
38151.94142.6094.7447.871331120
39142.11141.7885.8755.911331160
40141.89141.5893.7247.861331320
41142.23141.9088.9452.961331000
42142.94142.6187.3755.231330440
43144.65143.1687.1056.061331160
44139.77139.4090.6148.791331120
45147.54139.4792.3147.161330440
46144.05143.6987.4256.271330200
47139.75139.3791.2448.131331000
48139.45139.1485.4753.671331280
49140.22139.9081.9457.961331040

Related measured results #context #pilot

ResultMeasurementTags / comment
120-min 1080p origin encode10,037 s (167.3 min) for 215,880 frames · ~21.5 fps
#1080p#encode#4s-source#keyint-120
Part 1: 3,615 s + part 2: 6,422 s. This is the 4 s/keyint-120 source used by the original contract run, not the 60 s source.
12-min 1080p C-splice2,192 ms total · 12.2 ms / 4 s segment · 180 segments
#1080p#4s#c-splice#180-seg
Same C binary; warm cache; includes process spawn and post-probe. An earlier 10-segment sample measured 11.3 ms/seg.
4 s 1080p earlier sample113 ms / 10 segments = 11.3 ms/seg
#1080p#4s#10-seg
Earlier point measurement; the fresh 100-rep baseline is 10.25 ms median on the same binary/constraint.
720p 4 s pilot10.7 ms / segment
#720p#4s#pilot
Earlier measured pilot. Included for scale only; it is not directly comparable to the fresh 1080p run.
60 s pilot146.8 ms single-moof / 138.7 ms two-moof (3 reps)
#60s#pilot#3-reps
Pilot before the 100/50-rep run. The fresh medians are 150.5 / 144.8 ms and are the primary results on this page.
60 s grouped per-GOP test234 ms / 60 s · 15 sub-splices + concat · strict decode exit 0
#60s#per-GOP-zones#anti-crop-preserved#requires-new-probe#p99-FAIL
Keeps the 4 s zone rotation inside a 60 s delivery object, but the current whole-file one-schedule probe cannot validate it; 234 ms/60 s is over p99. Not a drop-in path.

Caveats and limits #honesty #scope

  • Content is synthetic FFmpeg testsrc2 1920×1080@30. Production content, motion and rate control will change per-frame cost and segment size.
  • Timing is one C wm-splice process per request, including full C post-probe and output write. An in-process server with buffer pooling may be faster; that is not measured here.
  • Warm page cache, no other benchmark load, sequential requests. Cold cache, parallel load, and 1,000-concurrent AC-5 are not measured.
  • Pinned to CPUs 0,1 and RLIMIT_AS=4 GiB on a 16-logical-CPU / 62 GB host. This is a constrained reference path, not a 2-vCPU VM.
  • The benchmark uses the PCM placeholder fill, not the production FreeType text plate. Visual proof shows region substitution, not text legibility.
  • Only stock ffmpeg software decode was used. No hardware decoder is available on this box (MediaCodec / VideoToolbox / NVDEC / QSV unverified).
  • 30 s exact needs keyint 900; 60 s one-IDR would need keyint 1800. The original 4 s source uses keyint 120, so 30 s is not IDR-aligned there (28 s or 32 s).
  • SLO is per segment (p50 ≤30 ms, p99 ≤150 ms). If the SLO were redefined per minute, the conclusion would change.
  • RSS is peak resident set size; shared pages mean PSS would be slightly lower, not enough to fit 100 × 60 s in 10 GB.
  • Single-moof 60 s is valid ISO BMFF and decodes in ffmpeg; player/CDN behavior beyond this oracle is not verified.

Artifacts #download #repro

Primary run output: out-60s-1moof.m4s · 22.35 MB · SHA-256 1ccdd36f722379d0d6a25d3dc4061da3f1f0dace6cc8d8f58280c56bb3ca795f. Input: fixed60-1moof.m4s · 22.40 MB · SHA-256 033b45b30c249c1e48abfc58f9e596d926d7a673abecce257158b7d44aee336c.