Gstreamer, FFmpeg - wo anfangen?

Sound, Digitalkameras, TV+Video und Spiele.
Antworten
Kolibri
Beiträge: 37
Registriert: 03.06.2021 21:27:26

Gstreamer, FFmpeg - wo anfangen?

Beitrag von Kolibri » 07.06.2021 21:29:00

Hallo,

ich habe mir kürzlich einen Grundstock in Sachen Debian gelegt (Buster Standard-Systemwerkzeuge + gnome-core) und bin nun bei der Videowiedergabe angelangt. :o Totem kommt mit Gnome ja bereits mit und funktioniert so weit auch ganz passabel. Allerdings habe ich auch nach einiger Forenrecherche noch nicht ganz verstanden, welches dieser ganzen Gstreamer sinnvoll sind und ob FFmpeg ein alternatives Konzept oder eine Ergänzung ist.

Also grundsätzlich ist meine Frage: Welches Paket benötige ich für die Wiedergabe von mkv und mp4? Die Konsole sagt mir, dass Totem ein Gstreamer-Plugin vermisst:

Code: Alles auswählen

gstreamer|1.0|totem|H.264 (Main Profile)-Decoder|decoder-video/x-h264
. Aber welches genau? Es scheint da gstreamer1.0-libav und gstreamer1.0-plugins-bad zu geben. Braucht man beide, ist eins vorzuziehen?

Und meine zweite Frage wäre: mpv nutzt FFmpeg statt Gstreamer, d. h., Totem und mpv nutzen einfach zwei unterschiedliche Frameworks, oder? Ist da ein Framework dem anderen vorzuziehen?

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Gstreamer, FFmpeg - wo anfangen?

Beitrag von smutbert » 07.06.2021 22:22:20

gstreamer ist ein Framework für die (De-)Kodierung, Ein-/Ausgabe und Manipulation von Audio- und Videodatenströmen. Oft stehen für ein Format mehr als ein gstreamer-Modul zur Auswahl. Wenn nicht gerade eines der Module kaputt ist und nicht funktioniert, was auch gelegentlich vorkommt, ist es egal welches davon man oder ob man gar mehrere installiert hat.
Die einzelnen gstreamer-Module nutzen (zumindest zum Teil) weitere Bibliotheken für die eigentlichen Funktionen, so nutzt gstreamer1.0-libav zum Beispiel libav bzw. ffmpeg.

Denn bei libav ist die Situation von der Entwicklung her wieder etwas unübersichtlich:

ffmpeg war (und ist) ein verbreitetes und mächtiges Kommandozeilenprogramm zum Konvertieren, Schneiden,... von Audio und Videodaten und hatte seine eigene Bibliothek, die unter anderem auch von einem gstreamer-Modul genutzt wurde. Nach ein paar Unstimmigkeiten wurde ein Fork des ffmpeg-Projekts erstellt und zwar av/avconv/av-tools mit der libav.
Viele sind auf diesen Fork umgestiegen und so ist es auch zu dem gstreamer-Modul gstreamer1.0-libav gekommen.
Später hat sich dann aber doch wieder ffmpeg durchgesetzt und die vielen libav-Pakete in Debian stammen jetzt aus dem ffmpeg-Projekt.


Schlanke Programme wie mpv verwenden zum Dekodieren von Audio-/und Videodateien oft direkt Bibliotheken wie libav/ffmpeg.
Umfangreichere Programme oder solche, die zu einer ausgewachsenen Desktopumgebung gehören nutzen dagegen oft Frameworks wie gstreamer. Unter Gnome schafft man es beispielsweise ohnehin nicht auf gstreamer zu verzichten und hat, wenn man totem nutzt, den Vorteil, dass es gut in die Desktopumgebung integriert ist.
Andererseits würde ich, wenn ich nur einen schlanken Windowmanager und keine Desktopumgebung nutze, eher auf ein schlankes Programm wie mpv zurückgreifen.
(Es gibt aber bestimmt auch genügend Gründe das genau umgekehrt zu machen – jeder hat da seine Vorlieben.)

Kolibri
Beiträge: 37
Registriert: 03.06.2021 21:27:26

Re: Gstreamer, FFmpeg - wo anfangen?

Beitrag von Kolibri » 09.06.2021 12:54:37

Danke für die ausführliche Erklärung. :)

Das beutet, dass gstreamer1.0-plugins-bad in diesem Fall das geeignete Paket ist und gstreamer1.0-libav eher als Alternative für FFmpeg-Bibliotheken, die gstreamer evtl. benötigt?
smutbert hat geschrieben: ↑ zum Beitrag ↑
07.06.2021 22:22:20
[...] wenn man totem nutzt, [hat man] den Vorteil, dass es gut in die Desktopumgebung integriert ist.
Inwiefern äußert sich das? Durch weniger zusätzliche Abhängigkeiten? Ich habe unter meinen bisher genutzten Distributionen auch mpv verwendet und fand den gut. Vor allem unterstützt er die zusätzlichen Steuerungstasten meiner Tastatur, was Totem nicht tut.

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Gstreamer, FFmpeg - wo anfangen?

Beitrag von smutbert » 09.06.2021 18:16:38

Kolibri hat geschrieben: ↑ zum Beitrag ↑
09.06.2021 12:54:37
Das beutet, dass gstreamer1.0-plugins-bad in diesem Fall das geeignete Paket ist und gstreamer1.0-libav eher als Alternative für FFmpeg-Bibliotheken, die gstreamer evtl. benötigt?
Nicht ganz. Beide Pakete bieten die Dekodierung von h264, nutzen dafür aber unterschiedliche Bibliotheken.
Bei der Recherche welches Paket welche Bibliotheken nutzt, helfen die Abhängigkeiten der Pakete:
  • Debiangstreamer1.0-libav hängt vor allem von den libav-Paketen ab, z. B. von Debianlibavcodec58, das ist der Teil von libav, der zum Kodieren und Dekodieren der von libav unterstützten Medienformate dient. (Dass in Debian (lib)ffmpeg hinter libav steckt habe ich ja bereits erwähnt.)
    Du erschlägst hier also mit relativ überschaubaren Abhängigkeiten auf einen Schlag viele der üblichen Audio- und Videoformate.
  • Debiangstreamer1.0-plugins-bad dagegen ist eine Sammlung vieler gstreamer-Module, die für unterschiedliche Formate unterschiedliche Bibliotheken nutzen. Das sieht man auch an den zahlreichen Abhängigkeiten, die das Paket hat.
    Welche der vielen Abhängigkeiten für h264 genutzt wird, kann ich erkennen. Das bad im Namen bedeutet übrigens, dass diese gstreamer-Plugins den einen oder anderen (allerdings vermutlich harmlosen) Mangel haben.
(Ich würde gstreamer1.0-libav bevorzugen, auch weil ffmpeg ein sehr nützliches Kommandozeilentool ist, das ich sowieso installiert habe.)
Kolibri hat geschrieben: ↑ zum Beitrag ↑
09.06.2021 12:54:37
Inwiefern äußert sich das? Durch weniger zusätzliche Abhängigkeiten? Ich habe unter meinen bisher genutzten Distributionen auch mpv verwendet und fand den gut. Vor allem unterstützt er die zusätzlichen Steuerungstasten meiner Tastatur, was Totem nicht tut.
Weniger Abhängigkeiten eher nicht, obwohl es bei der Nutzung von Gnome und Gnome-Programmen viele Überschneidungen bei den Abhängigkeiten gibt. Wenn also schon viel von Gnome installiert ist, braucht totem vielleicht sogar tatsächlich weniger zusätzliche Pakete als ein anderer Videoplayer.

Die Integration merkt man an vielen Stellen. Gnome-Programme halten sich beispielsweise weitgehend an die „Human Interface Guidelines“ [1] und sehen sich daher meist ähnlich.

Gerade bei totem fällt mir sonst auf Anhieb die für gnome typische Nutzung von gstreamer ein. (Das bedeutet immerhin, dass es bei Gnome-Programmen keine bösen Überraschungen in der Art geben sollte, dass totem ein Audioformat unterstützt und rhythmbox oder gnome-music oder gnome... nicht oder umgekehrt.)
gvfs wäre ein weiteres Beispiel für diese Integration. gvfs ermöglicht den Gnome-Anwendungen den Zugriff auf Dateien über diverse Protokolle (ftp, ssh/sftp, mtp,...), was mit nicht-Gnome-Anwendungen nur über Umwege (gvfs-fuse) klappt.
Ausgerechnet die Unterstützung der Multimediatasten wäre noch so etwas (glaube ich): Wenn ich jetzt nicht ganz falsch liege, weiß Gnome über eventuelle (Gnome-)Medienwiedergabeprogramme bescheid und sendet diese Tastendrücke an die richtige Anwendung, auch wenn sie im Hintergrund läuft. (Da wäre es vielleicht interessant was du für eine Tastatur hast und welche Tasten sie bietet, die mit totem nicht funktionieren.)
In Gnome-Programmen ist meist auch tracker für die Suche und zeitgeist integriert – letzteres zeichnet auf welche Programme wann gelaufen sind und welche Dateien geöffnet waren, das wird auch für jede Menge Funktionen genutzt, ich glaube zum Beispiel für die angezeigte Nutzungshäufigkeit von Programmen in Debiangnome-software.


[1] https://developer.gnome.org/hig/stable/

Kolibri
Beiträge: 37
Registriert: 03.06.2021 21:27:26

Re: Gstreamer, FFmpeg - wo anfangen?

Beitrag von Kolibri » 09.06.2021 22:32:12

Ich bin wirklich begeistert über diese ausführlichen Antworten und Erklärungen! :) Ich habe es nun erst mal mit gstreamer1.0-libav probiert, wobei es sich ein Großteil der Abhängigkeiten mit gnome-mpv teilt.

Die Tastatur ist ein so ein Standardgerät von Cherry mit zusätzlichen Tasten für die Lautstärkeregelung (die funktionieren) und die Mediensteuerung (vor und zurück sowie Wiedergabe und Pause). Letztere funktionieren nicht mit Totem, aber mit audacious. Auf einem älteren Laptop von Lenovo ist das aber auch so. :wink:

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Gstreamer, FFmpeg - wo anfangen?

Beitrag von smutbert » 09.06.2021 23:42:13

Wiedergabe/Pause sollte mit totem auf jeden Fall auch funktionieren (vor und zurück wahrscheinlich auch), allerdings ist dafür glaube ich Debiantotem-plugins notwendig - eventuell fehlt das bei dir?

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: Gstreamer, FFmpeg - wo anfangen?

Beitrag von wanne » 10.06.2021 06:25:10

Achtung: Die libarys von ffmpeg hießen schon immer libav. Dass sich dann der Fork von ffmpeg ebenfalls libav nannte war, wie einige ander Benennungen im Projekt sehr unglücklich.
Wenn gstreamer also von libav redet dann meinen sie die library vom ffmpeg. Das Backend hießt auch schon länger so als es den Fork unter dem Namen gibt. Heute ist es Wurst ob du dem gstreamer die orginal libavs aus dem ffmpeg oder die aus dem libavprojekt gibst ist dem reichlich Wurst. – Machen ja schließlich das gleiche. Er nutzt halt die, die da ist.

Zur Funktionalität von gstreamer:
So ein Video abspielen (oder konvertieren oder übers Netzwerk Streamen) ist ein relativ komplizierter Prozess, der aus vielen Einzelschritten besteht, die dir üblicherweise das Betriebssystem bereitstellt.
Hier mal ein dummes Beispiel:
https://upload.wikimedia.org/wikipedia/ ... peline.svg
Wenn du also einen Videoplayer baust musst zuerst die Datei aufmachen und entsprechend wissen wie das geht. (Du musst das nicht alle Dateisystemoperationen selber machen aber du musst wenigstens wissen wie sowohl unter Linux wie auch unter Windows, iOS... dazu anweist das für dich zu machen.)
Dann willst du da den Audio und den Videostream raus holen. => Du musst wissen wie man mkv, avi, mp4 etc. öffnet.
Dann willst du beides dekomprimieren. Auch das machen die Videoplayer nicht selbst: Wenn da AV1 komprimiert ist, nimmt er eventuell die libdav1d, wenn da AAC drin ist benutzt er die libfdk für h.264 eventuell direkt nvdec der Nvidia-Grafikkarte... Aber er muss dann wenigstens wissen, wie man libdav1d libfdk usw. nutzt.
Dann muss er das Audio wiedergeben. Dazu muss er aber wissen wie man pulseaudio und alsa und das Windows equivalent nutzt...
Du merkst: Das wird schnell unübersichtlich.
Apple machte da den ersten Ansatz der Vereinheitlichung mit QuickTime Windows zog nach Direct Media (Heute Windows Media SDK): Statt sich je nach bedarf mit diversen Einzelkomponenten auseinanderzusetzen sagte man einheitlich: Ich will XY decodieren. Kümmere dich mal darum den richtigen Codec zu nutzen. Leider war das insbesondere unter Windows in den 00ern eine ziemliche Totalkatastrophe. Windows selbst brachte kaum libraries mit und so nutzten die APIs es häufig fehlerhafte von Drittanbietern. VLC, mplayer und ffmpeg giengen dazu über alles möglichst selbst (und besser) zu machen. Schnell wurde klar dass es attraktiv ist, diese besser funktionierenden Funktionen auch für andere Programme zur Verfügung zu stellen um eine Alternative zur kaputten Windows API zu haben. (Die auch noch nur unter Windows verfügbar war) Später kamen KDE und GNOME ihre eigenen universellen Schnittstellen gstreamer und Phonon dazu. Vor allem mussten aber auch die Riesenprojekte einsehen, dass sie doch nicht alles selber neu erfinden können.
Und so lernte der VLC Player doch den ffmpeg zu nutzen, wenn er irgend etwas nicht aber der ffmpeg gut decodiern konnte. Und der ffmpeg den gstreamer und der gstreamer ffmpeg....
Und so nutzen die meisten Programme zwar eine universelle Schnittstelle bekommen aber über diesen Umweg die Funktionalität der anderen mit und so kannst du oft über 5 verschiedene Wege an der libfdk landen.– Viele Programme lassen dir die Wahl welchen du gehst bzw. ob du den überhaupt installieren willst. Zum decodieren von avis nutzt aber jede Schnittstelle wirklich ihre eigene Funktionalität.
Wenn du also fragst, ob das eine Alternative oder eine Ergänzung ist, lautet die Antwort sowohl als auch: Haben beide Schnittstellen die Funktionalität selbst implementiert ist es eine Alternative. Kann es nur eine ergänzen sie sich.
rot: Moderator wanne spricht, default: User wanne spricht.

Kolibri
Beiträge: 37
Registriert: 03.06.2021 21:27:26

Re: Gstreamer, FFmpeg - wo anfangen?

Beitrag von Kolibri » 11.06.2021 18:18:20

Ja, das habe ich schon bemerkt. Aber so lernt man etwas. :wink:

Antworten