Audacity Transcription Presets

July 28, 2026 · View on GitHub

Export presets, silence-trimming settings and macros for turning an Audacity recording into a file that is cheap to store, fast to upload, and loses nothing that a speech-to-text engine can actually use.

This is a staged project. Right now it is a plan plus the settings research behind it; see Status for what has been verified and what has not.


The problem

The default Audacity export is tuned for music: stereo, 44.1 kHz, ~192 kbps. For a dictation recording that is heading straight into Whisper or AssemblyAI, most of that is thrown away on arrival:

  • ASR engines resample to 16 kHz mono internally. AssemblyAI's own docs say the API "converts all files to 16 kHz uncompressed audio as part of its transcription pipeline"; Whisper does the same. A stereo 192 kbps file is downmixed and downsampled before the model sees a single sample.
  • Stereo is pure waste for a single speaker at one microphone. Both channels carry the same signal, doubling file size for zero information.
  • Upload size is a real constraint. OpenAI's transcription endpoint is capped at 25 MB per file. At 192 kbps stereo that is about 17 minutes; at 64 kbps mono it is about 52 minutes.

So the goal is a one-click path from "stop recording" to "correctly encoded file on the Desktop, ready to transcribe".

The three stages

StageWhatFeasibility
1. Export presetsvoice-mp3 and voice-opus — mono, sane bitrate, one keystrokePracticable now. Fully specified below.
2. Trim + export macroOne macro: Truncate Silence → export to DesktopLikely. Both steps are exposed to macros; needs testing.
3. Transcribe in AudacityWhisper runs inside Audacity, text lands on the DesktopStretch. Real but Linux means a source build.

Detail, acceptance criteria and open questions: docs/roadmap.md.


Stage 1 — the presets

Two presets, because the right answer depends on where the file is going.

PresetFormatChannelsRateUse for
voice-mp3MP3, CBRMono64 kbps (96 for difficult audio)The default. Accepted everywhere.
voice-opusOpus, VBR, VoIP modeMono24–32 kbpsLocal Whisper, AssemblyAI, archival.

Why MP3 is still the default

Opus is the better codec by a wide margin — roughly a third of the bitrate for equivalent speech quality — but OpenAI's transcription API will not take it. The accepted extensions are mp3, mp4, mpeg, mpga, m4a, wav, webm. Neither .opus nor .ogg is on that list. Opus inside a .webm container would pass, but Audacity cannot write WebM.

That makes MP3 the safe default and Opus the efficient one, which is worth knowing before you standardise on the wrong one. See docs/format-choice-for-asr.md for the per-service ingest constraints.

Why these bitrates

64 kbps CBR mono is not an arbitrary choice — it is what the Audacity manual itself recommends for spoken-word podcasts ("64 kbps CBR mono for small files, 96 kbps CBR mono for excellent voice quality"). Against the current 192 kbps setting on this machine that is a 6× size reduction with no loss the ASR model can perceive, since it is resampling to 16 kHz regardless.

For Opus, 24–32 kbps mono with the encoder in VoIP mode sits in the same perceptual tier for speech. VoIP mode matters: it is the libopus setting explicitly "optimized for voice", versus the default "Audio" mode tuned for music.

The catch: Audacity has no shareable export preset

This is the finding that shapes the whole design. An Audacity export preset is not an object. There is no preset file to drop in, no named entry in the export dialog. Export settings are global mutable state held in audacity.cfg, and the Export2 macro command takes only a filename and a channel count — no format, no bitrate. Format is inferred from the file extension; everything else comes from whatever was last set in the Export dialog.

Consequently a "preset" here is a fragment of audacity.cfg keys plus a macro that exports with the matching extension. The mechanics, the exact config keys and their observed values are documented in docs/audacity-export-internals.md.


Stage 2 — trim silence, then export

Audacity does expose silence removal to macros: the Truncate Silence effect, scripting id TruncateSilence. So the envisaged single macro is real:

SelectAll
TruncateSilence   (compress mode)
Export2           (mono, to ~/Desktop)

For dictation the manual recommends Compress Excess Silence rather than truncate-to-fixed-length — it scales the excess proportionally and so "tightens lectures and dictation without harming the words", rather than flattening every pause to the same length and destroying the natural rhythm.

Settings, the threshold-tuning trap, and why you should measure your own noise floor first: docs/truncate-silence-for-speech.md.

Draft macro files: macros/ — not yet tested, see the caveat there.


Stage 3 — transcription inside Audacity

This exists. Intel maintains openvino-plugins-ai-audacity, which adds a Whisper Transcription effect (whisper.cpp on an OpenVINO backend) running entirely locally. It writes the transcript into a label track, exportable as SRT, VTT or plain text via File → Export Other → Export Labels.

On this hardware it is the wrong vehicle. OpenVINO is Intel's stack: the GPU plugin is documented as targeting "Intel GPUs, both integrated and discrete", and the CPU plugin as covering "Intel® x86-64 and Arm® CPUs". This laptop is an AMD Ryzen 7 5700U with Radeon integrated graphics and no NPU, so nothing in that stack has anything to accelerate — it would fall back to generic CPU inference. The build cost (Audacity from source, then mod-openvino, plus OpenVINO runtime, Libtorch and whisper.cpp) buys the label-track UI and nothing else.

On-device Whisper itself is perfectly viable here — see docs/roadmap.md for the hardware analysis. It just does not need to happen inside Audacity. Stage 1 plus a plain whisper.cpp call covers the workflow at a fraction of the effort.


Status

Researched and written 2026-07-28 against Audacity 3.7.7 on Ubuntu.

Nothing in this repo has been executed yet. Every setting below is sourced — either read off this machine or taken from the Audacity manual — but the macros have not been run and the config fragments have not been applied.

Confirmed on this machineAudacity 3.7.7; config at ~/.config/audacity/audacity.cfg; MP3 + Opus exporters present and enabled; mod-script-pipe.so present; Export2 registered in Scriptables2
Confirmed from the manualTruncateSilence parameters and defaults; MP3 and Opus export options; OpenAI/AssemblyAI ingest constraints
Inferred, needs testingThe exact Export2 scripting parameter keys; the audacity.cfg enum mappings; that encoder settings are read from config at export time

Inferences are flagged as such at the point they are made. Verification steps are listed in docs/roadmap.md.

Version warning. The current online scripting reference no longer lists Export2 at all — it documents a parameterless ExportAudio instead. This machine's 3.7.7 does register Export2. Macros written here are therefore 3.7.x-specific and are likely to break on a future Audacity. Re-verify after any major upgrade.

Layout

docs/
  audacity-export-internals.md    how export settings are actually stored and applied
  format-choice-for-asr.md        what each transcription service will accept
  truncate-silence-for-speech.md  settings for dictation, and how to tune them
  roadmap.md                      stages, acceptance criteria, open questions
macros/                           draft Audacity macro files (untested)
presets/                          audacity.cfg fragments for each preset