headlogo

How I dump youtube audio streams in Linux

Unter ALSA habe ich einen Weg gefunden, alle Musik direkt von der Soundkarte abzuzapfen und aufzuzeichen. Leider gilt das auch für die Werbung, aber die kann man rausschneiden. Diese Anleitung gilt für Archlinux ohne Pulseaudio. Unter anderen Distributionen sind möglicherweise Anpassungen notwendig.

 

Schritt 1: Loopdevice einrichten

Teste zuerst, ob bereits installiert ist:

aplay -l

Die Liste zeigt dir, ob ein Gerät namens "Loopback" existiert. Falls nein, dann lade das Kernelmodul:

modprobe snd_aloop

Um das Ganze nach dem Reboot nicht zu verlieren, musst du ein Textfile kreieren, dies geht am schnellsten (als root) mit:

echo "snd_aloop" > /etc/modules-load.d/myYoutube.conf

 

Schritt 2: /etc/asound.conf ändern oder erstellen

2.1 PCM devices einrichten

Wir wollen nun einen globalen Splitter welcher allen Sound vom Alsamixer einerseits an die Hardware schickt und andererseits an einen Loopback. Den Ausgang des Loopbacks nennen wir youtube und verwenden ihn als Quelle für die Record App.

Kreiere oder ändere als root das File /etc/asound.conf und füge folgenden Text hinzu:

pcm.myTee {
    type route;
    slave.pcm {
        type multi;
        slaves {
	      a.pcm "hw:SB,0,0" # Your Soundcard, may be different string
	      a.channels 2
	      b.pcm "hw:Loopback,0,0" # loopback input stream 
	      b.channels 2
        }
        bindings {
          0 { slave a; channel 0; }
          1 { slave a; channel 1; }
          2 { slave b; channel 0; }
          3 { slave b; channel 1; }
        }
    }
    #volume controls 0.0 - 1.0 (four channels)
      ttable [
        [ 1 0 1 0 ]
        [ 0 1 0 1 ]
      ]
}
pcm.youtube {
    type plug
    slave.pcm "hw:Loopback,1,0" # loopback output stream that recorder listens
}

Der korrekte Name der Soundkarte (hier als Beispiel "hw:SB,0,0") musst du noch herausfinden via:

aplay -l

Die Syntax des Strings lautet dann:

 "hw:<cardNr or CardName>,<deviceNr>,<subdevNr>"

2.2 PCM default devices neu definieren

Als Standart definiert Alsa die PCM "dmix" für Playback und "dsnoop" für Capture (Record). Diese können wir hier nicht mehr verwenden weil deren definierte In/outputs anstatt auf die Soundkarte neu auf den Loopback zeigen. Zudem wollen wir ja den Soundstream aufteilen was dmix nicht tut. Also ersetzen wir dmix durch myTee per Default.

Ergänze nachfolgendes Snipped in /etc/asound.conf. Aber Achtung: Möglicherweise existiert bereits ein derartiger Eintrag oder etwas Gleichlautendes im Userprofil ~./asoundrc. Dann musst du überlegen, wie man dies genau übernehmen kann.

pcm.!default {

    type asym
    capture.pcm
    {
        type plug
        slave {
		pcm "hw:SB,2,0" # analog-digital-converter in your soundcard, may be different string
	}
    }
    playback.pcm
    {
        type plug
        slave.pcm "myTee" # Master out redirection
    }
}

Den richtigen Namen des AD-Wandlers der Soundkarte (hier "hw:SB,2,0") findest du diesmal mit:

arecord -l

 

Schritt 3: Alsa-Support in Firefox aktivieren

Während andere Apps (zB VLC) Alsa per default unterstützen, braucht Firefox Nachhilfe:

  • öffne Profildatei "/usr/share/applications/firefox.desktop" mit Texteditor
  • Lösche %u in Linie "Exec=/usr/lib/firefox/firefox %u"
  •  

    4. Los gehts !

  • lass einen Stream laufen
  • danach entweder:
  •  arecord -vv -f cd -D youtube record.wav 

    oder

     ffmpeg -f alsa -ar 44100 -i youtube record.mp3 

    Have a lot of fun!

    Last Update: Aug 2025