Back to the collection
transcribe·Content & media

transcribe: turn recordings into text, with speaker labels when needed (legacy standalone Skill)

This guide covers an older version from the deprecated openai/skills repository. Check the current official project before installing. Current OpenAI plugins

On this page

transcribe is useful for interviews, meetings and recorded explanations. Supply the file and output format; its Python helper calls the OpenAI audio API. Plain transcription and speaker diarization are separate modes. Ask for who spoke when at the start rather than trying to infer identities from a plain transcript afterward.

Install and prepare

This guide covers the standalone Skill retained in openai/skills. That repository is deprecated and current examples have moved to openai/plugins; the instructions here describe the linked standalone version, not the latest plugin.

Enter this line in the Codex conversation, not a terminal. If the installed Skill does not appear, restart Codex.

Prompt
$skill-installer transcribe
  • Readable local audio and authorization to process its content
  • Python and the openai package
  • OPENAI_API_KEY configured locally, with suitable API access and quota

This standalone version defaults to gpt-4o-mini-transcribe for ordinary transcription. Current API documentation starts ordinary transcription with gpt-transcribe, so the old default is not the latest recommendation. Speaker diarization still has a dedicated gpt-4o-transcribe-diarize and diarized_json path. First check the helper’s accepted model arguments and your account’s availability. [4]

Try a first task

Try this with the path to your recording:

Prompt
$transcribe
Transcribe recordings/interview.m4a in its original language with speaker labels and segment start/end times. First check file size, dependencies, API configuration and supported model arguments without revealing the key. Save to output/transcribe/interview/. Without known-speaker references, use anonymous labels rather than guessing names. Mark unclear passages for review.

Work through the task

  1. Choose scope and format. Provide the file, language hints and whether you need plain text or diarization. Give each input a distinct destination in batch work.

  2. Check request conditions. Confirm local credentials and file limits. Compress or split inputs above 25 MB, avoiding cuts in the middle of sentences.

  3. Listen and validate. Spot-check names, terminology, speaker changes and timing. Change one condition at a time when retrying and retain the final parameters and output paths.

Give the first transcription a reviewable scope

Supply a local audio path, expected language, names or terminology, and desired output format. Start an ordinary interview as plain text; ask for diarized output only when speaker labels matter, and provide known speaker information for checking. For example: “Transcribe interview-01.m4a in Chinese and preserve the speaker’s wording. Return the transcript and separately list unclear time ranges; do not guess personal names.” You must be allowed to process the file, and the key belongs in local OPENAI_API_KEY.

After the first output, listen to samples at the beginning, middle and end, then check names, product terms, numbers and negations. For long audio or a file above the API size limit, split near natural pauses and retain time offsets; cutting a sentence can change its meaning. Use separate output directories for batch files to avoid overwriting earlier results.

Verify speaker labels and timestamps

A diarized result contains model-assigned segments, not confirmed real-world identities. Re-listen to overlaps, distant speakers and background music and mark uncertain spans. At handoff, state the model and output format used, which passages were checked by ear and which remain unclear. Transcription should not be treated as an error-free legal or medical record.

Check the result

A plain job can deliver transcript.txt; a diarized job should provide JSON segments with speaker, start and end information. Check important quotations and identity labels against the audio. Readable text is not proof of verbatim accuracy, and unclear passages should not become confident meeting conclusions.

Common blockers

Credentials or quota are missing. Resolve this in the local API environment without pasting a full key into chat. Check the script’s API requirements separately from subscription access.

Speakers are confused. Where appropriate, provide clear known-speaker references or keep anonymous labels for human review. Overlapping speech can remain inaccurate.

A long recording fails. Check format and size; diarization beyond roughly 30 seconds needs an appropriate chunking setting.

Segment times are not word timings

Decide whether you need “who spoke this segment” or “when did each word occur.” A developer testing the same underlying gpt-4o-transcribe-diarize model found its speaker-labeled result promising but unsuitable for a word-synchronized product because it lacked word-level timestamps. This skill’s diarized_json serves segment start/end times and speaker labels. For karaoke-style highlighting or word-timed captions, validate a separate alignment solution instead of treating segment times as word times.

How did your first task go?

These choices help us understand where readers get stuck through site analytics. Blocking analytics may prevent delivery; use email for a specific issue.

References

  1. transcribe: standalone Skill instructionsOpenAI
  2. openai/skills repository status and installationOpenAI
  3. Codex: build and install SkillsOpenAI
  4. File transcription API guideOpenAI
  5. Almost Perfect, Completely Unusable - openai gpt-4o-transcribe-diarizegeronimosan
Found outdated or incorrect information? Let us know