quinta-feira, 10 de abril de 2025

gravar som interno do pc no linux

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