Video schrittweise aus eingehenden JPEG-Bildern erstellen

1269
Kevin Ivarsen

Ist es möglich, ein JPEG-Bild (oder eine kleine Anzahl von Bildern) an ein Video anzuhängen, während die Bildqualität und die Komprimierung erhalten bleiben? Ich habe ein Skript, das alle 30 Sekunden ein JPEG-Bild von einer Webcam herunterlädt. Ich kann aus diesen Frames ein Video mit ffmpeg oder mencoder erstellen, zB:

ffmpeg -f image2 -i %d.jpg out.swf 

Ich möchte dieses Video auf dem neuesten Stand halten, wenn neue Frames eingehen, aber ich möchte nicht, dass der Computer so häufig das gesamte Video neu codiert. Ich mache mir auch Sorgen, dass ffmpeg / mencoder mit nur einem einzigen Frame aus neuen Daten etwas intelligentes macht. Wird es beispielsweise versuchen, jedes neue Frame zu einem Keyframe zu machen (wodurch das Video unnötig groß wird)?

Jede Einsicht darüber, wie dies sinnvoll zu tun ist, würde sehr geschätzt.

3

2 Antworten auf die Frage

1
CarlF

Warum möchten Sie es einzeln bauen? Wie hilft dir das? Warum sollte Ihr Skript das Video nicht alle 15 Minuten (30 Frames) oder etwas Vernünftigeres neu erstellen?

SWF ist ein ungewöhnliches Dateiformat für die Videoausgabe. Im Allgemeinen können Sie dem Ende von SWF- (oder FLV-) Filmen kein einzelnes Bild hinzufügen, da dies einen zustandsbehafteten Kompressor erfordert. Der Kompressor muss im RAM verbleiben und sich den Status des letzten Keyframes und aller Interframes merken Komprimierung erfolgt seitdem, um den nächsten Frame zu codieren.

Wenn Sie aus irgendeinem Grund unbedingt ein Bild am Ende Ihres laufenden Videos hinzufügen müssen, verwenden Sie MPEG 1. MPEG 1-Video ist nur eine Folge von Einzelbildern ohne Interframe-Komprimierung, sodass Sie jedes JPEG und nur JPEG komprimieren können Katze es bis zum Ende der laufenden Arbeit. Das Ergebnis ist natürlich eine riesige, nach heutigen Maßstäben schlecht komprimierte Datei.

Ich wollte das Video immer nur ein Frame (oder ein paar Frames) gleichzeitig erstellen, um das Video auf dem neuesten Stand zu halten, ohne die CPU ständig zu überlasten. Dieses Projekt könnte sich auf mehrere Video-Feeds erstrecken, daher wollte ich auf Effizienz achten. Das Video wird zur Wolkenüberwachung an einem astronomischen Observatorium verwendet, weshalb ich es so aktuell wie möglich halten wollte. Höchstwahrscheinlich werde ich einen Kompromiss eingehen, indem ich zwei Videos mache - ein häufig aktualisiertes Video mit nur den letzten 30 Minuten und ein weniger häufig aktualisiertes Video mit den letzten 24 Stunden. Ich war nur neugierig, ob Frame-on-a-Time möglich ist. Kevin Ivarsen vor 14 Jahren 1
Sie können ein Skript ausführen, um die letzten 300 JPEG-Bilder alle 15 Minuten in einem 30-Sekunden-FLV-Video (mit 10 Bildern pro Sekunde) zu kombinieren. Sie können auch eine Flash-SWF-Datei schreiben, die alle Filme einer Stunde oder eines Tages nacheinander abspielt, so dass sie für den Betrachter wie ein einzelner Film aussehen. Kein Sumpf. Wenn Sie Lust haben wollen, schreiben Sie ein Skript, das alle Filme eines bestimmten Tages in einem einzigen längeren Film alle 24 Stunden zu einer verkehrsarmen Zeit (z. B. 2:00 Uhr) zusammenfasst. CarlF vor 14 Jahren 0
0
Camille Goudeseune

If it's that few frames, convert them into an animated gif instead of a movie (with ImageMagick, for example).

That's how www.weather.gov animates radar imagery.