malte70.blog()

Snippets: youtube-dl/yt-dlp

Im folgenden habe ich einige Snippets zu youtube-dl bzw. dessen Fork yt-dlp zusammengestellt:

Bestimmten Stream herunterladen

Verfügbare Audio- und Video-Streams anzeigen

$ youtube-dl -F 'https://www.youtube.com/watch?v=CiQKE_FdIs8'
[youtube] Extracting URL: https://www.youtube.com/watch?v=CiQKE_FdIs8
[youtube] CiQKE_FdIs8: Downloading webpage
WARNING: [youtube] unable to extract initial player response; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
[youtube] CiQKE_FdIs8: Downloading ios player API JSON
[youtube] CiQKE_FdIs8: Downloading android player API JSON
[youtube] CiQKE_FdIs8: Downloading iframe API JS
[youtube] CiQKE_FdIs8: Downloading player 7ee36b0e
[youtube] CiQKE_FdIs8: Downloading web player API JSON
[youtube] CiQKE_FdIs8: Downloading m3u8 information
WARNING: [youtube] unable to extract yt initial data; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
WARNING: [youtube] Incomplete data received in embedded initial data; re-fetching using API.
[youtube] CiQKE_FdIs8: Downloading initial data API JSON
[info] Available formats for CiQKE_FdIs8:
ID  EXT   RESOLUTION FPS CH │  FILESIZE   TBR PROTO │ VCODEC          VBR ACODEC      ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb2 mhtml 48x27        0    │                 mhtml │ images                                  storyboard
sb1 mhtml 80x45        1    │                 mhtml │ images                                  storyboard
sb0 mhtml 160x90       1    │                 mhtml │ images                                  storyboard
[...]
140 m4a   audio only      2 │   3.74MiB  129k https │ audio only          mp4a.40.2  129k 44k [es] medium, m4a_dash
[...]
22  mp4   1280x720    30  2 │ ≈72.01MiB 2438k https │ avc1.64001F         mp4a.40.2       44k [es] 720p
[...]
136 mp4   1280x720    30    │  66.56MiB 2309k https │ avc1.4D401F   2309k video only          720p, mp4_dash
[...]

Genauen Download-Stream festlegen

Die spezifische Stream-ID muss eine der für dieses Video verfügbaren Streams sein! (hier ist es 22)

youtube-dl -f 22 'https://www.youtube.com/watch?v=CiQKE_FdIs8'

Mehrere Streams laden

Um zum Beispiel einen spezifischen Video-Stream mit einem bestimmten Audio-Stream zu kombinieren, können mehrere IDs mit + kombiniert werden:

youtube-dl -f 140+136 'https://www.youtube.com/watch?v=CiQKE_FdIs8'

Automatisch besten Stream erkennen

Durch Verwendung von bestaudio oder bestvideo versucht youtube-dl automatisch, den bessten Stream zu ermitteln. Statt bestaudio+bestvideo kann auch einfach kurz best verwendet werden.

youtube-dl -f best 'https://www.youtube.com/watch?v=CiQKE_FdIs8'
youtube-dl -f bestaudio 'https://www.youtube.com/watch?v=CiQKE_FdIs8'
youtube-dl -f bestvideo 'https://www.youtube.com/watch?v=CiQKE_FdIs8'

Video-Stream: maximale Auflösung

Beim erkennen des besten Streams mittels bestvideo kann auch eine maximale Höhe angegeben werden, um höchstens z.B. ein 720p- oder 1080p-Video zu bekommen:

youtube-dl \
	-f "bestvideo[height<=720]+bestaudio/best[height<=720]" \
	'https://www.youtube.com/watch?v=CiQKE_FdIs8'

MP3 inklusive Metadaten erstellen

youtube-dl \
	-f "bestaudio" \
	--add-metadata \
	--embed-thumbnail \
	--postprocessor-args "-metadata comment=$url" \
	--audio-format mp3 \
	--audio-quality 0 \
	"$url"

Audio-Spur in MP3 konvertieren

Das etwas kryptische ${f%.*} entfernt die Datei-Endung (alles ab dem letzten Punkt). Qualitätsstufe 2 entspricht 190 kbit/s (VBR ±40kbit/s), und eigentlich immer passend, da höhrere Bitraten meist nur für (unnötig) größere Dateien sorgt. Kleinere Qualitätsstufen sind mitunter bei gutem Quellmaterial sowie Lautsprechern wiederum hörbar.

f='Konzert der untoten Plastikbecher 2008.mp4'
ffmpeg -i "$f" -vn -codec:a libmp3lame -qscale:a 2 "${f%.*}.mp3"

Audio-Tags beim Konvertieren mit ffmpeg setzen

ffmpeg \
	-i "Eingabe-Datei.mp4" \
	-vn \
	-codec:a libmp3lame -qscale:a 2 \
	-metadata title='Der Titel' \
	-metadata artist='Künstler' \
	-metadata album="Das Album" \
	"Fertige_Audio-Datei.mp3"

Bonus: DVD-Stream in einzelne Datei kopieren

Der Stream, in dem sich auf einer DVD der Film befindet, ist in zahlreiche kleinere Teil- Stücke zerlegt auf der DVD gespeichert, da zur Kompatibilität mit Windows eine sehr kleine Maximalgröße für Dateien auf DVDs festgelegt wurde.

Nit MPlayer kann dieser statt ihn wie gewöhnlich einfach anzuzucken in eine einzelne Datei zusammen geführt werden:

# Das meist implizit genutzte Gerät /dev/dvd existiert z.B. unter ArchLinux
# nicht, deshalb müssen wir es immer explizit angeben!
DEVICE="/dev/sr0"

# Übersicht aller vorhandenen Tracks, durch die Länge lässt sich hier derjenige,
# der den Film enthält, ermitteln:
lsdvd $DEVICE

# Den Stream in eine Zusammenhängende Datei kopieren (Achtung! Die Datei ist bei
# Spielfilmen gewöhnlich vier bis sechs Gigabyte groß, und der Stream wird fast
# eins zu eins in Echtzeit ausgelesen!)
#  -> 02 ist die eben ermittelte Nummer des zu lesenden Tracks
mplayer dvd://02 -dvd-device $DEVICE -dumpstream -dumpfile Ziel-Datei.vob

In der hier erstellten Datei befinden sich alle vorhandenen Audio- und Untertitelspuren. Wenn diese DVD-Kopie (in VLC) wiedergegeben wird, können diese dann Ausgewählt werden.