#!/usr/bin/env bash set -euo pipefail OUTPUT="voice" BITRATE="128k" FORMAT="mp3" usage() { echo "Usage: $0 -o output_name [options]" echo echo "Options:" echo " -o NAME Output filename (without extension)" echo " -b BITRATE MP3 bitrate" echo " -f FORMAT Output format: mp3 or wav" echo " -h Show this help message" echo echo "Available MP3 bitrates:" echo " 64k Low quality / smallest files" echo " 96k Good for speech" echo " 128k Very good speech quality (default)" echo " 192k High quality" echo " 320k Maximum MP3 quality" echo echo "Examples:" echo " $0 -o meeting" echo " $0 -o podcast -b 192k" echo " $0 -o lecture -f wav" echo exit 0 } while getopts "o:b:f:h" opt; do case "$opt" in o) OUTPUT="$OPTARG" ;; b) BITRATE="$OPTARG" ;; f) FORMAT="$OPTARG" ;; h) usage ;; *) usage ;; esac done FORMAT=$(echo "$FORMAT" | tr '[:upper:]' '[:lower:]') case "$FORMAT" in mp3) FILE="${OUTPUT}.mp3" echo "Recording MP3 to: $FILE" echo "Bitrate: $BITRATE" echo "Press Ctrl+C to stop." echo ffmpeg \ -f pulse \ -i default \ -ac 1 \ -c:a libmp3lame \ -b:a "$BITRATE" \ "$FILE" ;; wav) FILE="${OUTPUT}.wav" echo "Recording WAV to: $FILE" echo "Press Ctrl+C to stop." echo ffmpeg \ -f pulse \ -i default \ -ac 1 \ "$FILE" ;; *) echo "Error: unsupported format '$FORMAT'" echo "Supported formats: mp3, wav" exit 1 ;; esac