Forum: PC Hard- und Software Video Download Helper Alternative auf der Kommandozeile


von PC (Gast)


Lesenswert?

Hallo!

Kennt jemand ein Kommandozeilen-Tool für Linux, das so arbeitet, wie der 
Video-Download-Helper (Firefox Addon)?

Es wäre schön, wenn man dort die URL der Webseite angibt und man die 
Streaming Links zurückbekommt.

Hintergrund wäre, dass ich gerne ein kleines Skript schreiben würde, das 
mir beim Hochfahren eines Raspberry-Pis mit LibreELEC die Senderliste 
vom Simple-IPTV-Addons aktualisiert, denn leider wird der Stream-Link 
eines Senders jeden Tag verändert.

Wenn ich die Webseite aufrufe, wird vom Video-Download-Helper der Link 
sofort erkannt. (Man braucht den Stream nicht mal zu starten.)

Danke im Voraus!

:
von Εrnst B. (ernst)


Lesenswert?

youtube-download wär einen versuch wert. Das kann sehr viele 
verschiedene Video-Seiten, nicht nur den Namensgeber.

Wenn nicht, und sich die Webseite stark gegen solche Tools "wehrt":
Puppeteer.
Hab damit erst grad wieder was automatisiert... Webseite aufmachen, 
Cookie-Banner wegklicken falls er angezeigt wird und falls ein Redirect 
auf das Login-Formular erfolgt: Benutername+Passwort+"remember me", die 
vielen hundert IMG/CSS/JS/XHR/API-Requests filtern, den einen 
interressanten abfangen, JSON-Daten in ein CSV speichern, fertig.
grad mal so 50 Zeilen Code.
1
  const browser = await puppeteer.launch({ headless: true, userDataDir: profileDir, executablePath: "/usr/bin/chromium" });
2
  const page = await browser.newPage();
3
  await page.goto('https://somewhere', { waitUntil: 'networkidle0' });
4
  if (await page.$('#no-cookies-please')) {
5
     console.log("Denying cookies...");
6
     await page.click('#no-cookies-please');
7
  }
8
  if (page.url().match(/sso.some.domain\/signin/)) {
9
    await page.type('#username', credentials.username);
10
    await page.type('#password', credentials.password);
11
    await page.click('#remember-me-checkbox');
12
    const [response] = await Promise.all([
13
      frame.waitForNavigation({ waitUntil: 'networkidle0' }),
14
      frame.click('#login-btn-signin'),
15
    ]);
16
    if (!response.ok()) throw new Error("Login Failed");
17
  }
18
// usw.
und mit "headless: false" könntest du dem Script auch live beim Arbeiten 
zusehen.

von PC (Gast)


Lesenswert?

Hallo!

Danke für den Tipp!

Youtube-DL geht leider nicht.

Puppeteer ist, wenn ich es richtig verstehe, kein reines 
Kommandozeilentool. Kennst du (oder andere hier) vielleicht etwas, wo 
man ähnlich wie beim Youtube-DL einfach den Link eingibt und den 
Streaming-Link retour bekommt, was man dann z.B. auch in VLC einsetzen 
könnte?

Danke!

von det (Gast)


Angehängte Dateien:

Lesenswert?

Hi guys!

von Εrnst B. (ernst)


Lesenswert?

PC schrieb:
> Puppeteer ist, wenn ich es richtig verstehe, kein reines
> Kommandozeilentool.

Nö, es ist primär ein Werkzeug, um Tools/Scripte zu erzeugen, die mit 
Webseiten interagieren.

Gibt auch kommandozeilen-tools dafür/damit, die sind aber eher auf 
"automatisiert screenshots erzeugen" oder "interaktiv die Seite per 
Konsole bedienen" ausgelegt.
(puppeteer-cli, repl, ..)

PC schrieb:
> einfach den Link eingibt und den
> Streaming-Link retour bekommt

Das geht so generell nicht. Manchmal reicht ein "curl | grep | sed", 
manchmal muss man eben in JS implementiere Verschleierungsalgorithmen 
ausführen, um an die URL zu kommen.

Wenn deine Wunsch-Streamingseite nicht hoch-geheim ist, verrate uns doch 
einfach, um was es geht.

: Bearbeitet durch User
von PC (Gast)


Lesenswert?

Εrnst B. schrieb:
> Wenn deine Wunsch-Streamingseite nicht hoch-geheim ist, verrate uns doch
> einfach, um was es geht.

Es ist https://mediaklikk.hu/m2-elo/

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

PC schrieb:

> Es ist https://mediaklikk.hu/m2-elo/

Im Anhang eine Quick-n-Dirty Lösung, die dir
z.B.
https://c202-node62-cdn.connectmedia.hu/1101/7cf6f24598234992a9e7fb38efab9d25/60ea9ccb/index.m3u8?v=5i

daraus extrahiert.

Ist so eher die "Holzhammer"-Methode.

Statt den Seitenquelltext zu analysieren und daraus nur das nötigste zu 
extrahieren, macht das einfach einen vollwertigen Chromium-Browser (aber 
mit eigenem Profil & ohne Fenster) auf, läd Alles von der Seite, also 
alle Javascripts, alle Werbung, alle Cookies usw. und schaut dem 
Chromium dabei über die Schulter, ob ein "index.m3u8"-Request 
vorbeikommt. Von dem hätten wir dann gerne die URL.

Beitrag #6753875 wurde von einem Moderator gelöscht.
Beitrag #6753877 wurde von einem Moderator gelöscht.
von Johannes U. (kampfradler)


Lesenswert?

PC schrieb:
> Hallo!
>
> Danke für den Tipp!
>
> Youtube-DL geht leider nicht.

Hast Du Dir mal die Optionen von Youtube-dl angeschaut?

Deinen Usecase kann ich nicht so richtig nachvollziehen, nach Deiner 
Beschreibung koennte YT-dl aber eventuell doch funktionieren:

Nimm z.B. das Streaming eines OeR-Senders, z.B. wdr

>https://www.ardmediathek.de/live/Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU/?toolbarType=default

Dann kannst Du Dir mit 'youtube-dl -F' die Formate ausgeben lassen:
(Ich hab mir die diversen youtube-dl Befehle mit den entsprechenden 
Schaltern als alias direkt ansprechbar gemacht)

youtube-dl -F 
https://www.ardmediathek.de/live/Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU/?toolbarType=default
[ARDBetaMediathek] Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU: 
Downloading JSON metadata
[ARDBetaMediathek] 21520924: Downloading m3u8 information
[info] Available formats for 21520924:
format code  extension  resolution note
hls-635-0    mp4        480x270     635k , avc1.77.30, 50.0fps, 
mp4a.40.2
hls-635-1    mp4        480x270     635k , avc1.77.30, 50.0fps, 
mp4a.40.2
hls-1130-0   mp4        640x360    1130k , avc1.4d401f, 50.0fps, 
mp4a.40.2
hls-1130-1   mp4        640x360    1130k , avc1.4d401f, 50.0fps, 
mp4a.40.2
hls-2120-0   mp4        960x540    2120k , avc1.4d401f, 50.0fps, 
mp4a.40.2
hls-2120-1   mp4        960x540    2120k , avc1.4d401f, 50.0fps, 
mp4a.40.2
hls-3990-0   mp4        1280x720   3990k , avc1.640020, 50.0fps, 
mp4a.40.2
hls-3990-1   mp4        1280x720   3990k , avc1.640020, 50.0fps, 
mp4a.40.2 (best)

Danach das gewuenschte Format auswaehlen und mit -f und -g dann die URL 
aus dem Manifest extrahieren:

youtube-dl -f hls-3990-1 -g 
https://www.ardmediathek.de/live/Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU/?toolbarType=default

https://derste247livede.akamaized.net/hls/live/658317-b/daserste_de/master_1280p_3628.m3u8

Das liesse sich bestimmt auch automatisieren.

Beitrag #6753957 wurde von einem Moderator gelöscht.
von X. H. (shadow0815)


Lesenswert?

Εrnst B. schrieb:
> Im Anhang eine Quick-n-Dirty Lösung

Das ist node.js javascript code
Bei mir installiert: node v9.9.0
1
mkdir ~/node_hu; cd ~/node_hu
2
wget "https://www.mikrocontroller.net/attachment/524008/index.js"
3
wget "https://www.mikrocontroller.net/attachment/524009/package.json"
4
npm install  # will install deps from package.json into project folder
5
node index.js https://m4sport.hu/rovatok/tokio2020/

GEHT NICHT:
1
/home/guest/node_hu/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js:247
2
    for await (const chunk of readable) {
3
        ^^^^^
4
5
SyntaxError: Unexpected reserved word
6
    at new Script (vm.js:51:7)
7
    at createScript (vm.js:136:10)
8
    at Object.runInThisContext (vm.js:197:10)
9
    at Module._compile (module.js:613:28)
10
    at Object.Module._extensions..js (module.js:660:10)
11
    at Module.load (module.js:561:32)
12
    at tryModuleLoad (module.js:501:12)
13
    at Function.Module._load (module.js:493:3)
14
    at Module.require (module.js:593:17)
15
    at require (internal/module.js:11:18)

von Εrnst B. (ernst)


Lesenswert?

X. H. schrieb:
> Bei mir installiert: node v9.9.0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of

Deine Version ist zu alt, die v10.0.0 könnte es. Aktuell im 
Long-Term-Support wäre die v14-Reihe. Geh gleich auf die, notfalls eine 
v12 (die hat noch bis April 2022 Support).
https://nodejs.org/en/about/releases/

> node index.js https://m4sport.hu/rovatok/tokio2020/

Mein "quick-n-dirty" Beispielprogramm nimmt keine 
Kommandozeilen-Parameter. Das musst du selber nachrüsten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.