# 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 25 Oct 2026. Web page: https://uprock.ai/video/transcripts-vs-video-search

## On this page

- [What a transcript can and can't see](#what-a-transcript-can-and-cant-see)
- [Three searches where the transcript wouldn't have matched](#three-searches-where-the-transcript-wouldnt-have-matched)
- [What this shows, and what it doesn't](#what-this-shows-and-what-it-doesnt)
- [When a transcript is enough, and cheaper](#when-a-transcript-is-enough-and-cheaper)
- [Check it yourself](#check-it-yourself)
- [FAQ](#faq)
- [Other use cases to explore](#explore)
- [Related articles](#related)
- [References](#references)
- [Get started](#get-started)

## 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

| # | Platform | Moment | Score | Transcript field |
|---|---|---|---|---|
| 1 | Instagram | [0:25 to 0:38](https://www.instagram.com/reel/DR45rdwEo4Z/) | 0.673 | (empty) |
| 2 | Instagram | [0:25 to 0:52](https://www.instagram.com/reel/DSpfxRaAjta/) | 0.640 | (empty) |
| 3 | YouTube | [4:35 to 5:05](https://www.youtube.com/watch?v=xoGQ3hpaiks&t=275s) | 0.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

| # | Platform | Moment | Score | Transcript field |
|---|---|---|---|---|
| 1 | Instagram | [0:00 to 0:23](https://www.instagram.com/reel/DRChnYzjFhq/) | 0.651 | "Thanks for watching!" |
| 2 | Instagram | [0:00 to 0:17](https://www.instagram.com/reel/DVt-bikkWxr/) | 0.639 | "For the first time in my life I'm seeing the northern lights and they're so beautiful." |
| 3 | Instagram | [0:25 to 0:55](https://www.instagram.com/reel/DRAYO1fEj6d/) | 0.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

| # | Platform | Moment | Score | Transcript field |
|---|---|---|---|---|
| 1 | Instagram | [0:00 to 0:07](https://www.instagram.com/reel/DFcwpMwA2H2/) | 0.656 | (empty) |
| 2 | Instagram | [0:25 to 0:33](https://www.instagram.com/reel/DXNBWmQieDl/) | 0.629 | "…let the staff know and they'll pick you up by boat to bring you back to the city…" |
| 3 | Instagram | [0:00 to 0:15](https://www.instagram.com/reel/DZDwRdtDZvl/) | 0.619 | (empty) |
| 4 | Instagram | [0:25 to 0:49](https://www.instagram.com/reel/DMnuawMNB4W/) | 0.617 | "…Egy órán áthajóztunk végig Budapest ikonikus helyei mellett…" (Hungarian: "for an hour we sailed past Budapest's landmarks") |
| 5 | Instagram | [1:15 to 1:45](https://www.instagram.com/reel/DY4sA7zsSjm/) | 0.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:

| Vendor | Speech transcript | Visual index |
|---|---|---|
| [Google Video Intelligence](https://cloud.google.com/video-intelligence/pricing) | $0.048 a minute | $0.10 a minute for label detection (first 1,000 minutes a month free for each) |
| [Mixpeek](https://mixpeek.com/pricing) | $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](https://developers.google.com/youtube/v3/docs/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.

```python
# pip install "mcp>=2.3"   env: UPROCK_API_KEY
# python transcript_check.py "fireworks over a city skyline"
import asyncio
import json
import os
import re
import sys

import httpx2
from mcp import Client
from 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

- [Link to the exact second](https://uprock.ai/video/search-video-by-what-happens#linking-to-the-exact-second): open a YouTube result at the moment it matched, and what to do on TikTok and Instagram.
- [Compare video AI prices](https://uprock.ai/video/video-understanding-costs#the-prices-side-by-side): indexing, search and storage across nine vendors, with a 100-hour worked example.
- [Use video search in a LangChain agent](https://uprock.ai/integrations/langchain): load UpRock's MCP tools, video_search included, as LangChain tools.
- [The open video index](https://uprock.ai/video-semantic-search): how the shared index works and what searching and indexing cost.

## Related articles

- [How do I search TikTok and YouTube by what happens in a video?](https://uprock.ai/video/search-video-by-what-happens.md): Five searches we ran on UpRock's public video index, the moments they found across YouTube, TikTok and Instagram, and code that links to the exact second.
- [What does video AI cost in 2026? Indexing, search and storage](https://uprock.ai/video/video-understanding-costs.md): Indexing, search and storage prices for nine video AI services, checked on their own pages on 25 Oct 2026, and what 100 hours and 100,000 searches cost on each.
- [Can AI watch videos? Video understanding options for agents](https://uprock.ai/video/give-your-agent-eyes.md): A decision table for giving an agent video, from captions to a model that watches one video, a private index or a shared public index, with a tested function.
- [Video use cases: all articles](https://uprock.ai/video.md)

## References

1. [UpRock, everything in one file (MCP server, tools and prices)](https://uprock.ai/llms-full.txt), checked 25 Oct 2026
2. [Google Cloud, Video Intelligence API pricing (speech transcription and label detection)](https://cloud.google.com/video-intelligence/pricing), checked 25 Oct 2026
3. [Mixpeek, Pricing (speech transcript add-on, scene search, faces and on-screen text)](https://mixpeek.com/pricing), checked 25 Oct 2026
4. [YouTube Data API, captions.download (requires permission to edit the video)](https://developers.google.com/youtube/v3/docs/captions/download), checked 25 Oct 2026

## Get started

Get an API key: https://uprock.ai/app/api-keys

Paste this into your agent:

```text
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.
```

Setup for every client (MCP, skill, CLI): https://uprock.ai/agents.md
