YouTube Videos im Linux Terminal schauen - Komplett-Anleitung
Übersicht
Diese Anleitung zeigt dir, wie du mit einem eigenen Bash-Script YouTube-Videos direkt im Terminal suchen und als Audio abspielen kannst - perfekt für Server ohne GUI!
Was du brauchst:
- mpv - Video/Audio-Player
- yt-dlp - YouTube-Downloader
- alsamixer - Audio-Steuerung
- speaker-test - Audio-Test-Tool
Teil 1: Installation der benötigten Pakete
Schritt 1: System aktualisieren
sudo apt update && sudo apt upgrade -y
Schritt 2: Pakete installieren
# Basis-Pakete
sudo apt install -y mpv ffmpeg alsa-utils
# yt-dlp (neueste Version)
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp
sudo chmod +x /usr/local/bin/yt-dlp
# Installation prüfen
mpv --version
yt-dlp --version
Teil 2: Audio-Konfiguration
Schritt 1: Audio-Hardware prüfen
# Verfügbare Audio-Geräte anzeigen
aplay -l
Erwartete Ausgabe:
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC887-VD Analog
Schritt 2: Audio-Test durchführen
# Testton abspielen (2 Sekunden)
speaker-test -t wav -c 2 -l 1
Was passiert:
-t wav= Wellenform (wav-Datei)-c 2= 2 Kanäle (Stereo)-l 1= 1 Durchlauf
Sollte zu hören sein: "Front Left, Front Right"
❌ Kein Ton? → Weiter zu Schritt 3
✅ Ton funktioniert? → Springe zu Teil 3
Schritt 3: Lautstärke mit alsamixer einstellen
# ALSA-Mixer öffnen
alsamixer
Bedienung:
| Taste | Funktion |
|---|---|
| F6 | Soundkarte auswählen |
| ↑ / ↓ | Lautstärke erhöhen/verringern |
| M | Mute/Unmute (MM = gemuted, 00 = aktiv) |
| ← / → | Zwischen Kanälen wechseln |
| ESC | Beenden |
Wichtig:
- Stelle Master auf mindestens 80%
- Prüfe dass MM nicht angezeigt wird (sonst mit M unmuten)
- Auch PCM sollte auf 80%+ sein
Schritt 4: Lautstärke per CLI setzen
# Master auf 100% und unmuten
amixer sset Master unmute
amixer sset Master 100%
# PCM ebenfalls
amixer sset PCM unmute
amixer sset PCM 100%
# Status prüfen
amixer get Master
Ausgabe sollte sein:
Simple mixer control 'Master',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 65536
Front Left: Playback 65536 [100%] [on]
Front Right: Playback 65536 [100%] [on]
[on] = gut! [off] = nochmal amixer sset Master unmute
Schritt 5: Erneuter Audio-Test
speaker-test -t wav -c 2 -l 1
✅ Jetzt sollte Ton kommen!
Teil 3: mpv für YouTube konfigurieren
mpv-Config erstellen
# Config-Verzeichnis erstellen
mkdir -p ~/.config/mpv
# Config-Datei erstellen
nano ~/.config/mpv/mpv.conf
Inhalt:
# ──────────────────────────────────────
# MPV Konfiguration für YouTube
# ──────────────────────────────────────
# yt-dlp Integration
script-opts=ytdl_hook-ytdl_path=/usr/local/bin/yt-dlp
# Audio-Einstellungen
audio-device=alsa
volume=80
volume-max=150
# YouTube-Format (bestes Audio)
ytdl-format=bestaudio[ext=m4a]/bestaudio/best
# Kein Video (nur Audio)
no-video
# Cache für besseres Streaming
cache=yes
cache-secs=60
demuxer-max-bytes=100M
demuxer-max-back-bytes=50M
# Terminal-Ausgabe
term-osd-bar=yes
msg-level=all=info
# Keine GUI
no-osc
Speichern: Strg + O, Enter, Strg + X
mpv testen
# YouTube-Video nur als Audio abspielen
mpv "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
Sollte jetzt Audio abspielen!
Teil 4: Das YouTube-Such-Script
Script erstellen
# Script erstellen
nano ~/yt-search.sh
Komplettes Script mit Erklärungen:
#!/bin/bash
# ═══════════════════════════════════════════════════════════════
# YouTube-Suche Script für Linux Terminal
# Autor: Leon
# Datei: yt-search.sh
# ═══════════════════════════════════════════════════════════════
# ───────────────────────────────────────────────────────────────
# 1. HILFE-TEXT UND PARAMETER-PRÜFUNG
# ───────────────────────────────────────────────────────────────
# Prüfen ob ein Suchbegriff übergeben wurde
if [ -z "$1" ]; then
# -z prüft ob String leer ist
# $1 ist der erste Parameter beim Aufruf
echo "Usage: yt-search.sh 'suchbegriff'"
echo ""
echo "Beispiel:"
echo " yt-search.sh 'linux tutorial'"
exit 1 # Beende Script mit Fehlercode 1
fi
# ───────────────────────────────────────────────────────────────
# 2. SUCHBEGRIFF SPEICHERN
# ───────────────────────────────────────────────────────────────
SEARCH="$1"
# $1 wird in Variable SEARCH gespeichert
# Anführungszeichen wichtig für Suchbegriffe mit Leerzeichen!
# ───────────────────────────────────────────────────────────────
# 3. HEADER AUSGEBEN
# ───────────────────────────────────────────────────────────────
echo "Suche nach: $SEARCH"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# ───────────────────────────────────────────────────────────────
# 4. YOUTUBE-SUCHE MIT YT-DLP
# ───────────────────────────────────────────────────────────────
# Top 10 Ergebnisse mit yt-dlp abrufen und formatieren
RESULTS=$(yt-dlp "ytsearch10:$SEARCH" \
--get-title \
--get-id \
--get-duration \
--no-warnings 2>/dev/null | paste - - -)
# Erklärung der Befehle:
# yt-dlp "ytsearch10:$SEARCH" → Suche top 10 Videos
# --get-title → Hole Video-Titel
# --get-id → Hole Video-ID
# --get-duration → Hole Dauer
# --no-warnings → Unterdrücke Warnungen
# 2>/dev/null → Leite Fehler ins Nirvana
# | paste - - - → Kombiniere je 3 Zeilen zu einer
# ───────────────────────────────────────────────────────────────
# 5. ERGEBNISSE FORMATIERT AUSGEBEN
# ───────────────────────────────────────────────────────────────
echo "$RESULTS" | awk -F'\t' '{printf "%d. %s (%s)\n", NR, $1, $3}'
# Erklärung:
# awk -F'\t' → Trennzeichen ist Tab
# printf → Formatierte Ausgabe
# NR → Zeilennummer (1, 2, 3...)
# $1 → Erste Spalte (Titel)
# $3 → Dritte Spalte (Dauer)
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# ───────────────────────────────────────────────────────────────
# 6. BENUTZER-EINGABE
# ───────────────────────────────────────────────────────────────
read -p "Welches Video? (1-10): " choice
# read -p "TEXT" → Zeige Text und warte auf Eingabe
# choice → Speichere Eingabe in Variable "choice"
# ───────────────────────────────────────────────────────────────
# 7. VIDEO-ID EXTRAHIEREN
# ───────────────────────────────────────────────────────────────
VIDEO_ID=$(echo "$RESULTS" | sed -n "${choice}p" | cut -f2)
# Erklärung:
# echo "$RESULTS" → Gib gespeicherte Ergebnisse aus
# sed -n "${choice}p" → Nimm Zeile mit Nummer aus $choice
# cut -f2 → Nimm 2. Feld (Video-ID)
# ───────────────────────────────────────────────────────────────
# 8. EINGABE-VALIDIERUNG
# ───────────────────────────────────────────────────────────────
if [ -z "$VIDEO_ID" ]; then
# Wenn VIDEO_ID leer ist (ungültige Auswahl)
echo "❌ Ungültige Auswahl!"
exit 1
fi
# ───────────────────────────────────────────────────────────────
# 9. VIDEO-URL ERSTELLEN
# ───────────────────────────────────────────────────────────────
VIDEO_URL="https://www.youtube.com/watch?v=$VIDEO_ID"
echo ""
echo "▶ Spiele ab: $VIDEO_URL"
echo ""
# ───────────────────────────────────────────────────────────────
# 10. MPV STARTEN MIT OPTIMALEN EINSTELLUNGEN
# ───────────────────────────────────────────────────────────────
mpv --ytdl-format=bestaudio[height<=720][vcodec=avc1][acodec=opus]/bestaudio[height<=720] \
--cache=yes \
--cache-secs=60 \
--demuxer-max-bytes=50M \
--really-quiet \
"$VIDEO_URL"
# Erklärung der mpv-Parameter:
#
# --ytdl-format=... → Wähle bestes Audio-Format
# bestaudio[height<=720] → Audio von Video max 720p
# [vcodec=avc1] → Video-Codec AVC1 bevorzugen
# [acodec=opus] → Audio-Codec Opus bevorzugen
# /bestaudio[height<=720] → Fallback ohne Codec-Filter
#
# --cache=yes → Cache aktivieren
# --cache-secs=60 → 60 Sekunden vorpuffern
# --demuxer-max-bytes=50M → Max 50MB im RAM puffern
# --really-quiet → Nur wichtige Meldungen zeigen
#
# "$VIDEO_URL" → Die YouTube-URL
# ═══════════════════════════════════════════════════════════════
# ENDE DES SCRIPTS
# ═══════════════════════════════════════════════════════════════
Speichern: Strg + O, Enter, Strg + X
Script ausführbar machen
chmod +x ~/yt-search.sh
Script testen
# Script aufrufen
~/yt-search.sh "linux tutorial"
Was passiert:
- Script sucht Top 10 YouTube-Videos
- Zeigt Liste mit Nummer, Titel, Dauer
- Du gibst eine Nummer ein (1-10)
- Video wird als Audio abgespielt
Teil 5: Script global verfügbar machen
Option A: Alias erstellen
# Bash-Config öffnen
nano ~/.bashrc
Am Ende hinzufügen:
# YouTube-Suche Alias
alias yt='~/yt-search.sh'
Speichern und aktivieren:
source ~/.bashrc
Jetzt kannst du einfach schreiben:
yt "linux tutorial"
Option B: In PATH kopieren
# Script nach /usr/local/bin kopieren
sudo cp ~/yt-search.sh /usr/local/bin/yt
sudo chmod +x /usr/local/bin/yt
Jetzt von überall nutzbar:
yt "musik"
Teil 6: Script-Funktionen im Detail
Wie die YouTube-Suche funktioniert
yt-dlp "ytsearch10:linux tutorial"
Was passiert:
ytsearch10:= Suche nach 10 Ergebnissenlinux tutorial= Suchbegriff- yt-dlp fragt YouTube API
- Gibt Titel, ID, Dauer zurück
Wie die Formatierung funktioniert
--get-title --get-id --get-duration | paste - - -
Ausgabe ohne paste:
Video Titel 1
dQw4w9WgXcQ
3:32
Video Titel 2
abc123def45
5:12
Ausgabe mit paste - - -:
Video Titel 1 dQw4w9WgXcQ 3:32
Video Titel 2 abc123def45 5:12
paste - - - kombiniert je 3 Zeilen zu einer (mit Tab getrennt)
Wie die Auswahl funktioniert
sed -n "${choice}p"
sed -n= Nur gewählte Zeile ausgeben"${choice}p"= Zeile mit Nummer aus Variablechoice- Beispiel:
choice=3→ gibt 3. Zeile aus
cut -f2
cut -f2= Nimm 2. Feld (Tab-getrennt)- Feld 1 = Titel, Feld 2 = ID, Feld 3 = Dauer
mpv-Parameter erklärt
--ytdl-format=bestaudio[height<=720][vcodec=avc1][acodec=opus]
Format-Filter:
bestaudio= Bestes Audio-Format[height<=720]= Von Video max 720p (spart Bandbreite)[vcodec=avc1]= Video-Codec AVC1 (wenn verfügbar)[acodec=opus]= Audio-Codec Opus (beste Qualität)
Cache-Einstellungen:
--cache=yes= Cache aktivieren--cache-secs=60= 60 Sekunden vorpuffern--demuxer-max-bytes=50M= Max 50 MB im RAM
Teil 7: MPV-Steuerung während Wiedergabe
Wichtigste Tasten
| Taste | Funktion |
|---|---|
| Space | Pause/Play |
| q | Beenden |
| Q | Beenden und Position merken |
| 9 / 0 | Lautstärke -2 / +2 |
| m | Mute/Unmute |
| ← / → | Kurz Sekunden zurück/vor (z.B. 5-10s) |
| ↑ / ↓ | Länger zurück/vor (z.B. 1 min) |
| PgUp / PgDn | Großer Sprung (z.B. 10 min) |
| [ / ] | Geschwindigkeit verringern/erhöhen |
| { / } | FeinerGeschwindigkeitsmodus (abhängig von Version/Config) |
| Backspace | Geschwindigkeit zurücksetzen |
Erweiterte Steuerung
| Taste | Funktion |
|---|---|
| i | Infos anzeigen (Format, Bitrate, etc.) |
| I | Erweiterte Infos |
| ` (Backtick) | Konsole öffnen |
| 1 / 2 | Kontrast -/+ |
| 3 / 4 | Helligkeit -/+ |
| 5 / 6 | Gamma -/+ |
| 7 / 8 | Sättigung -/+ |
Teil 8: Script erweitern
Erweiterung 1: Mehr Ergebnisse
Im Script ändern:
# Von ytsearch10 zu ytsearch20
RESULTS=$(yt-dlp "ytsearch20:$SEARCH" ...)
# Prompt anpassen
read -p "Welches Video? (1-20): " choice
Erweiterung 2: Playlist-Support
Neues Script yt-playlist.sh:
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: yt-playlist.sh 'PLAYLIST_URL'"
exit 1
fi
PLAYLIST_URL="$1"
echo "Lade Playlist..."
# Playlist-Info anzeigen
yt-dlp --flat-playlist "$PLAYLIST_URL" | head -20
echo ""
read -p "Playlist abspielen? (y/n): " confirm
if [ "$confirm" = "y" ]; then
mpv --ytdl-format=bestaudio --playlist="$PLAYLIST_URL"
fi
Erweiterung 3: Download-Option
Im Haupt-Script nach Auswahl hinzufügen:
read -p "Abspielen (p) oder Download (d)? " action
if [ "$action" = "d" ]; then
# Download als MP3
yt-dlp -f bestaudio --extract-audio --audio-format mp3 \
-o "%(title)s.%(ext)s" "$VIDEO_URL"
echo "Download abgeschlossen!"
else
# Normal abspielen
mpv --ytdl-format=bestaudio "$VIDEO_URL"
fi
Erweiterung 4: Verlauf speichern
Am Ende des Scripts hinzufügen:
# Verlauf speichern
echo "$(date '+%Y-%m-%d %H:%M:%S') | $SEARCH | $VIDEO_URL" >> ~/yt-history.log
Verlauf anzeigen:
tail -20 ~/yt-history.log
Teil 9: Troubleshooting
Problem: "yt-dlp: command not found"
# Prüfen ob installiert
which yt-dlp
# Wenn nicht gefunden, neu installieren
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp
sudo chmod +x /usr/local/bin/yt-dlp
# In Script vollständigen Pfad nutzen
/usr/local/bin/yt-dlp "ytsearch10:$SEARCH" ...
Problem: Kein Ton bei mpv
# ALSA neu initialisieren
sudo alsactl init
# Lautstärke setzen
amixer sset Master unmute
amixer sset Master 100%
# mpv mit verbose starten
mpv -v --no-video "URL"
Problem: "Failed to recognize file format"
# yt-dlp aktualisieren
sudo yt-dlp -U
# Oder Cache leeren
rm -rf ~/.cache/yt-dlp/
Problem: Video zu langsam/stottert
Im Script Cache erhöhen:
mpv --cache-secs=120 \
--demuxer-max-bytes=100M \
"$VIDEO_URL"
Problem: Script zeigt keine Ergebnisse
# Debug-Mode aktivieren
RESULTS=$(yt-dlp "ytsearch10:$SEARCH" \
--get-title \
--get-id \
--get-duration)
# Ausgabe prüfen
echo "$RESULTS"
# Wenn leer: Netzwerk prüfen
ping -c 3 youtube.com
Teil 10: Nützliche Zusatz-Scripts
Quick-Play Script (ohne Suche)
nano ~/ytp.sh
#!/bin/bash
# Direkt abspielen ohne Suche
if [ -z "$1" ]; then
echo "Usage: ytp.sh 'URL'"
exit 1
fi
mpv --ytdl-format=bestaudio --cache=yes "$1"
chmod +x ~/ytp.sh
alias ytp='~/ytp.sh'
Audio-Test Script
nano ~/audio-test.sh
#!/bin/bash
echo "═══════════════════════════════════════"
echo " Audio-Test Script"
echo "═══════════════════════════════════════"
echo ""
echo "1. ALSA-Geräte:"
aplay -l
echo ""
echo "2. Lautstärke:"
amixer get Master | grep -E "Playback.*\["
echo ""
echo "3. Speaker-Test (2 Sekunden)..."
speaker-test -t wav -c 2 -l 1
echo ""
echo "4. Test-MP3 erstellen und abspielen..."
ffmpeg -f lavfi -i "sine=frequency=1000:duration=3" -y /tmp/test.mp3 2>/dev/null
mpv /tmp/test.mp3
rm /tmp/test.mp3
echo ""
echo "Audio-Test abgeschlossen!"
chmod +x ~/audio-test.sh
Zusammenfassung
Installation (Kurzversion)
# 1. Pakete installieren
sudo apt install -y mpv ffmpeg alsa-utils
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp
sudo chmod +x /usr/local/bin/yt-dlp
# 2. Audio konfigurieren
amixer sset Master unmute
amixer sset Master 100%
speaker-test -t wav -c 2 -l 1
# 3. mpv Config
mkdir -p ~/.config/mpv
cat > ~/.config/mpv/mpv.conf << 'EOF'
script-opts=ytdl_hook-ytdl_path=/usr/local/bin/yt-dlp
audio-device=alsa
volume=80
ytdl-format=bestaudio
no-video
cache=yes
EOF
# 4. Script erstellen (siehe oben)
nano ~/yt-search.sh
# [Script-Inhalt einfügen]
chmod +x ~/yt-search.sh
# 5. Alias erstellen
echo "alias yt='~/yt-search.sh'" >> ~/.bashrc
source ~/.bashrc
# 6. Fertig!
yt "test"
Jetzt kannst du YouTube im Terminal genießen! 🎵🎬