Instale as dependencias
sudo apt install ffmpeg pavucontrol
1 - Liste as entradas disponíveis no PulseAudio:
$ pactl list short sources
2 - Encontre a entrada que tem a palavra monitor
56 alsa_output.pci-0000_00_1f.3.analog-stereo.monitor PipeWire s32le 2ch 48000Hz SUSPENDED
57 alsa_input.pci-0000_00_1f.3.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED
Comando para gravar o som interno do computador
$ ffmpeg -f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitor -acodec libmp3lame -ab 320k -ar 48000 -ac 2 internal_audio.mp3
Gravação em WAV
qualidade media:
$ ffmpeg -f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitor -acodec pcm_s16le -ar 48000 -ac 2 internal_audio.wav
qualidade alta:
$ ffmpeg -f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitor -acodec pcm_s32le -ar 96000 -ac 2 internal_audio.wav
Script:
#!/bin/bash
# ---------------------------------------------------------
# Internal Audio Recorder - High Quality PulseAudio Capture
# ---------------------------------------------------------
# This script records the internal system audio (everything
# played by the computer) using ffmpeg with PulseAudio.
# It does NOT record microphone input.
#
# Author: Linux Assistant
# Compatibility: Linux with PulseAudio or PipeWire (via pulse)
# ---------------------------------------------------------
set -euo pipefail
IFS=$'\n\t'
# --- Trap CTRL+C to exit gracefully ---
trap 'echo; echo "Recording interrupted by user."; exit 0' SIGINT
# --- Dependency check ---
check_dependency() {
if ! command -v "$1" >/dev/null 2>&1; then
echo "Error: Required command '$1' is not installed." >&2
exit 1
fi
}
for dep in ffmpeg pavucontrol pactl; do
check_dependency "$dep"
done
# --- Detect PulseAudio monitor source (captures what the system plays) ---
monitor_source=$(pactl list short sources | awk '$2 ~ /\.monitor$/ {print $2; exit}')
if [[ -z "$monitor_source" ]]; then
echo "Error: No PulseAudio monitor source found. Is PulseAudio or PipeWire running?" >&2
exit 1
fi
echo "✔ Using internal audio monitor source: $monitor_source"
# --- Output format selection ---
echo
echo "Select output format:"
select format in "MP3 (compressed)" "WAV (lossless)"; do
case "$REPLY" in
1)
extension="mp3"
codec="libmp3lame"
options=(-ab 320k -ar 48000 -ac 2)
break
;;
2)
extension="wav"
codec="pcm_s16le"
options=(-ar 48000 -ac 2)
break
;;
*)
echo "Invalid selection. Please enter 1 or 2."
;;
esac
done
# --- Generate unique, timestamped filename ---
timestamp=$(date +"%Y-%m-%dT%H-%M-%S")
random_suffix=$(printf "%04d" $((RANDOM % 10000)))
filename="internal_audio-${timestamp}-${random_suffix}.${extension}"
# --- Validate write permissions ---
if [[ ! -w "." ]]; then
echo "Error: Current directory is not writable." >&2
exit 1
fi
echo
echo "🔴 Starting high-quality internal audio recording..."
echo " Output file: $filename"
echo " Press Ctrl+C to stop recording."
# --- Launch ffmpeg to record only internal system audio ---
exec ffmpeg \
-f pulse \
-i "$monitor_source" \
-acodec "$codec" \
"${options[@]}" \
"$filename"
Nenhum comentário:
Postar um comentário