Turn a messy podcast recording into a clean, subtitled episode with one script, then sell it
A rough recording goes in at -27 LUFS with the guest buried under the host, and one script later it comes out levelled at -16 LUFS, pauses cut, with subtitles and a transcript. Do that first, on your own PC. Then turn it into a service: who pays, three packages, about an hour of hands-on work per 30-minute episode once you're practised, and clients won within UK marketing rules.
- A kit to download: checklist with timings, intake form, terms outline, pricing calculator, weekly scoreboard and a 30-day plan
- The technical lessons this builds on: Shrink, trim and reformat with FFmpeg, Cut silences automatically and Subtitles for any video. For video podcasts, Shrink any video too
- A Windows PC, a Mac or a Linux PC. The kit's script comes in both versions: finish-episode.ps1 and finish-episode.sh
- Wired headphones and a quiet room. You're paid to listen
- About 6 to 8 hours a week for the first month: practice, samples and outreach
Clean, cut and finish every episode the same way
One routine, in the same order every time, is how a 30-minute episode becomes an hour's work instead of an evening.
The technical skills come from four lessons. Do them first, then come back:
- Shrink, trim and reformat with FFmpeg: installs FFmpeg, which does the cleaning and loudness here.
- Cut silences automatically: auto-editor, for the pauses.
- Subtitles for any video: Whisper, for transcripts and subtitles (step 2).
- Shrink any video: HandBrake, for phone-friendly preview copies of video episodes.
The order matters:
- 1. Marked mistakes first. The client's timestamps refer to the raw recording, and every later step moves them. Open the raw file in a free audio editor such as Audacity ↗, drag across each mistake, press Delete, and export as WAV. For video, cut them in a video editor such as Shotcut.
- 2. Clean: cut low rumble, reduce steady hiss, and even out the loud and quiet voices.
- 3. Cut pauses with auto-editor. Cleaner audio makes the silences easier for it to find.
- 4. Finish: add the intro and outro, set the loudness, export.
- 5. Check the finished file with a meter, then listen.
Why -16 LUFS?LUFS measures how loud something sounds across a whole episode. Apple's podcast audio requirements ↗ recommend about -16 LKFS, plus or minus 1 (LKFS and LUFS are the same thing), with the true peak no higher than -1 dBFS. UK studios such as Music Radio Creative ↗ deliver -16 LUFS "for all major platforms", and it's the safe level to deliver everywhere.
Here's a deliberately rough 81-second test episode: two text-to-speech voices, the guest 11dB quieter than the host, with hiss and 50Hz mains hum added. Run these commands from the episode's folder (they're shown for PowerShell; on a Mac or Linux, use
/instead of\in the paths). First, clean:1. Cleanffmpeg -i work\ep012-edit.wav -af "highpass=f=80,afftdn=nf=-50:tn=1,dynaudnorm=f=250:g=15" work\ep012-clean.wavhighpass=f=80removes rumble below 80Hz: traffic, desk knocks, some mains hum.afftdnis FFmpeg's noise reducer, for steady hiss. On the test episode the hiss in pauses was 5dB quieter with it than without.dynaudnormevens out loud and quiet stretches, so the guest isn't buried.
Then cut the pauses with auto-editor, using the options from its lesson. A conversation needs more breathing room than a solo video, so start with 0.3 seconds before and 0.5 seconds after speech. Check with
--previewfirst, as the lesson shows:2. Cut pauses& "$HOME\auto-editor\auto-editor.exe" work\ep012-clean.wav --margin 0.3s,0.5s -o work\ep012-cut.wavThen join the client's intro and outro, set the loudness and make the MP3. The intro and outro can be any format (mono 22kHz files work fine) and FFmpeg matches them up:
3. Finishffmpeg -i ..\01-assets\intro.mp3 -i work\ep012-cut.wav -i ..\01-assets\outro.mp3 -filter_complex "[0:a][1:a][2:a]concat=n=3:v=0:a=1,aformat=channel_layouts=stereo,loudnorm=I=-16:TP=-1.5:LRA=11" -ar 44100 -c:a libmp3lame -b:a 128k deliver\smallshop-ep012.mp3TP=-1.5aims a little under Apple's -1 limit, to leave room for the MP3 encoding. Now measure what you made:4. Checkffmpeg -hide_banner -nostats -i deliver\smallshop-ep012.mp3 -vn -af ebur128=peak=true:framelog=quiet -f null -Read the Summary at the bottom. The raw test file, then the finished one:
OutputRaw recording I: -27.3 LUFS LRA: 16.8 LU Peak: -9.1 dBFS Finished episode I: -15.8 LUFS LRA: 9.6 LU Peak: -1.9 dBFSPassI between -17 and -15, and Peak at -1.0 or lower. The guest went from 12.5 LU quieter than the host to 3.2 LU quieter. Skip the clean step and only set loudness, and the same file comes out at -17.2 LUFS, just outside Apple's range, with the guest still 6.5 LU quieter. Evening out the voices is what makes the difference.
CarefulA meter measures volume, not quality. Always listen to the result on headphones. Noise reduction can make voices sound watery or robotic, especially on very noisy files. If it does, takeafftdn=nf=-50:tn=1,out of the clean command, or use Audacity's Effect > Noise Removal and Repair > Noise Reduction, where you can hear the result before you apply it. Audacity also has Effect > Volume and Compression > Loudness Normalization (manual ↗) if you prefer clicking to typing.Video podcasts use the same steps, but keep the picture untouched (
-c:v copy) and only rework the sound. auto-editor cuts the video too (the lesson explains the jump cuts and its 4K limit). Clean and finish for video:1. Clean (video)ffmpeg -i work\ep012-edit.mp4 -c:v copy -af "highpass=f=80,afftdn=nf=-50:tn=1,dynaudnorm=f=250:g=15" -c:a aac -b:a 256k work\ep012-clean.mp43. Finish (video), after auto-editor has made ep012-cut.mp4ffmpeg -i work\ep012-cut.mp4 -c:v copy -af "aformat=channel_layouts=stereo,loudnorm=I=-16:TP=-1.5:LRA=11" -ar 48000 -c:a aac -b:a 192k -movflags +faststart deliver\smallshop-ep012.mp4A video test episode comes out at -15.9 LUFS, true peak -1.8 dBFS, with the picture copied across untouched.
Or run the whole thing with one scriptThe kit's finish-episode.ps1 (or finish-episode.sh on a Mac or Linux) does all five steps plus the Whisper transcript, and says PASS or CHECK. Save it in your
Clientsfolder once, then run it from inside each episode folder:Windows PowerShellcd $HOME\Clients\SmallShop\ep012 powershell -ExecutionPolicy Bypass -File ..\..\finish-episode.ps1 -In work\ep012-edit.wav -Name smallshop-ep012 -Intro ..\01-assets\intro.mp3 -Outro ..\01-assets\outro.mp3Mac / Linux (save finish-episode.sh in your Clients folder)cd ~/Clients/SmallShop/ep012 bash ../../finish-episode.sh --in work/ep012-edit.wav --name smallshop-ep012 --intro ../01-assets/intro.mp3 --outro ../01-assets/outro.mp3Output== 4/5 Measuring the finished file Loudness -15.8 LUFS (target -16, Apple allows +/-1), true peak -1.9 dBFS (must be -1 or lower): PASSIt looks for auto-editor where the auto-editor lesson puts it (
$HOME\auto-editor). If it's somewhere else, add-AutoEditorand its full path. If it can't find it, it says so and carries on without cutting. Add-NoDenoiseif voices sound watery, and-SkipCaptionsfor the Clean package. The Mac and Linux script works the same way: it finds auto-editor on your PATH (or use--auto-editorand the full path), and takes--no-denoiseand--skip-captions.
If it breaksThe check says CHECK, for example -17.2 LUFS + 3 more
The check says CHECK, for example -17.2 LUFS
loudnorm part, for example ...LRA=11,volume=0.5dB. Use the gap to -16: at -16.5, add 0.5dB. The peak goes up by the same amount, so check it stays at -1.0 or lower. For example, that takes -16.4 to -15.9, with the peak at -1.8. Putting the gain before loudnorm does nothing, because it measures again and undoes it."running scripts is disabled on this system"
-ExecutionPolicy Bypass lets this one script run without changing any settings on your PC.The voices pump or breathe (the background swells up between words)
g=15 to g=31 (FFmpeg's default, which is smoother). That leaves the guest slightly quieter (3.6 LU instead of 2.8), which is still fine.