eingestellt am 5. Jan 2021
Da es seit längerem mit den Downloads der 1080p Streams (inkl. Ton) von servus-TV über den JDownloader nicht klappt und mich dich Handhabung mit youtube-dl bzw. ffmpeg nervte habe ich aus einigen alten Batch-Projekten ein neues Skript erstellt. Dieses sollte die Download-Handhabung der Streams für alle Windows-Nutzer vereinfachen könnte. Kann aber auch in abgespeckter Weise unter WINE/Linux laufen (siehe unten).
Anpassungen nehme ich bei Fehlern ggf. vor…
Die Idee und Vorteile dieses Batch-Skriptes:
Download: _stream-dl
Die ebenfalls für den Downloader benötigten Listen findet ihr im extra Thread/Diskussion: LISTEN-Sammlung
Was wird für die Funktionalität minimal benötigt (Default-Einstellung):
Anpassbarkeit des Skripts bzw. seiner Ausführung:
Wenn man die Filme nur in einer bestimmten Qualität downloaden will, dann muss man keine Anpassungen vornehmen, sondern kann einfach die entsprechende Liste nehmen (720p, 1080p, PLV). Aber wenn man mehr anpassen will, dann kann man es
…„temporär“ per Parameter oder direkt in der Batch-Datei (die ersten 80 Zeilen).
- Diejenigen die das Skript aus der Kommandozeile starten, können über folgende Parameter einige Sachen anpassen (eine Kombination der einzelnen Parameter ist möglich)
- Bsp. für eine Kombination aller Parameter: _stream-dl.bat-s -r yt -p 3 -l E:\DL-Ordner\my_streams.txt -d „F:\my_DL-Ordner“
Das „Format“ der Download-Textdatei-Zeilen in der „_stream-list.txt“:
Benötigt wird prinzipiell nur die URL „http://cs.liiift.io/v1…“
und der Film-Datei-Name in Anführungszeichen „Stirb langsam“ .
Die Reihenfolge ist egal!
- Es werden aber auch ganze „youtube-dl“- oder„ffmpeg“-Befehle verarbeitet, wie z.B.
„ffmpeg -i cs.liiift.io/...…3u8‚Stirb langsam 2.mp4“ oder „youtube-dl -o ‚Stirb langsam 2‘ cs.liiift.io/v1/…3u8“
Mit "#" oder "::" am Anfang einer Zeile können Downloads auskommentiert werden, so dass sie nicht vom Download-Skript verarbeitet werden
Über die Liste kann die Qualität eines jeden Downloads festgelegt werden mit einem "-q [240p-1080p]" am Anfang einer jeden Zeile
Bsp. einer _stream-list.txt Datei : pastebin.com/iXP…PET
Dies ist schon eine für meine Zwecke angepasste Liste mit "-q 1080p" am Anfang der Zeile markierten Filmen und einigen aus kommentierten "#": Ich rufe das Skript dann mit dem Parameter "_stream-dl.bat -q 720p" auf und es werden alle Filme OHNE eine explizite Markierung mit der Qualität 720p heruntergeladen und alle Filme, die eine "-q 1080p" Markierung haben in der Qualität 1080p heruntergeladen"
WINE/Linux:
Dieses Bash-Skript funktioniert in abgespeckter Weise unterWINE/Linux. Dazu muss beim Aufruf des Skriptes der Parameter „-wine“ gesetztwerden. In diesem Modus wird eine Shell-Script-Datei für die entsprechendenTools (ffmpeg, youtube-dl) erzeugt, die dann unter Linux ausgeführt werdenkann. Mit den übrigen Parametern kann der Prozess bzw. die Ausgabedatei wie beschriebenangepasst werden.
Anpassungen nehme ich bei Fehlern ggf. vor…
Die Idee und Vorteile dieses Batch-Skriptes:
- Einfache Handhabung: Ein Doppelklick, Warten, Streams anschauen
- Keine manuelle Installation und Download der benötigten Tools (wird alles automatisch von den Original-Quellen mit dem ersten Start erledigt)
- Paralleler Download mehrerer Streams (kann angepasst werden)
- Nutzung einfacher Downloads-Text-Listen. Diese können untereinander geteilt werden, so dass nicht jeder diese erstellen bzw. pflegen muss.(siehe LISTEN-Sammlung)
- Wahl der Download-Qualität (240p -1080p) über Parameter oder in der Downloads-Text-Liste (siehe unten)
- Einfache Anpassbarkeit des Skriptes an eigene Bedürfnisse durch Parameter oder direkt in der Batch-Datei (siehe unten).
- Möglichkeit der Generierung von Befehls-Listen für die jeweiligen Tools (ffmpeg, youtube-dl)
- Keine Admin-Rechte benötigt, falls bereits die Microsoft VC++ runtime libraries (insbesondere die msvcr100.dll) installiert sind, welche von youtube-dl benötigt werden (winhelponline.com/blo…ng/).Ansonsten wird einmalig die benötiget Datei beim ersten Start des Skriptes heruntergeladen und in den Ordner „C:\Windows\SysWOW64\“ mit Admin-Rechten kopiert.
- Transparent für alle, die sich etwas mit Batch-Scripting auskennen
Download: _stream-dl
Die ebenfalls für den Downloader benötigten Listen findet ihr im extra Thread/Diskussion: LISTEN-Sammlung
Was wird für die Funktionalität minimal benötigt (Default-Einstellung):
- Das Batch-Skript „_stream-dl.bat“ und eine Textdatei „_stream-list.txt“ mit URLs und Dateinamen (Default: beide liegen im selben Ordner)
- Die Default Einstellung ist: Es werden alle benötigten Tools und auch die Downloads in den selben Ordner heruntergeladen, wo sich das Batch-Skript und die „_stream-list.txt“ befinden.
- Doppelklick auf die „_stream-dl.bat“ -> die angezeigten Infos per Tastendruck bestätigen -> Downloads starten
- Bereits heruntergeladene Dateien werden beim erneuten Start des Skriptes nicht überschrieben und in der Download-Liste übersprungen .Können aber natürlich aus der Liste manuell gelöscht oder auskommentiert werden
Anpassbarkeit des Skripts bzw. seiner Ausführung:
Wenn man die Filme nur in einer bestimmten Qualität downloaden will, dann muss man keine Anpassungen vornehmen, sondern kann einfach die entsprechende Liste nehmen (720p, 1080p, PLV). Aber wenn man mehr anpassen will, dann kann man es
…„temporär“ per Parameter oder direkt in der Batch-Datei (die ersten 80 Zeilen).
- Diejenigen die das Skript aus der Kommandozeile starten, können über folgende Parameter einige Sachen anpassen (eine Kombination der einzelnen Parameter ist möglich)
- "-q [240p bis 1080p]" Diese Videoqualität wird gewählt, wenn in der Downloads-Text-Listen keine extra Videoqualität für die jeweilige URL angegeben wurde (siehe unten) - Bsp.: _stream-dl.bat -q 720p
- "-q! [240p bis 1080p]" oder "-q ![240p bis 1080p]" Ähnlich wie "-q" nur dass IMMER diese Videoqualität gewählt wird; unabhängig der in der Downloads-Text-Listen extra angegeben Videoqualität für die jeweilige URL (siehe unten) - Bsp.: _stream-dl.bat -q! 720p
- „-p [0-9]“ Anzahl parallel laufende Downloads - Bsp.: _stream-dl.bat -p 4
- "-m [None,All,List] Markierung der Ausgabedatei mit Qualitätsangabe, in keiner Datei (NONE), in allen Dateien (All) oder wie/wo in der Liste angegeben (List), default ist All : - Bsp.: _stream-dl.bat -m None
- „-d Pfad/Ordner“ Angabe eines individuellen Download-Ordners- Bsp.: _stream-dl.bat -d „D:\DL-Ordner“
- „-l Pfad/Datei.txt“ Angabe einer individuellen Download-Listen-Datei- Bsp.: _stream-dl.bat -l „D:\DL-Ordner\streams2.txt“
- „-r [yt, ff oder fy]“ download per youtube-dl=yt, ffmpeg=ff oder Kombi=fy (fy ist Default und am Schnellsten) - Bsp.:_stream-dl.bat -r ff
- "-a" [A]udio-Spur in youtube-dl: explizieteAuswahl der Audiospur - Bsp.: _stream-dl.bat -a hls-audio-German
- "-e" [e]cho-Modus: KEIN Download NUR Generierungder Befehle für ffmpeg und youtube-dl - Bsp.: _stream-dl.bat -e
- „-wine" Angepasster [e]cho-Modus für WINE mit Shell-Script-Ausgabe-Datei - Bsp.: _stream-dl.bat -wine
- „-s“ [s]ilent-Modus = es werden keine Rückfragen gestellt - Bsp.: _stream-dl.bat -s
- Bsp. für eine Kombination aller Parameter: _stream-dl.bat-s -r yt -p 3 -l E:\DL-Ordner\my_streams.txt -d „F:\my_DL-Ordner“
Das „Format“ der Download-Textdatei-Zeilen in der „_stream-list.txt“:
Benötigt wird prinzipiell nur die URL „http://cs.liiift.io/v1…“
und der Film-Datei-Name in Anführungszeichen „Stirb langsam“ .
Die Reihenfolge ist egal!
- Es werden aber auch ganze „youtube-dl“- oder„ffmpeg“-Befehle verarbeitet, wie z.B.
„ffmpeg -i cs.liiift.io/...…3u8‚Stirb langsam 2.mp4“ oder „youtube-dl -o ‚Stirb langsam 2‘ cs.liiift.io/v1/…3u8“
Mit "#" oder "::" am Anfang einer Zeile können Downloads auskommentiert werden, so dass sie nicht vom Download-Skript verarbeitet werden
Über die Liste kann die Qualität eines jeden Downloads festgelegt werden mit einem "-q [240p-1080p]" am Anfang einer jeden Zeile
Bsp. einer _stream-list.txt Datei : pastebin.com/iXP…PET
Dies ist schon eine für meine Zwecke angepasste Liste mit "-q 1080p" am Anfang der Zeile markierten Filmen und einigen aus kommentierten "#": Ich rufe das Skript dann mit dem Parameter "_stream-dl.bat -q 720p" auf und es werden alle Filme OHNE eine explizite Markierung mit der Qualität 720p heruntergeladen und alle Filme, die eine "-q 1080p" Markierung haben in der Qualität 1080p heruntergeladen"
WINE/Linux:
Dieses Bash-Skript funktioniert in abgespeckter Weise unterWINE/Linux. Dazu muss beim Aufruf des Skriptes der Parameter „-wine“ gesetztwerden. In diesem Modus wird eine Shell-Script-Datei für die entsprechendenTools (ffmpeg, youtube-dl) erzeugt, die dann unter Linux ausgeführt werdenkann. Mit den übrigen Parametern kann der Prozess bzw. die Ausgabedatei wie beschriebenangepasst werden.
Zusätzliche Info
Kategorien
Diskussionen Neueste
34 Kommentare
sortiert nachHi,
die Links bekommst du, wenn du zB in Firefox das entsprechende Video öffnest und dann die Entwickleroptionen öffnest. Das geht mit STRG+SHIFT+E. Dann am besten die Seite neu laden und unter Netzwerkanalyse nach m3u suchen. Dann zeigt er dir die playlist.m3u8. Da drin sind die Links für die verschiedenen Auflösungen der Videos.
Das Problem mit dem Ton ist folgender: Video und Audio werden bei den Streams getrennt voneinander zum Download angebote. Das Video wird zusätzlich in 1000+ Teile gesplittet. Daher musst zum einen das Video aus vielen Teilen zu einer Datei zusammengefügt werden und zweitens anschließend mit der separaten Audiodatei zusammengeführt werden.
Bei youtube-dl passiert das alles automatisch. In den m3u8 Dateien findet man auch irgendwo den Link um die Audiodatei downzuloaden. Dann könnte man sie theoretisch auch selbst später zusammenführen.
Danke für das tolle Programm.
Nachtrag 07.01.2020:
Durch Skript-Version v0.9 sollte untenstehender Workaround nicht mehr vonnöten sein.
Danke für das schnelle Beheben!
---------------------------------------------------------------------
Was mir bei meinen ersten Versuchen aufgefallen ist:
Das Tool lädt alle benötigten Programme separat nach und legt diese im Unterordner "_stream-dl/bin" ab.
Beim Programmaufruf von youtube-dl wird dieses jedoch ohne Benennung des Unterordners aufgerufen, sodass (zumindest bei mir) die Fehlermeldung kommt, dass youtube-dl nicht vorhanden ist. Der gleiche Fehler wird vermutlich auch bei ffmpeg der Fall sein.
Als Workaround habe ich in den Zeilen 26 und 40 die Skript-Zeilen:
set prog_path=youtube-dl durchset prog_path=.\_stream-dl\bin\youtube-dl
und
set prog_path=ffmpegdurch set prog_path=.\_stream-dl\bin\ffmpeg
ersetzt. (bearbeitet)
In der aktuellen Skript-Version (v0.8) findest die beiden "--get-url" Zeilen in 355 und 356 ...jedoch schon mit Variablen für die Videoqualität versehen.
Hi Karl, du machst nichts falsch...der Wine-Modus war noch sehr "experimentell" und eingeschränkt nutzbar - ich habe es auch noch nicht richtig kommuniziert. Ich hatte am WE aber etwas Zeit genommen und habe am Script geschrieben. Vor allem die Kompatibilität zu Linux/Wine habe ich verbessert! In einer VM mit Wine 5.0 lief es zumindest vergleichbar zu Windows und für den Download setztet das Script auf die "Linux-nativen" Versionen von youtube-dl und ffmpeg. Nur der "Ablauf" ist natürlich an Wine gebunden.
Außerdem kommt noch weitere Funktionen (Einzeldownload und Update) in der nächsten Version irgendwann diese Woche...
---
ich fand ff schneller, da man video und audio ohne zwischenspeicherung gemuxt in die datei streamt
yt lädt getrennt, speichert zwischen, merged und löscht die einzelnen streams. Das sind für SSDs unnötige Schreibprozesse.
Das wäre also mit deinen variablen url+filename so:
for /f "tokens=*" %%a in ('youtube-dl -f bestvideo --get-url %url') do set video=%%a
for /f "tokens=*" %%a in ('youtube-dl -f bestaudio --get-url %url%') do set audio=%%a
ffmpeg -i %video% -i %audio% -c copy -map 0:0 -map 1:0 %filename%.mp4
batch-programmierung ist bei mir laienhaft.
wollte einen Einzeiler.
yt brauche ich nur für die parameterübergabe der streams zu ffmpeg. ich weiß nicht, wie ich die drei zeilen sonst in eine zeile packen könnte. deshalb der umweg über die beiden variablen video+audio. es sei denn, es gibt einen Weg, mit yt auch parallel zu speichern. Hat ja was damit zu tun, mit welchen Parametern yt ff aufruft.
Du hast recht, mit deinen Parametern geht es am Schnellsten! Ich hatte mir vorher die Downloads-Tools nicht genau angeschaut, aber jetzt auf dein Hinweis das Skript angepasst.
Mit dem Parameter "-r fy" habe ich deine Kombination eingebaut und als Default gesetzt! Außerdem habe ich dadurch die Wahl-Möglichkeit unterschiedlicher Downloadqualitäten eingebaut.
es ist ja keine Kombination. leider kann ich über ffmpeg nicht json auslesen, um z.B. den Dateinamen generieren zu können. ich nutze youtube-dl ausschließlich, um die einzelstreams zu bekommen, da ich nicht weiß, wie ich da mit ffmpeg erhalte.wo hast du denn die Zeilen eingebaut? Also wo werden die streams für audio und video abgefragt, damit sie in der stream-map geladen werden? nicht mit --get-streams?
Was meinst du konkret mit "Beim Programmaufruf von youtube-dl ..."?
Ja genau dein Workaround sollte so funktionieren
Die Idee war/ist, dass das Skript auch mit schon bereits richtig installierten Versionen von youtube-dl und ffmpeg funktioniert. Aber ich schau mir heute Abend mal das genauer an. Danke für den Hinweis!
Vorab: Ich habe zunächst dein Skript heruntergeladen, aber habe zuvor youtube-dl nicht installiert, welches dann nachgeladen wurde.
Mit "Programmaufruf von youtube-dl" meinte ich die Stelle im Skript, an der eine neue Kommandokonsole aufgerufen wird und in dieser dann die Parameter an youtube-dl bzw. ffmpeg übergeben werden.
So sieht es bei mir nach Aufruf des Skripts ohne Parameter aus:
In der letzten Zeile steht dann zwar downloading..., es öffnet sich aber kein neues Fenster und es wird keine Datei erstellt.
Ich kenne mich mit der Kommandozeile nicht so wirklich aus, hoffe aber, dass die folgenden Hinweise helfen:
Wenn ich es richtig verstanden habe, wird nach dem Herunterladen z.B. von youtube-dl der Pfad zum Aufrufen der youtube-dl auf den Unterordner \...\bin\youtube-dl.exe geändert. (if exist ... set ...)
Kurz vor Aufrufen des Downloads wird aber nochmals "call :yt" aufgerufen - und dort der prog_path überschrieben:
call :yt --> :yt --> set prog_path=youtube-dl
Daher müsste deine Abfrage "if exist ... " jeweils nochmals bei :yt und :ff hinzugefügt werden.
Außerdem habe ich die ffmpeg Quelle von dem Server des Entwicklers auf sein GitHub verändert, da bei meinem Test der Download ewig ging (20 min statt 2 sec von GitHub) – hattest du ein Problem damit, bei deinem Test?
Ging bei mir recht schnell. Glaube in unter 1 Minute, genauer weiß ich es leider nicht.
Danke: das hat bei mir geholfen. Ohne der Anpassung der Pfade lief bei mir nix. Aber nun tut es prima
Hi Chris, welche Skript-Version hast du benutzt? Ab der v0.9 sollte dieser Fehler eigentlich behoben worden sein und ohne Anpassungen funktionieren. In der aktuellen Version habe ich auch noch paar andere kleine Bugfixes gemacht!
Ok, danke fürs Testen Kann es sein, dass das Skript in einem Pfad oder Ordner lag wo Leerzeichen drin waren? Auf jeden Fall habe ich dies nun gefixt und das Skript sollte ab v0.9.6 sowohl beim Download-Ordner als auch bei den Programm-Pfaden sich nicht mehr an Leerzeichen verschlucken. Ich hoffe nun müssen die Pfade nicht mehr nachträglich angepasst werden.
Außerdem sollte es jetzt mit lokal installierten Versionen von youtube-dl als auch ffmpeg laufen, ohne die Tools downloaden zu müssen bzw. nur die notwendigen Tools downloaden. (bearbeitet)
Hast Recht: ich hatte ein Leerzeichen im Verzeichnis. Ohne Leerzeichen läuft es durch ohne direkte Angabe der Pfade
- "m"-Parameter um die Ausgabedateien mit einem "Quality-Tag" z.B. {1080p} zu versehen
- "e"-Parameter um Befehlslisten zu generieren, statt direkt runter zu laden. Dann haben auch die Linux- und Mac-Nutzer auch was von dem Skript ;-)
Habe das Skript unter Linux mit WINE getestet und im "e-Modus" lief es besser als gedacht , so dass ich noch ein "-wine" Parameter eingebaut habe, mit dem sollte es flüssig durchlaufen....
Ich setze das Gespräch mal hier fort.
Danke erstmal. Das ganze direkt in mein Projekt zu integrieren, ist schwierig. Da sind die unterschieden und Ansätze von cmd und powershell zu verschieden. Ich muss sagen ich tu mich auch mittlerweile ein wenig schwer mich in der cmd Syntax zurecht zu finden. Hab mich da beruflich ein bisschen auf powershell versteift.
Es finden sich aber viele tolle Ideen in deinem Script, die mir auch für meine gui vorstellen könnte.
Wenn ich mir deinen Ansatz, Listen verarbeiten zu können, so angucken überlege ich grad, das ganze bei mir auch evtl. Auch zu integrieren.
Was mir an deinem Script so gefällt, ist die aufgeräumte Struktur im Code und saubere schreibst.
Einen verbesserungs Vorschlag hätte ich auch. Du lädst in deinem Script, bei der Update Funktion 7zip runter, Um die ffmpeg. 7z zu entpacken. Nutz dann aber eine PowerShell Funktion um die 7zip.zip zu entpacken. Wenn du direkt ffmpeg in zio downloaden würdest, und mit powershell entpacken, könntet du dir alle Funktionen bezüglich 7zip sparen.
Grüße sphere
Was mache ich falsch? Ich nutze Linux aber dein Proggy will nicht.
Das kommt raus wenn ichs in wine starte.
Cool, Danke.
servustv.com/sea…to/
oder (in Anbetracht der möglicherweise kurzen Zeit) gerne auch, diese einfach herunterladen und mir zum Download zur Verfügung zu stellen?
Herzlichen Dank, Frohe Weihnachten (nachträglich) und einen guten Rutsch!
Die Links, die du benötigst, müssten die folgenden sein:
dms.redbull.tv/v4/…3u8
dms.redbull.tv/v4/…3u8
dms.redbull.tv/v4/…3u8
dms.redbull.tv/v4/…3u8
Werden diese jetzt Teil der berühmten _stream-list.txt-Datei oder was mache ich damit?
Stecke leider noch so überhaupt nicht drin in dem Ganzen...
Also du benötigst youtube-dl von hier: youtube-dl.org/dow…exe
Dann brauchst du noch ffmpeg, das bekommst du hier: github.com/Gya….7z
ffmpeg, das zweite, musst du entpacken und den Inhalt des Ordners bin in den gleichen Ordner wie youtube-dl (der erste Link) kopieren.
In diesem Ordner musst du dann ein Terminal öffnen. Ich habe Windows 11, da geht das ohne Umwege. Unter Windows 10 geht es angeblich so: Um die Eingabeaufforderung ohne Administrator-Rechte in einem bestimmten Ordner zu starten, laden Sie den Windows-Explorer, drücken die Shift-Taste und klicken den Ordner mit der rechten Maustaste an. Im Kontextmenü erscheint dann der Befehl „Eingabeaufforderung hier öffnen“.
In die Eingabeaufforderung musst du dann die folgende Textzeite schreiben:
.\youtube-dl.exe -o Folge1.mkv --merge-output-format mkv dms.redbull.tv/v4/…3u8
Da wo Folge1.mkv steht, kannst du deinen gewünschten Dateinamen angeben. Den Link am Ende des Befehls musst du durch die jeweils anderen Links ersetzen. Einer nach dem anderen. Das dauert dann ein paar Minuten je nach Internetleitung und du hast deine Filme.
Bereits gelungen ist es mir mit den Links (wie hast Du die ermittelt?) und JDownloader2 immerhin schon einmal, 3 Videos (leider jedoch ohne Ton) herunterzuladen...
Kann es sein, dass in der Linkliste einer der vier Teile fehlt?
Ich habe das gerade mal getestet. Leider geht es bei mir nicht so. Man muß sich die Audio (../audio/..)und Videodatei in der gewünschten Auflösung (../media/..) aus verschiedenen Ordnern separat laden und dann zusammenmuxen.
servustv.com/spo…4y/ (bearbeitet)
Den Link mit JDownloader einfügen 9,17gb