2012-04-06 10 views
3

Ich mache Videoverarbeitungsaufgaben und eines der Probleme, die ich lösen muss, ist die Auswahl des geeigneten Kodierungsalgorithmus für ein Video, das nur ein statisches Bild im gesamten Video hat.Welchen Videokodierungsalgorithmus sollte ich für ein Video mit nur einem statischen Bild und Ton verwenden?

Derzeit habe ich verschiedene Algorithmen wie DivX und XviD ausprobiert, aber sie produzieren 3MB Video für ein 1 Minute langes Video. Der Ton ist 64kbit/s mp3, so dass der Ton nur 480KB benötigt. Also das Video ist 2.5MB!

Da sich das Bild im Video nicht ändert, kann es sehr effizient komprimiert werden, da keine Bewegung vorhanden ist. Die Bildgröße selbst (es ist ein jpg) ist nur 50KB.

Also idealerweise würde ich erwarten, dass dieses Video etwa 550KB - 600KB und nicht 3MB ist.

Irgendwelche Ideen, wie ich das Video optimieren könnte, so dass es nicht so riesig ist?

Ich hoffe, dies ist das richtige Stackexchange-Forum, um diese Frage zu stellen.

+1

Vielleicht können Sie die Frames pro Sekunde oder Bitrate unglaublich niedrig einstellen. Oder vielleicht gibt es ein Komprimierungsschema mit Keyframes, von denen Sie alle bis auf zwei (Start und Ende) eliminieren können. – ninjagecko

+0

Dies ist keine Programmierfrage. –

+0

@ninjagecko Wenn ich die Bitrate auf unglaublich niedrig setze, bekommt das Bild im Video auch eine unglaublich niedrige Qualität. Ich habe mich mit 300kbit/s für das Video entschieden. Gutes Denken über Frames pro Sekunde! Lass mich gleich damit experimentieren. (Nicht sicher, wie es mit dem Audio funktionieren wird.) – bodacydo

Antwort

2

Stellen Sie die Frames pro Sekunde auf sehr niedrig ein. Weniger als 1fps, wenn du kannst. Dein Ziel wäre es, so nah wie möglich an zwei Keyframes (einer am Anfang und einer am Ende) zu kommen.

Ob dies möglich ist, hängt vom verwendeten Schema/Codec und auch vom Encoder ab.

Viele Codecs haben Keyframe-bezogene Optionen. Zum Beispiel sind hier einige Open-Source-Encoder:

lavc (libavcodec):

keyint = < 0-300> - maximale Intervall zwischen Keyframes in Frames (Standard: 250 oder ein Keyframe alle zehn Sekunden in einem 25fps-Film

Dies ist die empfohlene Standardeinstellung für MPEG-4). Die meisten Codecs benötigen reguläre Keyframes, um die Akkumulation von Mismatch-Fehlern zu begrenzen. Keyframes werden auch zum Suchen benötigt, da das Suchen nur nach einem Keyframe möglich ist - Keyframes benötigen jedoch mehr Platz als andere Frames. Daher bedeuten größere Zahlen hier etwas kleinere Dateien, aber weniger präzises Suchen. 0 entspricht 1, was jeden Frame zu einem Schlüsselbild macht. Werte> 300 werden nicht empfohlen, da die Qualität je nach Decoder, Encoder und Glück schlecht sein kann. Es ist üblich, dass MPEG-1/2 die Werte < = 30 verwendet.

xvidenc:

max_key_interval = - maximales Intervall zwischen Keyframes (Standard: 10 * fps)

Interessanterweise ist diese Lösung die Möglichkeit, in der Datei zu suchen, reduzieren kann, so dass Sie will das testen.

+0

Das ist fantastisch Ninjagecko. Ich wusste nicht, dass FPS Bruchteile sein können. Ich dachte, sie können nur ganze Zahlen sein. Ich versuche Werte so niedrig wie 0,1 und es funktioniert! – bodacydo

+0

Ich bin auf 750KB pro Video runter! – bodacydo

0

Ich denke, dieses Problem bezieht sich auf die Implementierung von Video-Encoder, nicht der Video-Encoding-Standard selbst.

Tatsächlich sind die meisten Video-Encoder-Implementierungen nicht für Videos mit statischem Bild ausgelegt, daher wird kein perfekter Bitstream erzeugt, wie wir es uns vorgestellt haben, wenn ein Video mit statischem Bild eingegeben wird. Die meisten Video-Encoder-Implementierungen sind für die Verarbeitung von "natürlichem" Video ausgelegt.

Wenn Sie wirklich eine bessere Codierung Ergebnis für Video von statischen Bildes benötigen, können Sie auf einem Open-Source-Video-Encoder einen Hack tun kann, vom 2. Rahmen auf, alle MBs markieren als ‚überspringen‘ ...

+0

Was sind MBs?() – bodacydo

+0

MB bedeutet MacroBlock. Ein MacroBlock ist normalerweise ein 16x16-Quadrat, der Video-Encoder teilt das eingegebene Bild in MBs auf und verarbeitet sie dann einzeln. – ciphor