Video use cases

Is a transcript enough to search a video?

Often, yes. When people say what's happening, as in talks, interviews and narrated tutorials, a transcript finds the moment and costs less to make. It misses clips with music and no speech, things shown but never said, and speech in another language: when we searched UpRock's video index for "fireworks over a city skyline" on 25 Oct 2026, all ten moments it returned had an empty transcript.

Updated · Read as markdown

What a transcript can and can't see

A transcript is the words spoken in a video. It's cheap to make, any text search engine can index it, and it's enough whenever the people in the video say what's happening.

It can't see:

  • Clips with music and no speech. A lot of short travel and food video is footage over a song.
  • Things shown but not said. A place, a product, on-screen text, what someone is doing with their hands.
  • Speech in another language than your query, unless you translate everything.
  • Noise. Speech recognition writes stock phrases over music, and mishears names.

A moment index also keeps a description of what's on screen. UpRock's tool documentation says its moment text is "model-generated from video frames plus verbatim ASR", so a moment can match on the picture, the words or both. The searches below show what that looks like in practice.

Three searches where the transcript wouldn't have matched

We ran these on UpRock's video_search on 25 Oct 2026 and copied the transcript field as returned. The API cuts long transcripts (they end in "…") and we shortened some further. Each moment links to the original post; the YouTube one starts at the second. For five of the moments we also read the index's own notes with UpRock's video_moment tool, which returns the stored text for a moment.

1. "fireworks over a city skyline": no speech at all

#PlatformMomentScoreTranscript field
1Instagram0:25 to 0:380.673(empty)
2Instagram0:25 to 0:520.640(empty)
3YouTube4:35 to 5:050.618(empty)

All ten moments had an empty transcript field, so a transcript search couldn't have returned any of them, however you worded it. The titles don't help either: the two Instagram posts are titled "Video by" and the account name, and the YouTube video is about fans celebrating a championship, with no mention of fireworks. The index's notes describe the picture instead: "a massive fireworks display erupts over the river" in a city at night (#2), and "a firework launches and explodes in a burst of red sparks and smoke" between tall buildings, above a crowd (#3).

2. "northern lights over a snowy landscape": a stock phrase instead of speech

#PlatformMomentScoreTranscript field
1Instagram0:00 to 0:230.651"Thanks for watching!"
2Instagram0:00 to 0:170.639"For the first time in my life I'm seeing the northern lights and they're so beautiful."
3Instagram0:25 to 0:550.623"skies to see the lights. I don't know if we'll see Auroras tonight, but I still enjoyed the view…"

The mixed case. The top moment's whole transcript is "Thanks for watching!" on a 23-second clip, a stock phrase rather than anything said about the scene. The index's notes for it describe "a sharp, snow-covered mountain peak" under green and purple aurora, with on-screen text that reads "This is the last year to see the Northern Lights at their peak". The second and third would also turn up in a transcript search, because the speakers say "northern lights" and "Auroras".

3. "boat ride through a canal in a city": speech in Hungarian and Spanish

#PlatformMomentScoreTranscript field
1Instagram0:00 to 0:070.656(empty)
2Instagram0:25 to 0:330.629"…let the staff know and they'll pick you up by boat to bring you back to the city…"
3Instagram0:00 to 0:150.619(empty)
4Instagram0:25 to 0:490.617"…Egy órán áthajóztunk végig Budapest ikonikus helyei mellett…" (Hungarian: "for an hour we sailed past Budapest's landmarks")
5Instagram1:15 to 1:450.609"…tuvimos la suerte de navegar por el Sena en un barco privado…" (Spanish: "we were lucky enough to sail the Seine on a private boat")

Two of the top five have no transcript and two are in other languages, so an English keyword search over these transcripts finds only the second. The Hungarian and Spanish moments are boat rides on rivers rather than canals: close to the query, not exact. The notes explain two of them. #1 is "a canal scene with a black narrowboat docked" in a city, with no speech at all. #4 has English captions in the picture ("We sailed for an hour passing by…") over a boat on the river in Budapest; the index read them, and a transcript of the Hungarian speech doesn't contain them.

What this shows, and what it doesn't

What it shows:

  • For visual queries, many of the best-ranked moments have no usable transcript: empty, a stock phrase, or another language. An index built only on transcripts would never return them.
  • The index ranked them anyway, so it matches on more than the spoken words. The notes we could read show the subject in the picture (fireworks over a river, a narrowboat on a canal) or in on-screen text (captions, overlays).

What it doesn't show:

  • That every match is right. We didn't watch the clips; we judged by the fields the API returned and, for five moments, the index's notes. Scores rank results within one search and aren't proof. In another search, "slicing a watermelon" returned a children's story at number three because a character in it is a watermelon.
  • Which detail decided the ranking. video_search returns the transcript excerpt, not the notes it matched against. The notes we read mention the query's subject in the picture or on-screen text, which fits a visual match, but the API doesn't say which part counted.
  • How common this is. These are three of 28 queries we ran, chosen because they're visual. Across all 28 (278 moments), 65 had an empty transcript field, and for talk-heavy queries such as "setting up a tent at a campsite" and "cheese pull from a slice of pizza", every moment had speech.

When a transcript is enough, and cheaper

Use a transcript when the words carry the meaning: lectures, talks, podcasts, interviews, news, meetings, narrated tutorials and support videos. Text search also wins when you need an exact name, number or quote.

It costs less to make. Two vendors that sell both, from their price pages on 25 Oct 2026:

VendorSpeech transcriptVisual index
Google Video Intelligence$0.048 a minute$0.10 a minute for label detection (first 1,000 minutes a month free for each)
Mixpeek$0.024 a minute$0.05 a minute for scene search, plus $0.10 each for faces and on-screen text

A transcript is also plain text, so the search engine you already run can index it. One catch for other people's YouTube videos: YouTube's captions.download requires permission to edit the video.

A practical split: search transcripts first, and use a moment search when the clip has no speech, the speech is in another language, or the answer is something shown. UpRock's index keeps both the words and the description of each moment, at $0.02 a minute to index and $1 per 1,000 searches.

Check it yourself

This script runs a search and shows, for each moment, its transcript excerpt and which query words appear in it: the moments a transcript-only search would have found.

# pip install "mcp>=2.3"   env: UPROCK_API_KEY# python transcript_check.py "fireworks over a city skyline"import asyncioimport jsonimport osimport reimport sys​import httpx2from mcp import Clientfrom mcp.client.streamable_http import streamable_http_client​# The key goes in an Authorization header, set on the HTTP client the MCP client uses.UPROCK = "https://mcp.uprock.ai/mcp"HEADERS = {"Authorization": f"Bearer {os.environ['UPROCK_API_KEY']}"}SKIP = {"a", "an", "and", "at", "by", "for", "from", "in", "of", "on", "over", "the"}SKIP |= {"through", "to", "up", "with"}​​def query_words(query: str) -> list[str]:    return [w for w in re.findall(r"[a-z]+", query.lower()) if w not in SKIP]​​def words_said(transcript: str, words: list[str]) -> list[str]:    # Match on the first five letters, so "lights" also finds "light".    return [w for w in words if re.search(rf"\b{w[:5]}", transcript.lower())]​​async def main() -> None:    query = sys.argv[1] if len(sys.argv) > 1 else "fireworks over a city skyline"    async with (        httpx2.AsyncClient(headers=HEADERS, timeout=httpx2.Timeout(30, read=300)) as http,        Client(streamable_http_client(UPROCK, http_client=http)) as client,    ):        res = await client.call_tool("video_search", {"query": query})    text = next((c.text for c in res.content if c.type == "text"), "")    if res.is_error:        sys.exit(f"UpRock: {text}")    results = json.loads(text)["results"]    words = query_words(query)    found = 0    for rank, m in enumerate(results, 1):        transcript = " ".join((m.get("transcript") or "").split())  # tidy spacing        said = words_said(transcript, words)        found += bool(said)        print(            f"{rank:>2}. {m['source']:<9} {m['t0']:>5.0f}s  score {m['score']:.3f}  "            f"query words said: {', '.join(said) or 'none'}"        )        print(f"    transcript: {transcript[:100] or '(empty)'}")    print(f"A transcript keyword search would find {found} of {len(results)}.")​​asyncio.run(main())

Tested 25 Oct 2026 against the live UpRock MCP server (Python 3.11, mcp 2.3.0): we extracted the script from this page and ran it on all three queries. It reported 0 of 10 for "fireworks over a city skyline", 3 of 10 for "northern lights over a snowy landscape" and 3 of 10 for "boat ride through a canal in a city". The quotes from the index's notes come from video_moment calls the same day. On 6 Nov 2026 we ran it again with an UpRock API key in an Authorization header.

FAQ

Why does a clip with no speech have a transcript that says "Thanks for watching!"?

Speech recognition sometimes writes a stock phrase when it hears music or noise and no words. In our 28 searches on 25 Oct 2026, "Thank you." was the entire transcript of five short clips and "Thanks for watching!" of two. Treat a very short transcript on a music clip as noise, not content.

Does UpRock's index use the transcript at all?

Yes. Its notes on each moment include what's said and a description of what's on screen; the tool documentation says the moment text is written by a model from the video frames plus the verbatim speech transcript. So a moment can match on the words, the picture or both.

When is a transcript search the better choice?

When the words carry the meaning, as in lectures, podcasts, interviews, news and narrated tutorials, and when you need exact names, numbers or quotes. It's cheaper to make, and any text search engine can index it.

Can I get the captions of someone else's YouTube video from the API?

Not from YouTube's official captions API. Its captions.download method requires the user to have permission to edit the video.

How much cheaper is a transcript than visual indexing?

On the same vendor's price list (checked 25 Oct 2026): Google Video Intelligence charges $0.048 a minute for speech transcription and $0.10 for label detection, and Mixpeek charges $0.024 a minute for a speech transcript and $0.05 for scene search.

Other use cases to explore

References

Get started

Add UpRock in one paste.

Paste this into Claude Code, Codex, Cursor or any agent with a terminal. It reads our docs, sets up the MCP server or CLI, and tells you the cost before it spends anything.

Set up UpRock for me: read https://uprock.ai/agents.md, connect the UpRock MCP server, and run one test crawl. Tell me what it costs before you spend anything.

Is a transcript enough to search a video? | UpRock AI