Wie kann ich die Audioausgabe von der Befehlszeile in Linux aufzeichnen?

Wie kann ich die Audioausgabe von der Befehlszeile in Linux aufzeichnen?

Ich möchte die Audioausgabe in einer MP3-Datei aufzeichnen. Welche Tools und Befehle kann ich im Ubuntu-Linux-Terminal verwenden?

Antwort1

In anderen Antworten wurden die folgenden Tools vorgeschlagen: sox, arecord, und parec. AußerdemRohrdrahtBenutzer können verwenden pw-cat, obwohl die anderen Tools auch mit PipeWire funktionieren. Sie können alle einfach aufgerufen werden:

arecord

arecord --format=cd file.wav

Standardmäßig wird in gespeichert .wav. Wenn Sie kein geeignetes Format angeben, ist die Standard-Audioqualität schlecht. Eine Funktion, die mir an diesem Programm gefällt, ist die schöne grafische Ausgabe mit Vumeter. Es unterstützt auch die dynamische Benennung von Ausgabedateien (über Stunde, Minute, Tag ...). Leider kann es nicht in OGG oder MP3 ausgeben.


sox

rec file.ext

Dieses Programm funktioniert derzeit nicht mit ZSH-Vervollständigungen. Es zeigt in seiner grafischen Ausgabe einen Zähler an, aber auch andere Informationen. Es unterstützt MP3 und OGG.


pacat

parecord file.ext

Es unterstützt MP3 und OGG. In der grafischen Ausgabe kann jedoch kein Messgerät angezeigt werden.


pw-cat

pw-record file.ext

Es ist pacatfür PipeWire. Es unterstützt benutzerdefinierte Qualitätseinstellungen für OGG und MP3, während pacatdies nicht der Fall ist. Es verfügt auch nicht über eine gemessene grafische Ausgabe.

Um von einem anderen Audiogerät, beispielsweise einem Headset, aufzunehmen, können Sie eine der aufgeführten Methoden verwendenHierum zunächst den Namen Ihres Aufnahmegeräts zu erhalten. Beispiel:

pw-cli list-objects | grep node.name

Angenommen, dies hat „alsa_input.usb-Logitech_Wireless_Headset.mono“ ergeben, verwenden wir diesen Namen dann mit der --targetOption:

pw-record --target alsa_input.usb-Logitech_Wireless_Headset.mono file.wav

Antwort2

Zuerst müssen Sie den Namen Ihres Ausgabegeräts extrahieren:

Dazu können Sie folgende Pakete installieren:

sudo apt-get install pulseaudio-utils lame mpg123

Und Renn:

pacmd list-sinks | grep -e 'name:' -e 'index' -e 'Speakers'

Die Ausgabe könnte wie folgt aussehen:

index: 1
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
        analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
index: 23
    name: <alsa_output.pci-0000_00_03.0.hdmi-surround71>

Nachdem Sie den Namen gefunden haben, können Sie den folgenden Befehl ausführen, um die Ausgabe in einer MP3-Datei aufzuzeichnen:

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | lame -r -V0 - out.mp3

Oder soxSie können Folgendes tun, ich fand jedoch die erste Lösung robuster:

sox -t pulseaudio alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -t mp3 test.mp3 

Wenn Sie die Aufzeichnung jedoch automatisch starten und stoppen möchten, können Sie Folgendes ausführen:

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -t raw -b 16 -e signed -c 2 -r 44100 - test.ogg silence 1 0.1 3% 1 3.0 3%

Die Aufnahme beginnt, wenn ein Ton an den Lautsprecher gesendet wird, und wird beendet, wenn nach 3 Sekunden nichts empfangen wird. Weitere Informationen zu soxfinden Sie in derManpage für Linux.

Antwort3

Sie könnenarecorddafür.

Rufen Sie Ihre verfügbaren Geräte mit ab arecord -l. Das Ergebnis ist etwa wie folgt:

card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Um dann mit dem USB-Mikrofon (Karte 1, Subgerät 0) aufzunehmen, verwenden Sie beispielsweise:

arecord --device="hw:1,0" --format=s16_le --rate=48 rec_$(date "+%F_%H-%M-%S").wav

Es gibt auch -f cd, was eine Abkürzung für ist --format=s16_le --rate=44100.

Standard-Audioquelle festlegen

Wenn Sie keine angeben --device, arecordwird aufgezeichnet von derStandardAudioquelle. Um die aktuelle Standardquelle anzuzeigen, führen Sie

pactl info | grep "Default Source"

Um die Standardquelle über ein minimales Textmenü zu ändern, können Sie verwendenfzf:

pactl set-default-source $(pactl list short sources | cut -f2 | fzf)

Das finde ich bequemer, als die Karten- und Subgeräteindizes nachzuschlagen.

Hören Sie während der Aufnahme zu

Es ist oft nützlich, ein Audiogerät anzuhören und gleichzeitig davon aufzunehmen. Wir können dies tun, indem wir arecorddas Schreiben auf Standardausgang mit -und die Weiterleitung der Audiodaten anteedas den Ton in eine Datei schreibt und weiterleitet an aplay:

arecord -f cd - | tee rec.wav | aplay -

Dateikonvertierung

Konvertieren Sie die WAVE-Datei in ein Format Ihrer Wahl:

  • ZuMP3:ffmpeg -i rec.wav rec.mp3
  • ZuOgg:ffmpeg -i rec.wav rec.ogg
  • ZuFLAC:flac rec.wav -o rec.flac

Antwort4

Ein großes Lob an @Ahmad. Das hat bei mir funktioniert:

sox -e signed-integer -L -b16 -c2 -r44100 -t raw "|parec -d alsa_output.pci-0000_0c_00.4.iec958-stereo.monitor" -t mp3 -c2 -C 320.01 stream.mp3 silence 1 0.1 3% 1 3.0 3%

wo die Parameter des Eingabestroms wie folgt angezeigt werden pacmd list-sinks:

name: <alsa_output.pci-0000_0c_00.4.iec958-stereo>
sample spec: s16le 2ch 44100Hz
properties:
        alsa.resolution_bits = "16"

verwandte Informationen