chore(scripts): remove obsolete nerdletter numbers station scripts

Deleted multiple iterative versions of the numbers station MP4 generator scripts, including platform-specific and experimental variants, as they are no longer required.
This commit is contained in:
Greg Gauthier 2026-04-27 20:41:56 +01:00
parent 203f7b1300
commit 9f23497156
14 changed files with 0 additions and 658 deletions

View File

@ -1,37 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION MP4 GENERATOR
# Lincolnshire Poacher style — retro drama for the Day Book crowd
MESSAGE="$1" # e.g. "HLXIB JACJP ERXHN EFM"
PAGE="$2" # e.g. 001
EPISODE="${3:-01}" # Secret Message number
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
TMP_WAV="temp_voice.wav"
TMP_VIDEO="temp_bg.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
echo "Page ${PAGE} — Generating spoken MP4..."
# 1. Create spoken audio (female voice, slow, numbers-station style)
echo "NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${MESSAGE}" | \
espeak-ng -ven+f3 -s120 -k20 -a 150 -w "$TMP_WAV" \
--punct="" --sep=" " 2>/dev/null
# 2. Create simple retro video background (black screen with green text, 15 seconds)
ffmpeg -f lavfi -i color=black:s=1280x720:d=15 \
-vf "drawtext=font='Courier':fontsize=48:fontcolor=green@0.9:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80,
drawtext=font='Courier':fontsize=36:fontcolor=green@0.8:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=160,
drawtext=font='Courier':fontsize=42:fontcolor=lime:text='${MESSAGE}':x=(w-text_w)/2:y=280:box=1:boxcolor=black@0.6:boxborderw=10,
drawtext=font='Courier':fontsize=28:fontcolor=green@0.7:text='DESTROY PAGE AFTER USE':x=(w-text_w)/2:y=620" \
-c:v libx264 -t 15 -pix_fmt yuv420p "$TMP_VIDEO" -y
# 3. Combine voice + video
ffmpeg -i "$TMP_VIDEO" -i "$TMP_WAV" -c:v copy -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f "$TMP_WAV" "$TMP_VIDEO"
echo "✅ Done! → ${OUTFILE}"
echo "Upload this to the website with the ciphertext text below it."

View File

@ -1,36 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION MP4 GENERATOR — Letter-by-Letter Edition
# Real cold-war numbers station pronunciation
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
echo "Page ${PAGE} — Generating spoken MP4..."
# === CRITICAL FIX: Convert groups to spaced letters for proper pronunciation ===
SPACED_MESSAGE=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g')
# Spoken announcement (clear and dramatic)
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED_MESSAGE}"
echo "$TEXT_TO_SPEAK" | \
espeak-ng -ven+f3 -s105 -k40 -a 180 -w temp_voice.wav --punct="" 2>/dev/null
# Video with retro green text
ffmpeg -f lavfi -i color=black:s=1280x720:d=22 -c:v libx264 -t 22 -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i temp_voice.wav \
-vf "drawtext=font='Courier':fontsize=52:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=38:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=46:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=280:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=32:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f temp_voice.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"
echo "Now each group should be spoken letter-by-letter like a real numbers station."

View File

@ -1,31 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION MP4 GENERATOR — macOS Fixed
# Lincolnshire Poacher style, using drawtext (more reliable on Homebrew)
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
echo "Page ${PAGE} — Generating spoken MP4..."
# 1. Spoken audio (classic numbers station voice)
echo "NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${MESSAGE}" | \
espeak-ng -ven+f3 -s115 -k25 -a 160 -w temp_voice.wav --punct="" 2>/dev/null
# 2. Create background video + burn text with drawtext (no subtitles filter needed)
ffmpeg -f lavfi -i color=black:s=1280x720:d=18 -c:v libx264 -t 18 -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i temp_voice.wav \
-vf "drawtext=font='Courier New':fontsize=48:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier New':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=160, \
drawtext=font='Courier New':fontsize=42:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=260:box=1:boxcolor=black@0.7:boxborderw=12, \
drawtext=font='Courier New':fontsize=28:fontcolor=green@0.7:text='DESTROY PAGE AFTER USE':x=(w-text_w)/2:y=620" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f temp_voice.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"
echo "Upload this MP4 + the text groups to the website."

View File

@ -1,41 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION MP4 GENERATOR — macOS friendly
# Lincolnshire Poacher style for the retro crowd
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
echo "Page ${PAGE} — Generating spoken MP4..."
# 1. Spoken audio (classic numbers-station female voice)
echo "NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${MESSAGE}" | \
espeak-ng -ven+f3 -s115 -k25 -a 160 -w temp_voice.wav --punct="" 2>/dev/null
# 2. Simple retro video (black background + green text) — no drawtext needed
ffmpeg -f lavfi -i color=black:s=1280x720:d=18 -c:v libx264 -t 18 -pix_fmt yuv420p temp_bg.mp4 -y
# Overlay text using subtitles (much more reliable on Homebrew ffmpeg)
cat > temp_sub.srt << EOF
1
00:00:01,000 --> 00:00:18,000
NERDLETTER SECRET TRANSMISSION #${EPISODE}
USE DAY BOOK PAGE ${PAGE}
${MESSAGE}
DESTROY PAGE AFTER USE
EOF
# 3. Burn in subtitles + combine audio
ffmpeg -i temp_bg.mp4 -i temp_voice.wav -vf subtitles=temp_sub.srt:force_style='Fontname=Courier New,Fontsize=42,PrimaryColour=&H00FF00&,BackColour=&H80000000&,BorderStyle=3' \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f temp_voice.wav temp_bg.mp4 temp_sub.srt
echo "✅ Done! → ${OUTFILE}"
echo "Upload this MP4 to the website. Subscribers will feel like they're tuning into a real numbers station."

View File

@ -1,54 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION MP4 GENERATOR — ULTIMATE DRAMA EDITION
# Slow letter-by-letter + shortwave static + Lincolnshire Poacher intro
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
echo "Page ${PAGE} — Generating spoken MP4 with full drama..."
# === 1. Spaced letters for slow, deliberate pronunciation ===
SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g')
# === 2. Full text to speak (very slow & spooky) ===
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}"
echo "$TEXT_TO_SPEAK" | \
espeak-ng -ven+f3 -s80 -k50 -a 200 -w voice_main.wav --punct="" 2>/dev/null
# === 3. Download / prepare assets (run once) ===
if [ ! -f poacher_intro.wav ]; then
echo "Downloading public-domain Lincolnshire Poacher intro (short 12-second clip)..."
# Using a free direct link from The Conet Project style recording (public domain use)
wget -q -O poacher_intro.wav "https://archive.org/download/The-Conet-Project/The%20Conet%20Project%20-%20Recordings%20of%20Shortwave%20Numbers%20Stations%20%281997%29%20%5B2013%20-%2015th%20Anniversary%20Bonus%20Disc%20Edition%5D%20%5BFLAC%5D/Disc%201/06%20-%20The%20Lincolnshire%20Poacher.flac" || \
echo "Manual download needed — see note below"
fi
if [ ! -f static.wav ]; then
echo "Generating shortwave static..."
ffmpeg -f lavfi -i "anoisesrc=d=25:c=0.3" -af "highpass=f=3000,lowpass=f=8000" -t 25 static.wav -y 2>/dev/null
fi
# === 4. Mix audio: Poacher intro + static + voice ===
ffmpeg -i poacher_intro.wav -i static.wav -i voice_main.wav \
-filter_complex "[0:a]volume=0.65[a1];[1:a]volume=0.25[a2];[a1][a2]amix=inputs=2:duration=first[a3];[a3][2:a]amix=inputs=2:duration=first,volume=1.1" \
-c:a pcm_s16le -y final_audio.wav 2>/dev/null
# === 5. Video with retro text ===
ffmpeg -f lavfi -i color=black:s=1280x720:d=28 -c:v libx264 -t 28 -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f voice_main.wav final_audio.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"
echo "Full cold-war numbers station experience achieved."

View File

@ -1,59 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — FIXED LETTER-BY-LETTER + PAUSES
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
# 1. Intro voice
INTRO="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}."
echo "$INTRO" | espeak-ng -ven+f3 -s80 -k50 -a 200 -w intro.wav --punct="" 2>/dev/null
# 2. Build full groups voice letter-by-letter with pauses
> groups_voice.wav # start fresh
for group in $MESSAGE; do
echo "Processing group: $group"
for ((i=0; i<${#group}; i++)); do
letter="${group:$i:1}"
echo "$letter" | espeak-ng -ven+f3 -s74 -k65 -a 210 -w temp.wav 2>/dev/null
cat temp.wav >> groups_voice.wav
rm temp.wav
done
# 1 second pause after each group
ffmpeg -f lavfi -i "anullsrc=r=22050" -t 1.05 silence.wav -y 2>/dev/null
cat silence.wav >> groups_voice.wav
rm silence.wav
done
# Combine intro + groups
ffmpeg -i intro.wav -i groups_voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y voice.wav 2>/dev/null
echo "✅ Full voice track built (letter-by-letter with pauses)"
# 3. Static (if missing)
if [ ! -f static.wav ]; then
ffmpeg -f lavfi -i "anoisesrc=d=50:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.22" -t 50 static.wav -y 2>/dev/null
fi
# 4. Final mix: Poacher tune → Voice, static under everything
ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:a pcm_s16le -y tune_static.wav 2>/dev/null
ffmpeg -i tune_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
# 5. Video
DUR=48
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
rm -f intro.wav groups_voice.wav tune_static.wav temp_bg.mp4
echo "✅ DONE! → ${OUTFILE}"

View File

@ -1,58 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — FINAL SEQUENCE EDITION
# Poacher tune → Voice announcement → Static throughout
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
echo "Building full sequence with Poacher intro first..."
# 1. Spaced letters for slow pronunciation
SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g')
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}"
echo "$TEXT_TO_SPEAK" | \
espeak-ng -ven+f3 -s82 -k50 -a 200 -w voice.wav --punct="" 2>/dev/null
# 2. Ensure assets exist
if [ ! -f poacher_intro.wav ]; then
echo "⚠️ poacher_intro.wav not found — please add a 10-15 second clip manually."
echo " (Download from The Conet Project and trim first 12 seconds)"
exit 1
fi
if [ ! -f static.wav ]; then
echo "Generating continuous shortwave static..."
ffmpeg -f lavfi -i "anoisesrc=d=40:c=0.28" -af "highpass=f=2800,lowpass=f=8500,volume=0.22" -t 40 static.wav -y 2>/dev/null
fi
# 3. Create sequenced audio: Poacher → Voice (with static under everything)
ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \
-filter_complex "
[0:a]volume=0.75[poach];
[1:a]volume=1.05[voice];
[2:a]volume=0.28[stat];
[poach][stat]amix=duration=first[a1];
[a1][voice]acrossfade=d=1.2:o=1:c1=exp:c2=exp[a2];
[stat][a2]amix=duration=longest,volume=1.1[final]
" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
# 4. Video (long enough for intro + voice)
ffmpeg -f lavfi -i color=black:s=1280x720:d=32 -c:v libx264 -t 32 -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f voice.wav final_audio.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"
echo "Sequence: Poacher tune first → Voice → Static throughout"

View File

@ -1,55 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — SIMPLE & RELIABLE SEQUENCE
# Poacher intro first → Voice → Static continuous underneath
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
# 1. Spaced letters + text
SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g')
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}"
echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s82 -k50 -a 200 -w voice.wav --punct="" 2>/dev/null
# 2. Make sure assets exist
if [ ! -f poacher_intro.wav ]; then
echo "❌ Missing poacher_intro.wav — add a 12-15 second clip"
exit 1
fi
if [ ! -f static.wav ]; then
echo "Generating static..."
ffmpeg -f lavfi -i "anoisesrc=d=40:c=0.25" -af "highpass=f=2800,lowpass=f=8500,volume=0.22" -t 40 static.wav -y 2>/dev/null
fi
# 3. Simple sequential mix: Poacher → Voice, with static under both
ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \
-filter_complex "
[0:a]volume=0.72[poach];
[1:a]volume=1.05[voice];
[2:a]volume=0.25[stat];
[poach][stat]amix=duration=first[a1];
[voice][stat]amix=duration=first[a2];
[a1][a2]concat=v=0:a=1[out]
" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
# 4. Video
DURATION=32
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DURATION -c:v libx264 -t $DURATION -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f voice.wav final_audio.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"
echo "Sequence: Poacher tune → Voice announcement, static throughout"

View File

@ -1,55 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — RELIABLE SEQUENCE
# Poacher intro (first) → Voice (letter-by-letter) → Static continuous
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
# 1. Prepare voice (slow letter-by-letter)
SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g')
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}"
echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s80 -k55 -a 200 -w voice.wav --punct="" 2>/dev/null
# 2. Assets check
if [ ! -f poacher_intro.wav ]; then
echo "❌ Missing poacher_intro.wav — add a 10-15 second clip"
exit 1
fi
if [ ! -f static.wav ]; then
echo "Generating continuous static..."
ffmpeg -f lavfi -i "anoisesrc=d=45:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.20" -t 45 static.wav -y 2>/dev/null
fi
# 3. Reliable audio mix: Poacher → Voice, static under everything
ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \
-filter_complex "
[0:a]volume=0.70[poach];
[1:a]volume=1.10[voice];
[2:a]volume=0.24[stat];
[poach][stat]amix=duration=first:dropout_transition=2[a1];
[voice][stat]amix=duration=first:dropout_transition=2[a2];
[a1][a2]concat=v=0:a=1[out]
" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
# 4. Video (long enough)
DUR=34
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f voice.wav final_audio.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"
echo "Poacher first → Voice → Static throughout"

View File

@ -1,51 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — SUPER SIMPLE & RELIABLE
# Step-by-step mix so we can see exactly whats happening
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
# 1. Voice track (slow letter-by-letter)
SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g')
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}"
echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s78 -k60 -a 210 -w voice.wav --punct="" 2>/dev/null
echo "✅ Voice track created ($(wc -c < voice.wav) bytes)"
# 2. Static
if [ ! -f static.wav ]; then
echo "Generating static..."
ffmpeg -f lavfi -i "anoisesrc=d=45:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.20" -t 45 static.wav -y 2>/dev/null
fi
# 3. Mix in TWO simple steps
echo "Mixing Poacher + Voice + Static..."
# Step 3a: Poacher + Static
ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=3" -c:a pcm_s16le -y poacher_static.wav 2>/dev/null
# Step 3b: Add voice after Poacher ends
ffmpeg -i poacher_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
echo "✅ Final audio created ($(wc -c < final_audio.wav) bytes)"
# 4. Video
DUR=38
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f voice.wav poacher_static.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"
echo "Check the length of final_audio.wav — it should be much longer than just the Poacher tune."

View File

@ -1,36 +0,0 @@
#!/bin/bash
# NERDLETTER — CLEAN TUNE + VOICE + STATIC
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g')
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}"
echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s78 -k60 -a 210 -w voice.wav --punct="" 2>/dev/null
# Mix: Tune → Voice, static underneath
ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \
-filter_complex "
[0:a]volume=0.65[tune];
[1:a]volume=1.15[voice];
[2:a]volume=0.22[stat];
[tune][stat]amix=duration=first[a1];
[voice][stat]amix=duration=first[a2];
[a1][a2]concat=n=2:v=0:a=1[out]
" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
DUR=38
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
rm -f voice.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"

View File

@ -1,46 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — FINAL PERFECT VERSION
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
# 1. Create voice with 1-second pauses between groups
SPACED_GROUPS=$(echo "$MESSAGE" | sed 's/\([A-Z]\{5\}\)/\1 /g' | sed 's/ / /g')
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. <break time=\"800ms\"/> ${SPACED_GROUPS// / <break time=\"1000ms\"/> }"
echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s76 -k55 -a 205 -w voice.wav --punct="" --ssml 2>/dev/null
# 2. Assets
if [ ! -f static.wav ]; then
ffmpeg -f lavfi -i "anoisesrc=d=50:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.20" -t 50 static.wav -y 2>/dev/null
fi
# 3. Mix with gentle overlap
ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \
-filter_complex "
[0:a]volume=0.68,atrim=0:14[a0]; # tune ~14 seconds
[1:a]volume=1.12[a1];
[2:a]volume=0.23[stat];
[a0][stat]amix=duration=first[a_tune];
[a1][stat]amix=duration=first[a_voice];
[a_tune][a_voice]acrossfade=d=2.5:o=1[cross];
[cross][stat]amix=duration=longest[out]
" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
# 4. Video
DUR=42
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
rm -f voice.wav temp_bg.mp4
echo "✅ Done! → ${OUTFILE}"

View File

@ -1,44 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — ULTRA SIMPLE & RELIABLE FINAL VERSION
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
# 1. Voice with pauses between groups
SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\{5\}\)/\1 /g')
TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}"
echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s76 -k60 -a 210 -w voice.wav --punct="" 2>/dev/null
echo "✅ Voice created"
# 2. Mix tune + voice + static in simple steps
echo "Mixing audio..."
# Tune + static
ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:a pcm_s16le -y tune_static.wav -y 2>/dev/null
# Append voice after tune
ffmpeg -i tune_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
echo "✅ Final audio ready ($(du -h final_audio.wav | cut -f1))"
# 3. Video
DUR=42
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f voice.wav tune_static.wav temp_bg.mp4
echo "✅ DONE! → ${OUTFILE}"
echo "Play it and enjoy the full numbers-station experience."

View File

@ -1,55 +0,0 @@
#!/bin/bash
# NERDLETTER NUMBERS STATION — MAXIMUM RELIABILITY VERSION
MESSAGE="$1"
PAGE="$2"
EPISODE="${3:-01}"
OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4"
echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ==="
# 1. Build voice by speaking each letter individually + long pauses between groups
VOICE_TEXT="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}."
echo "$VOICE_TEXT" | espeak-ng -ven+f3 -s78 -k60 -a 200 -w intro_voice.wav --punct="" 2>/dev/null
# Add each group letter-by-letter with pauses
for group in $MESSAGE; do
for ((i=0; i<${#group}; i++)); do
letter="${group:$i:1}"
echo "$letter" | espeak-ng -ven+f3 -s72 -k70 -a 210 -w temp_letter.wav --punct="" 2>/dev/null
cat temp_letter.wav >> groups_voice.wav
rm -f temp_letter.wav
done
# 1-second pause after each group
ffmpeg -f lavfi -i "anullsrc=r=22050" -t 1.0 silence.wav -y 2>/dev/null
cat silence.wav >> groups_voice.wav
rm -f silence.wav
done
# Combine intro + groups
ffmpeg -i intro_voice.wav -i groups_voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y voice.wav 2>/dev/null
echo "✅ Voice track built letter-by-letter with pauses"
# 2. Mix with tune + static
ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:a pcm_s16le -y tune_static.wav 2>/dev/null
ffmpeg -i tune_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null
# 3. Video
DUR=45
ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y
ffmpeg -i temp_bg.mp4 -i final_audio.wav \
-vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \
drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \
drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \
drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \
-c:v libx264 -c:a aac -shortest "$OUTFILE" -y
# Cleanup
rm -f intro_voice.wav groups_voice.wav tune_static.wav temp_bg.mp4
echo "✅ DONE! → ${OUTFILE}"