Mehrfachvideo mit Gstreamer

Der wetter meinte neulich, es könnte doch ganz nützlich sein, mehrere Videostreams in einem Container zu verkapseln; auf diese Weise wäre es etwa bei Vorträgen möglich, eine Ansicht mit Folien und eine weitere mit den Dozenten zu haben. Glücklicherweise geht das tatsächlich.

Um ein derartiges Video zu erhalten, habe ich zunächst mit Gstreamer ein Testbildvideo produziert (dieser Blogeintrag war sehr hilfreich) und dieses dann mit Hilfe der oggz-tools auf 20 Sekunden geschnitten und mit einem von mir vorher aufgenommenen Video zu einem zweispurigen Video (Download) gemixt:

gst-launch-0.10 videotestsrc ! video/x-raw-yuv,width=640,height=480 ! ffmpegcolorspace ! theoraenc bitrate=500 ! oggmux ! filesink location=testbild.ogv ^C oggz-chop -o testbild-20s.ogv -e 20 testbild.ogv oggz-merge -o testbild-stereo.ogv MD000410.ogv testbild-20s.ogv

Schneller kann man ein eigenes Video mit zwei Testbildern mit folgendem Pipelinemonster erstellen:

gst-launch-0.10 videotestsrc pattern=circular ! queue ! videorate ! video/x-raw-rgb,rate=15/1 ! ffmpegcolorspace ! theoraenc ! oggmux name=mux ! filesink location=testbild2.ogv videotestsrc ! queue ! videorate ! video/x-raw-rgb,rate=15/1 ! ffmpegcolorspace ! theoraenc ! mux. ^C

Testweise abspielen kann man dieses dann wiederum mit:

gst-launch-0.10 filesrc location=testbild2.ogv ! decodebin name=d ! queue ! xvimagesink d. ! queue ! xvimagesink

Ein praktisches Problem derartiger Dateien ist die Behandlung der Videostreams durch gewöhnliche Abspielsoftware, die im Allgemeinen davon ausgeht, dass verschiedene Streams gleichen Typs nicht gleichzeitig abgespielt werden sollen: Nur VLC media player öffnet für jeden Videostream ein weiteres Fenster, während Totem, mplayer und Webbrowser mit Unterstützung für das <video/>-Element jeweils immer nur einen der beiden Videostreams anzeigen — im besten Fall ist ein Wechsel des abgespielten Streams möglich, ähnlich dem Wechsel der ausgewählten Audiospur.

Das obige, mit oggz-merge erstellte Video ist laut oggz-validate leider nicht valide, ein guter Grund für ein Abspielprogramm, den Dienst zu verweigern. Ein valides, mit der Gstreamer-Monsterpipeline erstelltes Video findet ihr hier.

Ich werd nicht mehr: Das valide Video wird zwar immer noch von der passenden Gstreamer-Pipeline abgespielt, VLC hingegen stürzt in den meisten Fällen ab — oder versagt sowas von komplett

So, das valide Testvideo hat jetzt zwei unterschiedliche Streams, einer zeigt jetzt konzentrische Kreise. Nur, damit niemand verwirrt wird.

12. März 2010 von erlehmann
Kategorien: Bastelei, Software, Video | Schlagwörter: , , , , , | 3 Kommentare

Kommentare (3)

  1. Gnaah, ich hatte hier einen längeren Text, dein Spamdings hat ihn gefressen.

    Kurzfassung: VLC ist von dem was im Menü steht auch nicht darauf ausgelegt, beide Streams auszugeben; zudem ist das Verhalten der beiden Fenster sehr erratisch, vor allem bei Vollbild (unter OS X). MPlayer OS X Extended zeigt gar kein Bild.

    Relatiert: ein PDF-„Video“-Codec wäre praktisch für Folien.

  2. Die Validität ändert bei mir nichts. MPlayer streikt, VLC agiert strange.

  3. Ich hab das ganze vor einiger Zeit auch mal in nem MP4 Container probiert. Ähnliche Ergebnisse: nur VLC spielt das richtig mit zwei Fenstern ab.
    Die dazu benutze Commanline: MP4Box -new -add camera.mp4#video -add slides.mp4#video -add camera.mp4#audio cobinded.mp4
    Webplayer hab ich nicht wirklich ausprobiert.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert


Before you post, please prove you are sentient.

Was ist der Vorname von Franz Beckenbauer?