56 lines
2.3 KiB
Bash
56 lines
2.3 KiB
Bash
|
|
|
||
|
|
#!/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}"
|
||
|
|
|