FFMPEG Playlist mit Fehler: Non-monotonic DTS in output stream

SirLoading

Lt. Junior Grade
Registriert
Dez. 2021
Beiträge
395
Hallo zusammen,
einen schönen 2. Advent.

Ich kämpfe seit einigen Tagen mit einem Problem mit FFMPEG.
Ich habe eine Playlist, die permanent Videos aus einer Playlist abspielen soll.

Mein FFMPEG sieht so aus:
Code:
ffmpeg -re -f concat -safe 0 -i Playlist.txt -avoid_negative_ts make_zero -fflags +genpts -flvflags no_duration_filesize -codec copy -f flv RTMP

Mein Fehler:
Code:
Non-monotonic DTS in output stream 0:0; previous: 73974533, current: 45692675; changing to 73974533. This may result in incorrect timestamps in the output file.
changing to 73974533. This may result in incorrect timestamps in the output file.

Google hat mir Folgendes ausgespuckt:
-avoid_negative_ts make_zero
-fflags +genpts

Beides hat aber keine Abhilfe geschafft.
Die Videos sind aufgezeichnete Streams, die für einen 24/7 Streaming Kanal sind.
Die Videos sind alle mit den gleichen Einstellungen über Premiere Elements erstellt.

Es laufen ca. 19h Videos und dann wechselt es zum nächsten Video und bleibt mit dem Fehler hängen.
Wenn ich besagtes Video als erste File nutze, dann liegt es nicht daran.

Ich hoffe, mir kann jemand helfen.
Vielen Dank
Liebe Grüße
SirLoading
 
Hallo @jb_alvarado, also einfach?
Code:
-c:v libx264 -c:a aac

Twitch empfängt nur eine Bitrate von 1000k.
Habe nun die Bitrate angegeben und dazu min + max.

Hoffe, der Stream kommt mir so nicht in die Quere, wenn ich selbst dann den Stream anwerfe.

In ca. 20 h weiß ich, ob das geht.
Danke und einen guten Start in die neue Woche. :)
 
  • Gefällt mir
Reaktionen: jb_alvarado
Guten Morgen @jb_alvarado, leider hat das nichts gebracht.
Nach ca. 20 Stunden wieder die gleiche Fehlermeldung von FFMPEG.
 
Guten Morgen @SirLoading, bricht ffmpeg auch ab, oder kommt nur die Fehlermeldung?

Wann genau tritt der Fehler auf? Beim Übergang vom Vorletzten auf den Letzten Clip? Oder vom Letzten auf den Ersten? Normalerweise sollte man das reproduzieren können, ohne 20 Stunden warten zu müssen.
 
Ich lasse das über "SCREEN" laufen.
Wenn ich dann in den Screen gehe, dann rattert die Fehlermeldung non Stop durch.
Der Stream bleibt auch aktiv, nur schwarzes Bild.

Die Playlist hat aktuell 50 Streams.
Und nach ca. 20 Stunden wenn er von Video X auf Y springt, rutscht er in den Fehler.
Wenn ich die beiden Videos tausche, dann passiert es von Y auf X.

Wenn ich die Videos X und Y an den Anfang der Playlist setze, dann kein Problem, aber dann wieder nach ca. 20 Stunden gleiches Problem.
Und immer beim Übergang von einem zum anderen.

Habe die Videos neu durch Premiere laufen lassen und ausgetauscht.
Gleiche Problem.

Wenn ich die Playlist beschneide und unter den 20 Stunden bleibe, dann springt er vom letzten auf den ersten.

Ich habe insgesamt über 1000 Stunden Videos.
Aktuell nur ein Bruchteil auf dem Server.
 
Vielleicht wäre ffplayout was für dich. Das kannst du in einem "Folder Mode" laufen lassen, dabei spielt es den Inhalt eines Ordners ab, oder du hast die Möglichkeit Playlisten zu erstellen - entweder für jeden Tag eine neue, oder eine einzelne unendlich. Für den "Streaming Mode" werden zwei ffmpeg Instanzen gestartet, dadurch braucht es etwas mehr RAM und CPU, als eine Concat-Liste.

Wenn das für dich in Frage kommen würde, kann ich assistieren falls du wo hängst (ich bin der Entwickler davon).
 
jb_alvarado schrieb:
Vielleicht wäre ffplayout was für dich.
Kann ich das auf einem Linux Root Server laufen lassen?

jb_alvarado schrieb:
(ich bin der Entwickler davon)
Aha, klingt interessant. :D

Ich möchte mir, wenn ich mal die Zeit habe, ein Python Script bauen, was auf Twitch und Co. das Spiel / Kategorie ändert für jedes Video.
Hier hängt es aktuell an der Zeit, hoffe an Weihnachten Zeit zu finden.
Wobei ich aktuell daran hänge, Python mit ffmpeg auf den Server zu bekommen....

Nachtrag:
Hat ffplayout die Möglichkeit bei Video Änderung, ein Programm aufzurufen mit Übergabedaten?
 
Zuletzt bearbeitet:
SirLoading schrieb:
Kann ich das auf einem Linux Root Server laufen lassen?
Ja, ist hauptsächlich für Linux entwickelt worden. Man kann es auch ohne Webfrontend betreiben, allerdings braucht es das Frontend am Anfang einmal zum konfigurieren.
 
  • Gefällt mir
Reaktionen: SirLoading
jb_alvarado schrieb:
Ja, ist hauptsächlich für Linux entwickelt worden. Man kann es auch ohne Webfrontend betreiben, allerdings braucht es das Frontend am Anfang einmal zum konfigurieren.
Klingt interessant und mein Nachtrag:

SirLoading schrieb:
Nachtrag:
Hat ffplayout die Möglichkeit bei Video Änderung, ein Programm aufzurufen mit Übergabedaten?

Wenn das gehen würde, dann müsste ich nur ein Script bauen, was alles ändert und fertig :D
 
SirLoading schrieb:
Hat ffplayout die Möglichkeit bei Video Änderung, ein Programm aufzurufen mit Übergabedaten?:D
Sorry das verstehe ich nicht. Im Folder- und im Playlist-Mode können jederzeit Änderungen vorgenommen werden, das Playout berücksichtigt das. Bei Playlisten sollte natürlich nur Einträge geändert werden, die noch zukünftig sind. Der Folder-Mode registriert Löschen/Umbenennen/Hinzufügen von Dateien.
 
jb_alvarado schrieb:
Sorry das verstehe ich nicht.
Sry, da habe ich mich wohl etwas falsch ausgedrückt.

Mein Plan für meine Python-Script:
Video abspielen und Kategorie auf Twitch ändern.
Nächstes Video, entsprechende Kategorie auswählen.
usw.

Die Videos liegen im Format auf dem Server:
24-7Stream-File-2024-12-06_19-00-38-P0.mp4
24-7Stream-File-2024-12-06_19-00-38-P1.mp4
24-7Stream-File-2024-12-07_16-21-52-P0.mp4
Nun ist aber nicht in jedem Video die gleiche Kategorie.
Mal "Just Chatting", mal irgendein Spiel usw.

Nun wäre meine Frage, kann dein Programm, wenn es von Video X nach Y springt, dies irgendwie weitergeben?
z.B. ein "exec(python3 MyPythonScript.py <Parameter>)" oder ähnlich.

Dann könnte ich z.B. den Dateinamen der aktuellen Videofile weitergeben und das Script kann dann Titel + Kategorie anpassen für den Twitch Stream.

Ich habe mir dein Projekt mal angeschaut und finde das geil.
Eigentlich genau das, was ich suche, von der Grundfunktion.

Werde das am Wochenende mal installieren und testen. :)
 
SirLoading schrieb:
Nun wäre meine Frage, kann dein Programm, wenn es von Video X nach Y springt, dies irgendwie weitergeben?
z.B. ein "exec(python3 MyPythonScript.py <Parameter>)" oder ähnlich.
Ah ok. Ja in der Tat gibt es das, in den Einstellungen kann man ein Programm angeben das bei jedem Wechsel eines Clips aufgerufen wird. Hier ein Beispiel Python Script, dass den Input entgegen nimmt und verarbeitet.
 
  • Gefällt mir
Reaktionen: SirLoading
Guten Morgen @jb_alvarado.
Also an alles gedacht. :heilig:
Das würde mir einiges an Arbeit abnehmen, Danke. :)

Hätte dann noch eine Frage zum Video Wechsel.
Wenn das Video von A nach B wechselt, wird dann der Stream kurz unterbrochen oder läuft das am Stück durch?
Und wenn vom letzten Video auf das erste gesprungen wird?
 
Guten Morgen @SirLoading
SirLoading schrieb:
Wenn das Video von A nach B wechselt, wird dann der Stream kurz unterbrochen oder läuft das am Stück durch?
Und wenn vom letzten Video auf das erste gesprungen wird?
Wenn der Output im Stream-Mode eingestellt ist gibt es keine Unterbrechungen.

Du hattest oben noch von deinem Root-Server gesprochen: Rein aus Prinzip heraus würde ich persönlich ffplayout in einem Container, oder einer VM laufen lassen, wenn das Webfrontend aktiv ist. Benutzer die sich dort einloggen erhalten Dateizugriff, auch wenn dieser begrenzt ist, kann es doch potenziell zu Schwachstellen führen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: SirLoading
Container finde ich eine feine Sache.
Nur nutze ich dafür lieber Portainer, das ist auf einem Root auch doof.

Müsste das dann erstmal anschauen wie das ohne Portainer geht.

Webfrontend brauche ich eigentlich gar nicht.
Würde ich dann eh abschalten, das sollte ja gehen, wenn ich das richtig verstanden habe.
 
SirLoading schrieb:
Webfrontend brauche ich eigentlich gar nicht.
Würde ich dann eh abschalten, das sollte ja gehen, wenn ich das richtig verstanden habe.
Ja das geht, dazu muss das Programm mit dem Parameter --foreground ausgeführt werden. Dazu müsste der Systemd Service angepasst werden. Die Konfiguration ist in einer Sqlite DB gespeichert, um die zu verändern braucht man dann entweder einen SQL Editor, oder das Frontend.
 
  • Gefällt mir
Reaktionen: SirLoading
Das macht dann nur ein Codec Copy?
Dann kann ich bestimmt 2 laufen lassen wenn ich das im Docker laufen lassen?

Dann schaue ich mir am WE Mal das Docker Thema an.
 
SirLoading schrieb:
Das macht dann nur ein Codec Copy?
Es gibt einen experimentelle copy- Modus, aber den würde ich nicht empfehlen. Im normalen Betrieb wird es neu encoded.
SirLoading schrieb:
Dann kann ich bestimmt 2 laufen lassen wenn ich das im Docker laufen lassen?
Es gibt auch eine "Multi-Channel" Konfiguration, damit kann man mehrere unabhängige Streams steuern.
SirLoading schrieb:
Dann schaue ich mir am WE Mal das Docker Thema an.
KVM würde auch gehen, damit betreibe ich das. Overhead ist minimal.
 
  • Gefällt mir
Reaktionen: SirLoading
jb_alvarado schrieb:
Es gibt einen experimentelle copy- Modus, aber den würde ich nicht empfehlen.
Ok.

jb_alvarado schrieb:
Kann ich damit 2 Streams, die unabhängig sind laufen lassen?
Also:
  • Stream 1 > Wiederholungen aus Ordner: X
  • Stream 2 > Andere Videos aus Ordner: Y
 
Zurück
Oben