Youtube downloader script- Wstęp
Dziś miałem taki problem, że trzeba było pobrać tylko ścieżki audio (najlepiej w mp3) z kilkuset filmów umieszczonych na playliście w serwisie Youtube.
Można to wykonać ręcznie:
– klikamy prawym na filmie
– wybieramy pozycję „Kopiuj adres linku”
– link wklejamy do jednego w wielu „pobieraczy” YT np. serwisu tuberipper.com
– klikamy w Download czy jak to sie tam nazywa i kolejno w .mp3 wybierając format (albo coś innego co chcemy pobrać)
– po chwili mamy ścieżkę audio na dysku
Fajne, ale chciałbym to zautomatyzować. Da się fajnie pod Linux z wiersza poleceń. Rozwiązaniem jest program yt-dlp. Może jednak on wymagać instalacji i jednorazowego uruchomienia chrome lub innej przeglądarki celem utworzenia profilu dla ciasteczek. Będzie też potrzebny ffmpeg do dekodowania audio/video oraz Python 3 i kilka bibliotek. Poniżej jak to wszystko poskładać.
Konfiguracja dla Linux z oknami
– aktualizacja pakietów
#apt update ; apt upgrade
– instalacja python3, pip: sprawdź dla swojego systemu jak to się instaluje
– instalacja ffmpeg
#apt install ffmpeg
– instalacja yt-dlp
# sudo pip3 install –upgrade yt-dlp
To wymaga nowej wersji Python i jeśli masz starszy musisz dokonać aktualizacji. Sprawdź dla swojego systemu jak to zrobić. U mnie pojawił się problem (choć sam program działa):

Zatem można aktualizować Python. Program można także instalować dla konkretnego Pythona:
#python3.11 -m pip install –upgrade yt-dlp
Teraz instalujemy chrome lub firefox, także popatrz jak dla twojego systemu to wykonać. Trzeba uruchomić Chrome aby utworzył katalog domowy i wejść na dowolną stronę. To wystarczy, Chrome można zamknąć. Chrome można pobrać tak
#wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
i zainstalować jak niżej:
#sudo dpkg -i google-chrome-stable_current_amd64.deb
Można też instalować tego pobieracza w inny sposób
# sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
# sudo chmod a+rx /usr/local/bin/yt-dlp
Pobranie playlisty z YouTube
Wymagany ffmpeg do konwersji audio!
Teraz czas na pobranie playlisty (zamiast chrome można wpisać firefox jeśli jest zainstalowany):
# yt-dlp –cookies-from-browser chrome -x –audio-format mp3 –playlist-start 1 –playlist-stop 100 https://adres-playlisty
Jeżeli będzie problem z uruchomieniem programu możesz go startować z katalogu: ~/.local/bin/
# ~/.local/bin/yt-dlp –cookies-from-browser chrome -x –audio-format mp3 –playlist-start 1 –playlist-stop 100 https://adres-playlisty
Jeśli playlista jest długa można określić, ile danych pobieramy:
# yt-dlp –cookies-from-browser chrome -x –audio-format mp3 –playlist-start 1 –playlist-stop 100 https://adres-playlisty
Można także podać programowi „ręcznie” plik cookie witryny (trzeba go wcześniej pozyskać z komputera gdzie już istnieje):
# yt-dlp –cookies ścieżka-do-pliku-cookie -x –audio-format mp3 https://nasza-playlista
Pobranie tylko ścieżki audio (128k) z jednego filmu
# yt-dlp -x –audio-format mp3 –audio-quality 5 –no-keep-video –no-playlist „https://youtu.be/7AzhPG9k_CE”
Pobieranie surowej ścieżki audio (bez konwersji)
# yt-dlp -f „bestaudio[abr<=128]” „https://youtu.be/7AzhPG9k_CE”
Skrypty dostępne są na GitHub:
https://github.com/IgorBrzezek/yt-audio-extractor
Tutaj nowa wersja umożliwiająca pobieranie także video.
https://github.com/IgorBrzezek/YT-Audio-Video-Extractor
polecenie: yt_avextractor.py –list lista2.txt –pb -mp3fast –add-header –color –overwrite
Aby pobrać audio z jednego filmu z YT;
python yt_avextractor.py -mp3fast –add-header –pb –color „https://adres-filmu”
Aby automatycznie pobrać wiele filmów z listy:
- przygotuj listę (jeden adres filmu na linię, bez cudzysłowów)
- python yt_avextractor.py -mp3fast –add-header –pb –color –list lista.txt
Poniżej widok działania nowej wersji w konsoli przy pobieraniu listy:

Przykład skryptu Linux Bash
Skrypt pobiera kolejno filmy do wyciągnięcia z nich strumienia audio w formacie mp3 128k.
#!/bin/bash
# ============================================
# yt-dl128.sh
# Pobiera ścieżkę audio z YouTube jako MP3
# Obsługuje:
# --mp3 → szybki tryb (bez konwersji, jak najszybciej)
# --128 → konwersja do MP3 128 kb/s
# --list <plik.txt> → pobieranie wielu filmów
# Loguje postęp do ~/ytdl-download.log
# ============================================
OUTPUT_DIR="$HOME"
LOG_FILE="$OUTPUT_DIR/ytdl-download.log"
# Kolory
GREEN="\e[32m"
RED="\e[31m"
YELLOW="\e[33m"
BLUE="\e[34m"
RESET="\e[0m"
# Tworzy katalog i log
mkdir -p "$OUTPUT_DIR"
touch "$LOG_FILE"
# Funkcja logowania
log() {
local MESSAGE="$1"
echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $MESSAGE" >> "$LOG_FILE"
}
# --------------------------------------------
# Funkcje pobierania
# --------------------------------------------
download_fast_mp3() {
local URL="$1"
echo -e "${BLUE} Szybkie pobieranie MP3:${RESET} $URL"
log "FAST_MP3: $URL"
yt-dlp -x --audio-format mp3 \
--no-keep-video --no-playlist \
-o "$OUTPUT_DIR/%(title)s.%(ext)s" \
"$URL"
local STATUS=$?
if [ $STATUS -eq 0 ]; then
echo -e "${GREEN} Sukces:${RESET} pobrano $URL"
log "SUCCESS_FAST: $URL"
else
echo -e "${RED} Błąd podczas pobierania:${RESET} $URL"
log "ERROR_FAST: $URL"
fi
echo "-----------------------------------"
}
download_mp3_128() {
local URL="$1"
echo -e "${BLUE} Pobieranie i konwersja do MP3 128k:${RESET} $URL"
log "MP3_128: $URL"
yt-dlp -x --audio-format mp3 \
--postprocessor-args "-b:a 128k" \
--no-keep-video --no-playlist \
-o "$OUTPUT_DIR/%(title)s.%(ext)s" \
"$URL"
local STATUS=$?
if [ $STATUS -eq 0 ]; then
echo -e "${GREEN} Sukces:${RESET} pobrano $URL"
log "SUCCESS_128: $URL"
else
echo -e "${RED} Błąd podczas pobierania:${RESET} $URL"
log "ERROR_128: $URL"
fi
echo "-----------------------------------"
}
# --------------------------------------------
# Obsługa argumentów
# --------------------------------------------
show_help() {
echo -e "${YELLOW}Użycie:${RESET}"
echo " $0 --mp3 <link_do_youtube>"
echo " $0 --128 <link_do_youtube>"
echo " $0 --mp3 --list <plik_z_linkami.txt>"
echo " $0 --128 --list <plik_z_linkami.txt>"
exit 1
}
if [ $# -lt 2 ]; then
show_help
fi
MODE=""
LIST_FILE=""
URL=""
# Parsowanie argumentów
while [[ $# -gt 0 ]]; do
case "$1" in
--mp3)
MODE="mp3"
shift
;;
--128)
MODE="128"
shift
;;
--list)
LIST_FILE="$2"
shift 2
;;
*)
URL="$1"
shift
;;
esac
done
if [ -z "$MODE" ]; then
echo -e "${RED} Nie podano trybu (--mp3 lub --128)!${RESET}"
show_help
fi
if [ -n "$LIST_FILE" ]; then
# Tryb listy
if [ ! -f "$LIST_FILE" ]; then
echo -e "${RED} Plik '${LIST_FILE}' nie istnieje!${RESET}"
exit 1
fi
echo -e "${YELLOW} Wczytywanie listy:${RESET} $LIST_FILE"
echo -e "${YELLOW} Logowanie do:${RESET} $LOG_FILE"
echo "-----------------------------------"
log "===== START BATCH ($MODE) from $LIST_FILE ====="
while IFS= read -r LINE || [ -n "$LINE" ]; do
if [[ -z "$LINE" || "$LINE"]()]()
…