School-year lecture capture: 150 hours of transcripts, MAI vs Sume

Five 50-minute classes a week for 36 weeks is 9,000 audio minutes: about $81.00 on MAI-Transcribe-2-Streaming and $91.80 on Sume STT with 900 jobs.

5 min readSume
All posts

A department that records five 50-minute classes a week for 36 weeks ends up with 180 recordings and 150 hours of audio. That is 9,000 audio minutes, about $81.00 on MAI-Transcribe-2-Streaming ($0.54 an audio hour, an introductory rate Microsoft says runs through the end of 2026) and $91.80 on Sume STT 1.0 ($0.01 per audio minute) including the one-cent split job that cuts each recording into pieces of 10 minutes or less.

Inputs are assumptions: five classes a week, 36 weeks, 50 minutes each, English. Microsoft's rate is from its announcement and Sume's from the API reference, pricing page and timeline audio docs, all read 2026-10-05.

What the bill looks like

Each 50-minute class is five 10-minute transcription jobs and one split on Sume, so the year is 900 transcription jobs.

Cost of 9,000 audio minutes (150.0 hours) across 180 classes (read 2026-10-05)
OptionRateTotalJobs
MAI-Transcribe-2-Streaming$0.54 per audio hour (intro rate through end of 2026)$81.00Streaming; no chunking
Sume STT 1.0 (transcription)$0.01 per audio minute ($0.60 an hour)$90.00900 jobs of up to 10 minutes
Sume timeline audio split$0.01 flat per job$1.80180 split jobs, up to 20 ranges each
Sume total$91.80

Plan the pipeline once, then forget it

At 180 recordings the work is an automation problem. A queue of jobs with stable idempotency keys is easier to rerun than a live stream that has to be captured correctly the first time. Sume STT 1.0 takes duration_seconds from 1 to 600, so a recording longer than 10 minutes is cut into pieces first. The timeline audio split job takes up to 20 ranges, so one split covers up to 200 minutes of audio.

  • Name keys by course, date and chunk, for example bio101-2026-10-05-3.
  • Check GET /v1/jobs/{id}/status for sume_status; only completed jobs have a result.
  • A failed or canceled job has no result; /result answers 409 job_not_completed.
  • Add 600 seconds per chunk index to the word timings when you stitch the class transcript back together.

Run it on Sume

This transcribes one class recording; call it from the loop that lists the day's new files.

The recording URL passed in must already be a media.sume.com audio file, because the split job only reads Sume-hosted audio; import it first.

import os, time, requests
API = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def run(path, body, key):
    r = requests.post(API + path, headers={**H, "Idempotency-Key": key}, json=body, timeout=60)
    r.raise_for_status()
    job = r.json()["data"]
    while True:
        s = requests.get(job["status_url"], headers=H, timeout=30).json()["data"]
        if s["terminal"]:
            break
        time.sleep(2)
    if s["sume_status"] != "completed":
        raise RuntimeError(s["sume_status"])
    return requests.get(job["result_url"], headers=H, timeout=30).json()["data"]["result"]
def transcribe_long(media_url, total_s, key):
    ranges = [{"start": a, "end": min(a + 600, total_s)} for a in range(0, total_s, 600)]
    split = {"operation": "split", "url": media_url, "ranges": ranges, "output": {"format": "mp3"}}
    parts = run("/v1/timeline-1.0/audio", split, key + "-split")["segments"]
    texts = []
    for i, p in enumerate(parts):
        body = {"audio_url": p["audio_url"], "language_code": "en",
                "duration_seconds": min(600, total_s - 600 * i)}
        texts.append(run("/v1/stt-1.0/transcribe", body, f"{key}-{i}")["text"])
    return " ".join(texts)

course, date = os.environ["COURSE"], os.environ["CLASS_DATE"]
text = transcribe_long(os.environ["CLASS_URL"], 50 * 60, f"{course}-{date}")
open(f"{course}-{date}.txt", "w", encoding="utf-8").write(text)

When MAI is the better pick

MAI-Transcribe-2-Streaming is $10.80 cheaper over the school year, and Microsoft gives the $0.54 rate only through the end of 2026, so the cost after that is not yet known. If you also want accessible captions burned into the class video, the same Sume account can render them.

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume