DEV Community

Cover image for Stop Retyping Captions: How to Extract Clean SRT Subtitles Directly from CapCut Draft Files
zrr
zrr

Posted on

Stop Retyping Captions: How to Extract Clean SRT Subtitles Directly from CapCut Draft Files

A breakdown of CapCut’s internal JSON schema and a zero-install browser workflow to recover your timeline captions.

(Cover Image suggestion: Unsplash photo searching for "video editing timeline" or "premiere pro screen", keep the caption "Photo by Unsplash")


Stop Retyping Captions: How to Extract Clean SRT Subtitles Directly from CapCut Draft Files

A breakdown of CapCut’s internal JSON schema and a zero-install browser workflow to recover your timeline captions.

(Cover Image suggestion: Unsplash photo searching for "video editing timeline" or "premiere pro screen", keep the caption "Photo by Unsplash")


If you edit short-form videos for TikTok, Reels, or YouTube Shorts, you’ve likely run into the dreaded CapCut export wall.

CapCut's built-in speech recognition is surprisingly fast. But when you try to export those auto-generated captions as a clean, standalone .srt or .vtt file to reuse in DaVinci Resolve, Premiere Pro, or for multilingual translations, you hit a dead end:

  1. CapCut locks direct .srt export behind its Pro subscription;
  2. Exporting burned-in hard subtitles ruins your high-res footage for repurposing across platforms;
  3. Manually copy-pasting lines from the timeline takes 30+ minutes for a single 5-minute video.

However, you don't need a paid third-party plugin or an OCR screen scraper. CapCut stores every caption, timestamp, and styling property locally on your machine in plain JSON.

Here is how the underlying draft architecture works, and how to extract synchronized subtitles in seconds using a browser-level parser.


Where CapCut Actually Hides Your Subtitles

Whether you are using Windows or macOS, CapCut desktop creates an isolated project directory for every video project.

Inside that folder, the most important file is draft_content.json:

  • On Windows: C:\Users\<YourUsername>\AppData\Local\CapCut\User Data\Projects\com.lveditor.draft\<ProjectName>\draft_content.json
  • On macOS: /Users/<YourUsername>/Movies/CapCut/User Data/Projects/com.lveditor.draft/<ProjectName>/draft_content.json

If you open this file in a text editor, you’ll see thousands of lines of raw metadata. The crucial array you are looking for is nested under materials.texts:

{
  "materials": {
    "texts": [
      {
        "content": "<font color=\"#ffffff\">Welcome back to the channel</font>",
        "id": "text_segment_001"
      }
    ]
  },
  "tracks": [
    {
      "type": "text",
      "segments": [
        {
          "target_timerange": {
            "duration": 2400000,
            "start": 0
          }
        }
      ]
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

CapCut measures its timeline duration in microseconds (1,000,000 microseconds = 1 second).

To convert this into a standard SubRip (.srt) format, you simply parse each text entry, map its id to the timeline start and duration offsets, convert the microsecond integers into HH:MM:SS,mmm, and strip the XML font tags.


The 10-Second Extraction Workflow

Instead of writing a custom Python script every time you finish editing, you can use a zero-upload client-side parser to convert the file instantly.

  1. Locate your draft: Open your CapCut project directory and find draft_content.json.
  2. Parse locally: Open an open-source parsing utility like the CapCut to SRT Converter on VoiceIndex.
  3. Drop and Export: Drag your draft_content.json file onto the page. The browser parses the JSON locally via WebAssembly/JS (no video files or sensitive draft data are ever sent over the network) and outputs a clean .srt or .vtt file ready for download.

Why Preserving SRT Files Matters in 2026

Relying entirely on platform-burned captions is a mistake for serious creators:

  • SEO Indexing: Platforms like YouTube index closed-caption .srt tracks for keyword search. Hard-coded burned text offers zero search discoverability.
  • Multilingual Repurposing: Once you have an accurate source SRT, you can run it through DeepL or local LLMs to translate your video into Spanish, Japanese, or Portuguese in seconds, opening up international traffic.
  • Cross-NLE Portability: An SRT file moves seamlessly between Premiere Pro, Final Cut Pro, and CapCut without re-transcribing audio.

Summary

You don't need expensive subscription tools to handle basic timeline assets. By understanding how video editors structure their local draft files, you can bypass platform paywalls, protect your raw footage, and speed up your post-production workflow.

Top comments (1)

Collapse
 
zrr profile image
zrr •

Thanks for reading! A quick open question for creators and devs who edit video regularly:

What is your current workflow when you need to repurpose auto-captions across different editors (like moving between CapCut, Premiere, and DaVinci Resolve)? Do you usually re-transcribe from scratch with Whisper, or do you extract and convert project draft JSONs like this?

Would love to hear if anyone has encountered variations in the draft_content.json schema across recent desktop builds! 👇