simple_speech Cookbook

Common Recipes for Everyday Tasks

Basic Recipes

Recipe 1: Transcribe Video to VTT Subtitles

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("lecture.mp4").export_vtt ("lecture.vtt")
end

Recipe 2: Export to Multiple Formats

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("meeting.mp4")
    l_dummy := quick.export_vtt ("meeting.vtt")
                    .export_srt ("meeting.srt")
                    .export_json ("meeting.json")
end

Recipe 3: Check Transcription Status

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("video.mp4")
    
    if quick.has_segments then
        print ("Transcribed " + quick.segment_count.out + " segments%N")
    else
        print ("Error: " + quick.last_error + "%N")
    end
end

Chapter Detection

Recipe 4: Auto-Chapter a Long Video

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("course.mp4")
                    .set_sensitivity (0.5)              -- Lower = more chapters
                    .set_min_chapter_duration (60.0)    -- Min 1 minute
                    .detect_chapters
                    .export_chapters_json ("chapters.json")
end

Recipe 5: Fine-Tune Chapter Detection

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("podcast.mp4")
    
    -- High sensitivity = fewer, more distinct chapters
    l_dummy := quick.set_sensitivity (0.8)
                    .set_min_chapter_duration (120.0)  -- Min 2 minutes
                    .detect_chapters
    
    print ("Detected " + quick.chapter_count.out + " chapters%N")
end

Recipe 6: Export Chapters as VTT

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("documentary.mp4")
                    .detect_chapters
                    .export_chapters_vtt ("chapters.vtt")
end

Video Embedding

Recipe 7: Create Self-Describing Video

local
    quick: SPEECH_QUICK
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    if quick.process_video ("raw.mp4", "finished.mp4") then
        -- finished.mp4 now has embedded captions + chapters
        print ("Embedded " + quick.chapter_count.out + " chapters%N")
    end
end

Recipe 8: Embed Only Captions (No Chapters)

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("input.mp4")
                    .embed_captions_only ("output.mp4")
end

Recipe 9: Embed Only Chapters (No Captions)

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("input.mp4")
                    .detect_chapters
                    .embed_chapters_only ("output.mp4")
end

Recipe 10: Full Fluent Workflow

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    l_dummy := quick.transcribe ("video.mp4")
                    .set_sensitivity (0.6)
                    .detect_chapters
                    .export_vtt ("captions.vtt")
                    .export_chapters_json ("chapters.json")
                    .embed_to ("output.mp4")
end

Batch Processing

Recipe 11: Process Multiple Files

local
    batch: SPEECH_BATCH_PROCESSOR
    pipeline: SPEECH_PIPELINE
do
    create pipeline.make ("models/ggml-base.en.bin")
    create batch.make (pipeline)
    batch.add_file ("video1.mp4")
    batch.add_file ("video2.mp4")
    batch.add_file ("video3.mp4")
    batch.set_format ("vtt")
    batch.run   -- Memory-conscious sequential processing
end

Recipe 12: Use Pipeline for Full Control

local
    pipeline: SPEECH_PIPELINE
    detector: SPEECH_TRANSITION_DETECTOR
    result: SPEECH_CHAPTERED_RESULT
do
    create pipeline.make ("models/ggml-base.en.bin")
    create detector.make
    
    if pipeline.is_ready then
        create result.make (pipeline.transcribe ("video.mp4"))
        result.set_detector (detector)
        result.detect_chapters
        result.export_full_vtt ("captions.vtt")
        result.export_chapters_json ("chapters.json")
    end
end

Recipe 13: Error Handling

local
    quick: SPEECH_QUICK
    l_dummy: like quick
do
    create quick.make_with_model ("models/ggml-base.en.bin")
    
    if not quick.is_ready then
        print ("Error: Model not loaded%N")
    else
        l_dummy := quick.transcribe ("video.mp4")
        if not quick.has_segments then
            print ("Transcription failed: " + quick.last_error + "%N")
        else
            l_dummy := quick.detect_chapters.embed_to ("output.mp4")
            if quick.last_error /= Void then
                print ("Embedding failed: " + quick.last_error + "%N")
            end
        end
    end
end