Video Download Helper Alternative auf der Kommandozeile

Gast #6750924
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!
#6750972
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.
Gast #6752516
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!
#6752664
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.
#6753683
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.
Angehängte Dateien:
Beitrag #6753875 wurde von einem Moderator gelöscht.
Beitrag #6753877 wurde von einem Moderator gelöscht.
#6753928
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.
#6777477
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)
#6777967
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren