[[Vorlage(getestet, focal)]]

{{{#!vorlage Wissen
[:Pakete_installieren: Installation von Programmen]
[:Terminal: Ein Terminal öffnen]
[:Paketquellen_freischalten/PPA: Verwenden eines PPAs]
}}}
[[Inhaltsverzeichnis(1)]]

[[Bild(Wiki/Icons/terminal.png, 48, align=left)]]
Eine immer wiederkehrende Frage bezieht sich darauf, wie man Videos von [youtube::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 Links], wovon auch auf die unterstützte Webseiten verwiesen wird).

[github:yt-dlp/yt-dlp:yt-dlp], ein Fork des [github:ytdl-org/youtube-dl/commit/21b759057502c6e70d51011cfb3fb86d84055182 :nicht mehr aktiv weiterentwickelten] [:youtube-dl:], ist eine Möglichkeit für die Kommandozeile – auch zum [#direkt-anschauen 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]. 

{{{#!vorlage Paketinstallation
ffmpeg, universe
}}}

== Ubuntu-Paket ==
yt-dlp ist ab Ubuntu [:22.04:] in den offiziellen Paketquellen enthalten.

{{{#!vorlage Paketinstallation
yt-dlp, universe
}}}

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

== PPA ==

[[Vorlage(PPA, tomtomtom/yt-dlp)]]

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

{{{#!vorlage Paketinstallation
yt-dlp, ppa
}}}




== 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 [wikipedia:Real Time Messaging Protocol:RTMP]-Protokoll gestreamt werden, muss [https://rtmpdump.mplayerhq.hu/ RTMPDump] {en}  installiert werden[1]:

{{{#!vorlage Paketinstallation
rtmpdump, universe
}}}

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

{{{#!vorlage Paketinstallation
mplayer, universe, MPlayer für die Bedienung nur per Kommandozeile
mpv, universe
}}}

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

{{{#!vorlage Paketinstallation
aria2, universe
}}}

Falls Vorschaubilder (sofern vorhanden) direkt in Audios bzw. Videos eingebettet werden sollen, so muss das Programm [http://atomicparsley.sourceforge.net/ AtomicParsley] {en} installiert werden:

{{{#!vorlage Paketinstallation
atomicparsley, universe
}}}


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

{{{#!vorlage Paketinstallation
python3-brotli, universe
}}}


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

{{{#!vorlage Befehl
yt-dlp [OPTIONEN] URL_DER_WEBSEITE_DES_VIDEOS
}}}

Beispiel:

{{{#!vorlage Befehl
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:

{{{#!vorlage 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:

{{{#!vorlage Befehl
yt-dlp -x "https://www.youtube.com/watch?v=HED4h00xPPA"
}}}

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

{{{#!vorlage Befehl
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:

{{{#!vorlage Befehl
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:

{{{#!vorlage Befehl
mediainfo eine_datei.mp4
}}}

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

{{{#!vorlage Befehl
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:

{{{#!vorlage 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 [[Vorlage(Tasten, q)]] beendet. Zum anderen erfährt man die unterstützten Portale über einen [#Links Link].

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

{{{#!vorlage Befehl
yt-dlp --help | less
}}}

in Erfahrung bringen.

[[Anker(direkt-anschauen)]]
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 [:Shell/Umleitungen/#Der-Pipe-Operator:Pipe-Operator] an den Mediaplayer weitergeleitet wird:

{{{#!vorlage Befehl
yt-dlp [OPTIONEN] -o - URL_DES_VIDEOS | vlc -
}}}

{{{#!vorlage Hinweis
Der Mediaplayer [:mpv:] kann mithilfe von yt-dlp Videos auch ohne Pipe-Operator abspielen; siehe dafür den dortigen Abschnitt [:mpv/#Youtube: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:

{{{#!vorlage Befehl
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.

{{{#!vorlage 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 [:man:Manpage] bzw. der [#Links Dokumentation] zu finden.

= Problembehebung =
== Unterschiedliche Video-Qualitäten ==
Teilweise (beispielsweise bei [youtube::YouTube]) werden unterschiedliche Qualitäten des gleichen Videos angeboten. Um alle verfügbaren Qualitätsstufen anzuzeigen, verwendet man folgenden Befehl:

{{{#!vorlage Befehl
yt-dlp -F YOUTUBE_URL_DES_VIDEOS
}}}

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

{{{#!vorlage Befehl
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 [#Konfiguration 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.:

{{{#!vorlage Befehl
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 [#Konfiguration 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 [wikipedia_en:HTTP_Live_Streaming:HLS] ist und die Argumente von `--external-downloader-args` leider fälschlicherweise auch an ffmpeg übergeben werden, wenn `--external-downloader` nicht `ffmpeg` ist ([github:rg3/youtube-dl/issues/10784: #10784] {en}).  

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].

= Links =
 * [github:yt-dlp/yt-dlp:Projektseite] {en}
  * [https://rg3.github.io/youtube-dl/documentation.html Documentation youtube-dl] {en} – Anleitung
  * [man:yt-dlp:Manpage] {en}
  * [wikipedia:Youtube#Rechtliche_Aspekte:Youtube – Rechtliche Aspekte] – Wikipedia
 * [https://www.genyoutube.net/formats-resolution-youtube-videos.html Formats and Resolutions of Youtube Videos] {en} – Auflistung der YouTube-Format-Codes mitsamt Auflösung und anderen Details 
 * [github:tmechen/tatort-dl:tatort-dl] {en} – Hilfsprogramm speziell für die Mediathek der ARD
 * [:Streams_speichern:] {Übersicht} Übersichtsseite

# tag: Internet, Multimedia, Audio, Video, YouTube