staging.inyokaproject.org

yt-dlp

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png Eine immer wiederkehrende Frage bezieht sich darauf, wie man Videos von YouTube oder anderen Video-Portalen und auch Mediatheken dauerhaft speichern kann – ob man das darf, ist eine andere Frage und hängt von den rechtlichen Rahmenbedingungen im Heimatland bzw. am Standort des Benutzers ab Siehe auch Abschnitt Links, wovon auch auf die unterstützte Webseiten verwiesen wird).

yt-dlp, ein Fork des nicht mehr aktiv weiterentwickelten youtube-dl, ist eine Möglichkeit für die Kommandozeile – auch zum direkten Anschauen in einem beliebigen Mediaplayer.

Weitere Programme sind im Artikel Streams speichern zu finden.

Installation

Voraussetzungen

Das Programm benötigt Python in der Version 3.6 oder neuer und FFmpeg bzw. die darin enthaltenen Kommandozeilenprogramme ffmpeg und ffprobe[1].

  • ffmpeg (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install ffmpeg 

Oder mit apturl installieren, Link: apt://ffmpeg

Ubuntu-Paket

yt-dlp ist ab Ubuntu 22.04 in den offiziellen Paketquellen enthalten.

  • yt-dlp (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install yt-dlp 

Oder mit apturl installieren, Link: apt://yt-dlp

Da erfahrungsgemäß diese Pakete keinerlei Updates erhalten, kann man alternativ auch ab Ubuntu 20.04 ein PPA verwenden.

PPA

Adresszeile zum Hinzufügen des PPAs:

  • ppa:tomtomtom/yt-dlp

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung des Eigentümers/Teams tomtomtom zu entnehmen.

Nach dem Hinzufügen der Paketquelle kann das folgende Paket installiert werden:

  • yt-dlp (ppa)

Befehl zum Installieren der Pakete:

sudo apt-get install yt-dlp 

Oder mit apturl installieren, Link: apt://yt-dlp

optionale Programme

Das oben genannte ffmpeg und yt-dlp reichen aus, um mit der Standard-Koniguration von yt-dlp (also ohne die Angabe von irgendwelchen Optionen) Dateien von YouTube herunterladen zu können. Für bestimmte yt-dlp-Optionen – wie z.B.das Einbetten von Vorschaubildern und/oder das Verwenden eines externen Download-Managers – und/oder Plattformen werden jedoch die folgenden Programme bzw. Pakete benötigt:

Für Videos, welche über das RTMP-Protokoll gestreamt werden, muss RTMPDump 🇬🇧 installiert werden[1]:

  • rtmpdump (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install rtmpdump 

Oder mit apturl installieren, Link: apt://rtmpdump

Für Videos, welche über die beiden Protokolle MMS und RTSP gestreamt werden, muss MPlayer oder / und mpv über das bzw. die folgende(n) Paket(e) installiert werden:

  • mplayer (universe, MPlayer für die Bedienung nur per Kommandozeile)

  • mpv (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install mplayer mpv 

Oder mit apturl installieren, Link: apt://mplayer,mpv

Falls yt-dlp anstelle des eigenen Downloaders (temporär) den externen Download-Manager aria2 verwenden soll, muss das gleichnamige Paket installiert werden:

  • aria2 (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install aria2 

Oder mit apturl installieren, Link: apt://aria2

Falls Vorschaubilder (sofern vorhanden) direkt in Audios bzw. Videos eingebettet werden sollen, so muss das Programm AtomicParsley 🇬🇧 installiert werden:

  • atomicparsley (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install atomicparsley 

Oder mit apturl installieren, Link: apt://atomicparsley

Um Audio/Video in gewünschter Qualität (option -f) zu bekommen,muss das folgende Programm installiert werden.

  • python3-brotli (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install python3-brotli 

Oder mit apturl installieren, Link: apt://python3-brotli

Benutzung

Die Verwendung des Programms erfolgt im Terminal[2]. Die allgemeine Syntax lautet:

yt-dlp [OPTIONEN] URL_DER_WEBSEITE_DES_VIDEOS 

Beispiel:

yt-dlp "https://www.youtube.com/watch?v=HED4h00xPPA" 
[youtube] HED4h00xPPA: Downloading webpage
[youtube] HED4h00xPPA: Downloading android player API JSON
[info] HED4h00xPPA: Downloading 1 format(s): 18
[download] Destination: Ubuntu told by Nelson Mandela [HED4h00xPPA].mp4
[download] 100% of 4.43MiB in 00:02

Die URL_DER_WEBSEITE_DES_VIDEOS sollte immer in Anführungszeichen gesetzt werden, damit vermieden wird, dass etwaige darin vorkommende Sonderzeichen von der Shell interpretiert werden können.

Möchte man die Youtube-ID aus dem Namen/Titel des Videos entfernen, so lautet der Befehl:

yt-dlp -o "%(title)s.%(ext)s" "https://www.youtube.com/watch?v=HED4h00xPPA" 

Benötigt man nur die Tonspur des Videos, so reicht folgender Befehl:

yt-dlp -x "https://www.youtube.com/watch?v=HED4h00xPPA" 

Man kann auch festlegen, in welchen Format der Ton gespeichert werden soll:

yt-dlp -x --audio-format mp3 --audio-quality 0 "https://www.youtube.com/watch?v=HED4h00xPPA" 

Mit der Angabe der Option -k kann verhindert werden, dass etwaige temporär heruntergeladene Dateien – wie etwa für Audio/Video solitär und Untertitel, aber nicht für Vorschaubilder – nach dem Post-Prozessieren gelöscht werden:

yt-dlp -k "https://www.youtube.com/watch?v=HED4h00xPPA" 

Möchte man nach dem Herunterladen die technischen und Metadaten der Video- bzw. Audiodatei angezeigt bekommen, so empfiehlt sich dafür das Programm MediaInfo, womit ein Aufruf folgendermaßen lauten könnte:

mediainfo eine_datei.mp4 

Mit der Angabe der Playlisten-URL kann auch eine ganze Playliste heruntergeladen werden:

yt-dlp [OPTIONEN] URL_DER_PLAYLISTE 

yt-dlp unterstützt auch verschiedene deutsche Mediatheken, u.a. die von ARD, ZDF und ARTE. Alle unterstützten Video-Portale listet zum einen der Befehl:

yt-dlp --list-extractors | less 

Da die Ausgabe sehr lang ist, wird sie hier mit less seitenweise ausgegeben. Die Anzeige wird mit der Taste Q beendet. Zum anderen erfährt man die unterstützten Portale über einen Link.

Man kann die zahlreichen weiteren Optionen neben der Manpage auch über den Befehl:

yt-dlp --help | less 

in Erfahrung bringen.

⚓︎ Falls man das Video nicht speichern, sondern direkt in einem beliebigen Mediaplayer (wie z.B. VLC) anschauen möchte, so erreicht man das, indem der Stream via Pipe-Operator an den Mediaplayer weitergeleitet wird:

yt-dlp [OPTIONEN] -o - URL_DES_VIDEOS | vlc - 

Hinweis:

Der Mediaplayer mpv kann mithilfe von yt-dlp Videos auch ohne Pipe-Operator abspielen; siehe dafür den dortigen Abschnitt Youtube.

Konfiguration

Wenn bestimmte Optionen häufiger benutzt werden, können diese auch in einer Konfigurationsdatei eingetragen werden[3]. Diese muss ggf. selber angelegt werden, für systemweite Nutzung als /etc/yt-dlp.conf, benutzerspezifisch als ~/.config/yt-dlp/config, man kann durch die --config-location-Option beim Aufruf auch andere Speicherorte angeben. Jede Zeile stellt einen Parameter in der gleichen Syntax wie auf der Kommandozeile dar. Zeilen, die mit einem Rautenzeichen (#) beginnen, werden als Kommentare behandelt]. Beispiel:

## Benutzerspezifische Beispielkonfigurationsdatei für yt-dlp in ~/.config/yt-dlp/config
## Zeilen, die mit einem Rautenzeichen (#) beginnen, sind entweder Kommentare oder deaktivierte Argumente
# Lade bei Vorliegen von zwei höchst-qualitativen separaten Dateien für Audio und Video diese getrennt herunter
# (aber nur die in den Formaten m4a bzw. mp4);
# ansonsten nehme die höchst-qualitative AV-Kombi-Einzeldatei:
-f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best"
# Bevorzuge freie (Video-)Formate, außer ein spezifisches ist gefordert:
#--prefer-free-formats
# Der Zielordner ist das aktuelle Terminal-Arbeitsverzeichnis; entferne die Youtube-ID aus dem Namen/Titel des Videos:
#-o "%(title)s.%(ext)s"
# Der Zielordner ist ~/Videos; der Dateiname besteht – wie in der Voreinstellung – aus dem Namen/Titel und der YT-ID
# des Videos sowie der Dateiendung:
-o "~/Videos/%(title)s-%(id)s.%(ext)s"
# Beschränke Dateinamen auf reine ASCII-Zeichen und vermeide dort u.a. "&" und Leerzeichen, aber auch Umlaute;
# wobei Leerzeichen in Unterstriche (_) sowie Umlaute in a, o und u umgewandelt werden:
--restrict-filenames
# Benutze den externen Downloader aria2 (das gleichnamige Paket muss installiert sein!):
--external-downloader "aria2c"
# Übergebe die folgenden Argumente an aria2:
# Minimale Teilstück-Größe 1MiB; maximale Anzahl an gleichzeitigen Verbindungen pro Server und pro Download;
# bei HTTP(S)/FTP-Downloads setze bei nur teilweise von anderenProgrammen heruntergeladenen Dateien den
# Download fort;
# =>=>=> Achtung: Diese Option kann zu Störungen führen, falls youtube-dl einen HLS herunterlädt! Im Zweifelsfalle
# diese Option bitte NICHT verwenden:
#--external-downloader-args "-k1M -x8 -c"
# Zeige den Download-Fortschritt in immer neuen Zeilen an =>=>=> Achtung: Diese Option bitte NICHT zusammen
# mit "–external-downloader"-Optionen verwenden, um potenzielle Störungen auszuschließen:
#--newline
# Zeige den Download-Fortschritt in der Titelleiste des Terminalfensters an; zusammen mit
# "–external-downloader"-Optionen wird evtl. lediglich der erfolgreiche Abschluss des Downloads bekanntgegeben;
# =>=>=> Achtung: Diese Option kann zu Störungen führen, falls youtube-dl durch mpv aufgerufen wird! Im Zweifelsfalle
# diese Option bitte NICHT verwenden:
#--console-title
# Schreibe die Metadaten mit in die Ausgabedatei:
--add-metadata
# Umgehe geographische Beschränkungen durch Fälschen des "X-Forwarded-For"-HTTP-Headers (experimentell):
--geo-bypass
# Bei Download-Fehlern trotzdem weiter herunterladen:
--ignore-errors
# Erzwinge das Fortsetzen des Downloads von teilweise heruntergeladenen Dateien:
--continue
# Schreibe die Video-Beschreibung in eine ".description"-Datei, bis auf die Endung hat diese den gleichen
# Namen wie die Video-Datei; zu öffnen mit jedem Texteditor:
--write-description
# Schreibe Video-Anmerkungen bzw. -Kommentare (sofern verfügbar) in eine ".annotations.xml"-Datei:
--write-annotations
# Schreibe Untertitel-Datei(en) (sofern verfügbar); diese Option wird zwingend von der Option "--embed-subs"
# vorausgesetzt (entweder/oder, aber auch zusammen mit der Option "--write-auto-sub"):
--write-sub
# Schreibe automatisch generierte Untertitel-Datei(en) (nur bei YouTube und sofern verfügbar); diese Option wird
# zwingend von der Option "--embed-subs" vorausgesetzt (entweder/oder, aber auch zusammen mit
# der Option "--write-sub"):                                     
--write-auto-sub
# Lade alle für das Video verfügbaren Untertitel-Dateien herunter; dies sind allerdings ca. 110 an der Zahl;
# diese Anzahl kann dann allerdings dazu führen, dass – falls dies gewollt war – das Einbetten des Vorschaubildes
# fehlschlägt ("ERROR: too many atoms"):                              
#--all-subs
# Liste alle für das Video verfügbaren Untertitel(-Sprachen) auf (aufzurufen als alleinige Option);
# =>=>=> Bei der Auflistung wird zwischen automatisch generierten Untertiteln ("automatic captions") und normalen,
# manuell erstellten Untertiteln ("subtitles") unterschieden; dabei können – falls für eine bestimmte Sprache beide
# Typen vorliegen – die jeweiligen Dateien völlig identisch sein (falls deren Löschung mit der Option "-k" verhindert
# wurde, kann man diese vergleichen); manuell erstellte Untertiteln-Dateien erkennt man daran, dass dort der Text
# überall linksbündig ist (sie dienen wohl als Vorlage für die automatisch generierten Dateien):             
#--list-subs
# Gewünschtes Untertitel-Format, akzeptiert Format-Vorwahlen, z.B.: "srt" oder "ass/srt/best"; ist keines
# der angegebenen Formate vorhanden, wird anstelle dessen ein tatsächlich verfügbares genommen:
#--sub-format srt
# Sprache(n) der herunterzuladenen Untertitel, bei mehreren durch Kommatas getrennt; durch den Aufruf mit der
# (alleinigen) Option "--list-subs" kriegt man die Sprach-Kürzel heraus (z.B. ist "de" deutsch); es werden auch
# nur die tatsächlich verfügbaren Sprachen heruntergeladen:
--sub-lang de,en,en-GB,en-US,fr
# Bette die Untertitel (sofern vorhanden) direkt in das Video ein (nur bei MP4-, WEBM- u. MKV-Containern), sie
# sind dann allerdings ein- u. ausblendbar; diese Option setzt zwingend die Option "--write-sub" bzw. "--write-auto-
# sub" voraus (entweder/oder, aber auch beide); die heruntergeladenen Untertitel-Datei(en) wird (bzw. werden) nach
# dieser Aktion automatisch gelöscht (falls deren Löschung nicht mit der Option "-k" verhindert wurde):
--embed-subs
# Bette das Vorschaubild (sofern vorhanden) direkt in das Audio bzw. Video ein, es erscheint bei Audios permanent
# und bei Videos für ca. 1 Sekunde als "Umschlag-Kunst" (zumindest beim VLC; das Paket "atomicparsley" muss installiert
# sein!):
--embed-thumbnail

Um zu erreichen, dass systemweite und benutzerspezifische Konfigurationsdateien ignoriert werden, muss das Programm mit der Option --ignore-config aufgerufen werden:

yt-dlp --ignore-config [OPTIONEN] URL_DES_VIDEOS 

Falls die Option --ignore-config in der systemweiten Konfigurationsdatei steht, dann wird eine eventuell vorhandene benutzerspezifische ignoriert.

Hinweis:

Zu beachten ist, dass aktivierte Konfigurationsdateien Einfluss auf die Funktionen von externen Programmen haben können, von denen yt-dlp aufgerufen wird. Falls bei den ersteren Probleme auftreten, dann etwaige Konfigurationsdateien vorsichtshalber temporär deaktivieren (z.B. durch Umbenennen) und dann weiter testen. Natürlich könnten die betroffenen Programme außerdem für youtube-dl sicherheitshalber ebenfalls die Option --ignore-config benutzen.

Mehr Informationen zur Konfiguration sind in der Manpage bzw. der Dokumentation zu finden.

Problembehebung

Unterschiedliche Video-Qualitäten

Teilweise (beispielsweise bei YouTube) werden unterschiedliche Qualitäten des gleichen Videos angeboten. Um alle verfügbaren Qualitätsstufen anzuzeigen, verwendet man folgenden Befehl:

yt-dlp -F YOUTUBE_URL_DES_VIDEOS 

Entscheidend in der Ausgabe ist der format code. Anschließend kann mit

yt-dlp -f FORMAT_CODE YOUTUBE_URL_DES_VIDEOS 

die gewünschte Qualitätsstufe heruntergeladen werden.

Bei Audio-Extraktion wird auch Video-Datei heruntergeladen

Falls es eine aktivierte Konfigurationsdatei gibt und man bei Audio-Extraktion via Option -x im Terminal beobachtet, dass neben der Audio- auch noch die Video-Datei mit heruntergeladen wird, dann kann das evtl. daran liegen, dass in der Konfigurationsdatei spezielle AV-Qualitäten wie -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best" angegeben sind. Um nun das Herunterladen der Video-Datei zu verhindern, gibt man im Terminal zusätzlich die gewünschte Qualitäts-Option für Audio mit an, z.B.:

yt-dlp -f bestaudio -x "URL_DES_VIDEOS" 

Nun sollte lediglich die passende Audio-Datei heruntergeladen werden.

Argumente vom externen Downloader werden fälschlicherweise an ffmpeg übergeben

Falls man an yt-dlp (u.a.) die beiden Optionen --external-downloader und --external-downloader-args übergeben hat bzw. man hat eine aktivierte Konfigurationsdatei mit beiden und erhält dann eine Fehlermeldung wie z.B.:

Unrecognized option 'k1M'.
Error splitting the argument list: Option not found

ERROR: ffmpeg exited with code 1

dann bedeutet das, dass der Download ein HLS ist und die Argumente von --external-downloader-args leider fälschlicherweise auch an ffmpeg übergeben werden, wenn --external-downloader nicht ffmpeg ist (#10784 🇬🇧).

Als provisorische Lösung lässt man – falls der beschriebene Fehler auftritt – entweder die beiden oben erwähnten Optionen ganz weg oder kommentiert in der evtl. vorhandenen Konfigurationsdatei temporär zumindest die --external-downloader-args-Option aus[7] [8].

Diese Revision wurde am 7. Januar 2023 11:01 von karzer erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Internet, YouTube, Audio, Video, Multimedia