zeitgesteuerte Aufnahme eines Livestreams mit mpv (eure Ideen)

  • Hallo,

    wie macht Ihre zeitgesteuerte Aufnahmen eines Livestreams mit mpv?

    Früher habe ich das mal so gemacht:

    Code
    #Beispiel
    echo timeout 120 mpv --vid=3 --aid=3 https://mcdn.ndr.de/ndr/hls/ndr_fs/ndr_sh/master.m3u8 --no-resume-playback --stream-record=ndr_1080.ts | at 08:50 24-02-22

    Was mir ziemlich umständlich scheint. Meistens starte ich die Aufnahme weit vor Beginn der Sendung und lass den Rechner per KShutdown zeitgesteuert herunterfahren. Was auch prima klappt. Den Rest erledigt Avidemux.

    Und wie macht Ihr das so?

    Gesucht wird eine Möglichkeit die mir während der Aufnahme sowohl das Terminal und den Player anzeigt:

    Ich schau nämlich gelegentlich gern nach ob es funktioniert.

  • Go to Best Answer
  • Und wie macht Ihr das so?


    Wenn bisher noch keiner auf Deinen Startpost reagiert hat, liegt es möglicherweise daran, dass Du selber schon der Top-Experte hier auf diesem Gebiet bist. Heißt also, Du kannst vermutlich nichts von uns lernen, höchstens umgekehrt wir von Dir.

    Bei mir sieht die Sache derzeit so aus: Über dieses Forum bin ich auf das Programm 'IPTV Recorder' von Maik Walter gestoßen und benutze es seitdem. Anschauen kann ich alles wie in Hypnotix und noch ein paar Sachen mehr (u.a. Mediatheken, Youtube, Radio). Dazu kommt EPG-Integration und (zeitgesteuerte) Aufnahme von ÖR-Sendern (bzw. von Sendern, die analog dem ÖR eine öffentlich bereitgestellte Streaming-Url verwenden).

    Darüber hinaus verspüre ich immer noch Reste eines kindlichen Spieltriebs. Welche mich dazu verführt haben, auch mal eine script-gesteuerte Aufnahme auszuprobieren. Im Zusammenhang mit dem IPTV-Recorder-Thread hattest Du dafür schon mal ein Befehlsbeispiel abgedruckt (Post #6/10). Ich hatte mir aber zunächst die Frage gestellt, wie stoppt man eigentlich so eine Live-Aufnahme? (Ganz anders als ich mir das in der Theorie vorgestellt hatte; s.u.)

    Im Internet (bzw. im Terminal) finden sich zwar sämtliche Befehlsoptionen von MPV, aber kein wirklich brauchbares Tutorial zur Aufnahmefunktion von MPV. Daher hatte ich mal direkt die KI im Brave-Browser befragt:
    "Wie kann ich unter Linux mit MPV-CLI-Kommandos die Aufnahme eines Live-Streams starten und stoppen?"

    Daraufhin kamen einige Erklärungen und das Angebot eines fertigen Demo-Scripts. Das habe ich mir denn auch prompt zeigen lassen. Das Script macht einen äußerst plausiblen Eindruck. Allerdings waren trotzdem mindestens drei Fehler drin. (Kunststück, warum sollte es einer KI da besser ergehen als einem menschlichen Programmierer!)
    - Fehler Nummer 1: eine der genannten (aber nicht essentiellen) Befehlskomponenten war bloß 'halluziniert' (so nennt man das ja wohl, wenn eine KI einem was erzählt, was es gar nicht gibt).
    - Fehler Nummer 2: die Parameter für die Ausgabe stimmen so nicht. Ich sehe das hier im Vergleich zu Deinem Befehlsbeispiel. (das KI-Script verwendet --stream-dump statt --stream-record).
    - Fehler Nummer 3: die gespeicherte Ausgabedatei (MKV im KI-Script) enthält nur ein ca. 2 KB großes Text-Info mit Stream-Parametern

    Fünf Minuten sollte mir das Script im ersten Testlauf aufnehmen. Aber diese Zeit schöpfte das Script nicht mal ansatzweise aus. Es signalisierte schon nach weniger als einer Sekunde, dass es fertig sei. Diese Zeit hatte es gebraucht, um Textinhalte des M3U8-Streams als Datei zu speichern. Das war aber nicht das, was ich haben wollte =O
    Genauer gesagt: unmittelbar nachdem das MPV-Kommando inklusive der Parameter innerhalb des Scripts abgeschickt worden ist, kommt sofort die Meldung von MPV:
    "Exiting... (End of file)"
    Das Script vermag daher auch keine PID für MPV mehr zu benennen, weil schon zuende.

    Das von Dir vorgeschlagene Befehlsbeispiel:
    mpv https://mcdn.ndr.de/ndr/hls/ndr_fs/ndr_mv/master.m3u8 --no-resume-playback --stream-record=ndr.ts
    funktioniert dagegen. Aber anders als erwartet. MPV öffnet ein Wiedergabefenster und nimmt die Sendung zusätzlich im TS-File auf. Dann kann man natürlich die Aufnahme jederzeit stoppen, indem man einfach das Ausgabefenster schließt.

    Beabsichtigt aber wäre gewesen, dass MPV im Hintergrund startet (ohne Video-Ausgabe) und die Sendung aufnimmt, um nach Unterschreiten des Count-Down-Zählers die Aufnahmedatei automatisch zu schließen.
    (Was uns das ECHO-Kommando hier im Startpost sagen soll, kapiere ich als blutiger Laie in der kompakten Form jedenfalls nicht. 2 Minuten ab einem festen Startzeitpunkt? Aber wie?)

    Tja, vielleicht solltest Du diesen Thread zu einem Mini-Tutorial umfunktionieren, wie man mithilfe von MPV-Optionen, Aufnahmen von freien IPTV-Quellen optimiert hinbekommt.

    - Was ist zu tun, damit MPV sofort (oder zu einem späteren Zeitpunkt) im Hintergrund aufnimmt und stoppt, wenn die Endzeit (bzw. die programmierte Dauer) erreicht wurde?
    - Vorschläge zu verfügbaren Qualitätsformaten für Audio und Video liefert MPV selbst schon bei Start der Aufnahme. Gibt es sonstige nützlich Optimierungen?

  • Gute Idee.

    Die Frage ist nur,wenn es öffentliche Sender sind, dann bekommst du alles aus der Mediathek. Was soll ich da noch Rechner hoch fahren und Scripte programmieren.Kommt es zu Verbindungsproblemen , dann ist die Aufnahme eh defekt.Dann noch Nachbearbeitung mit Avidemux..

  • harihegen

    Danke für den Tipp. Das muss ich mir mal demnächst mal genauer ansehen.

    Hatte zuvor immer gedacht das man hierfür eine TV Karte benötigt.

    Geht aber auch mit https

    Code
    #EXTINF:-1,Mein Kanal
    pipe:///usr/bin/ffmpeg -i "http://dein.m3u8/link" -c copy -f mpegts pipe:1
  • Gute Idee.

    Die Frage ist nur,wenn es öffentliche Sender sind, dann bekommst du alles aus der Mediathek.

    Nein, zum Beispiel Spielfilme aus anderen Ländern werden nur zur Sendezeit gesendet und sind nicht in der Mediathek zu sehen. Rechtliche Gründe.

    Display Spoiler

    Notebook1: AMD Ryzen 7 8845HS, 48GB RAM, 2TB SSD, Debian 13 xfce
    Spiele PC: AMD Ryzen 9 5900XT, 64GB RAM, 4TB SSD, Debian 13 KDE
    Büro 1 PC: Intel Core Ultra 5 125U, 32GB RAM, 3TB SSD, Tuxedo OS

  • Hatte zuvor immer gedacht das man hierfür eine TV Karte benötigt.

    Geht aber auch mit https

    Code
    #EXTINF:-1,Mein Kanal
    pipe:///usr/bin/ffmpeg -i "http://dein.m3u8/link" -c copy -f mpegts pipe:1

    Das ist mir auch neu, ich verwende es mit einem Sat Receiver (SAT>IP) im Netzwerk. Letztendlich ist das aber auch nur ein Datenstrom.

    Display Spoiler

    Notebook1: AMD Ryzen 7 8845HS, 48GB RAM, 2TB SSD, Debian 13 xfce
    Spiele PC: AMD Ryzen 9 5900XT, 64GB RAM, 4TB SSD, Debian 13 KDE
    Büro 1 PC: Intel Core Ultra 5 125U, 32GB RAM, 3TB SSD, Tuxedo OS

  • uname
    Im Nachgang habe ich gerade noch ein bißchen recherchiert und bin dabei zu der Erkenntniss gekommen, dass der ECHO-Befehl nicht einfach nur eine Textausgabe generieren soll, sondern dass die beiden, enthaltenen Textsequenzen zwei Befehle darstellen, die als Parameter an ein Kommando namens 'at' abgeschickt werden sollen, wenn der geplante Zeitpunkt der Ausführung gekommen ist. (wenn 'at' auf dem System installiert ist.) Also doch zwei Minuten Aufnehmen!

    Heute habe ich gerade keine Zeit mehr. Aber das muss ich auf jeden Fall auch noch ausprobieren!


  • Ich bin gerade dabei, mich etwas in die Funktionalität des 'at'-Kommandos einzulesen. Für TV-Aufnahmen brauche ich es zwar nicht zwingend, da es halt per IPTV Recorder einfacher geht, aber für zeitgesteuerte Befehlsausführung im allgemeinen wäre das eine interessante Sache.

    Im Moment ist das Problem, dass 'at' zwar die projektierte Aktion notiert, aber zum gegebenen Zeitpunkt nicht ausführt (egal was). Im ATD-Protokoll heißt es stets nur "Exec failed for mail command". Dabei brauche ich eine Email-Benachrichtigung für's erste nicht unbedingt. Der Befehl soll einfach nur ausgeführt werden.

  • Ich würde das mal mit etwas einfachen probieren. Meinetwegen ein Record mit mpv.

    Der Job wird in

    Code
    xxxxx@debian:~$ sudo ls -lah /var/spool/cron/atjobs
    insgesamt 20K
    drwxrwx--T 2 daemon daemon 4,0K  9. Mär 12:56 .
    drwxr-xr-x 5 root   root   4,0K  9. Mär 12:55 ..
    -rwx------ 1 xxxxx daemon 4,2K  9. Mär 12:56 a0000101b2df41
    -rw------- 1 daemon daemon    6  9. Mär 12:56 .SEQ
    xxxxx@debian:~$ 

    gespeichert (Der Job ist noch nicht ausgeführt.)

    Die Zeil 5 ist von Bedeutung (mit cat ausgelesen), gleich:

    Code
    at -l
    35      Sat Mar  9 15:30:00 2024 a tuxracer 
    # und weiter mit
    at -c 35

    35 ist die Summer aller. Und at -c 35 zeigt Dir den Job an.

    Möglicherweise muss der Pfad zum Programm angegeben werden:

    /usr/local/bin/yt-dlp

    ! alles aus meiner Erinnerung heraus

  • Ich habe vorhin auch mal die KI zum Thema befragt.
    Also da hängt doch soviel drum und dran. Was es zu beachten gilt. Welche verschiedenen methodische Ansätze es gäbe. Für eine Aufgabe wie das Aufnehmen einer TV-Sendung wäre mir das entschieden zuviel Aufwand.

    Für mich bleibt es daher dabei: Aufnahme (sofern kein direkter Download aus der Mediathek möglich) macht sich für mich am einfachsten per GUI-Programm 'IPTV Recorder'.

    Aber zeitgesteuertes Ausführen von Programmaufgaben im Allgemeinen, das ist schon ein interessantes Gebiet, mit dem ich mich mal näher beschäftigen möchte. Was für lange Winterabende!

  • Ich habe mal just for Fun DeepSeek ein Python Script erstellen lassen, dass das macht was der TE möchte. Ist schon fast erschreckend wie das funktioniert. Hab an dem Script 2 Änderungen gemacht: Die Zeilen 255 und 256 auskommentiert damit gleichzeitig zur Aufnahme der Stream angezeigt wird. Also Script speichern, ausführbar machen und doppelklicken.

    Script:

  • uname June 2, 2026 at 6:35 PM

    Selected a post as the best answer.
  • Ich habe das Script von deepseek anpassen lassen: Die Dauer der Aufnahme war falsch und ein paar kleine Änderungen.

    Bild zeigt die Ausführung des Script während der Aufnahme:

    Die Rechte der Datei müssen noch angepasst:

    Code
    -rwxr-xr-x. 1 tux tux 14K  7. Jun 06:56 /home/tux/Schreibtisch/streamrecord.py

    Script:

    Viel Spaß

    URL zum deepseek Chat:

    https://chat.deepseek.com/share/8l3mjyio3y8zhxyoog

  • Gute Idee. Hab dann gleich auch noch mal zugeschlagen. Speichern und Anbieten einer Auswahl der schon genutzten Stream URLs.

    DeepSeek: https://chat.deepseek.com/a/chat/s/63787…35-29f465c56183

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!