Aufnehmen und Abspielen von Videos mit variabler Bildrate

Wir verwenden eine Streaming-Kamera , um Überwachungsvideos aufzunehmen und wiederzugeben.

Diese Kamera sendet einen RTSP-Stream, der von unserer Anwendung als H264-Video aufgezeichnet wird.

In unserer Anwendung werden die H264-Videos in einem MP4-Container gespeichert und auf einem HTTP-Server (Apache2) veröffentlicht. Die gespeicherten Videos können nun mit jedem HTML5-Webbrowser angesehen werden. So weit, ist es gut!

Unser Problem ist, dass die Kamera ihre Frames mit einer variablen Framerate sendet. Dies ist kein Problem, solange wir den Stream live verfolgen. Aber wenn wir uns die aufgezeichneten H264/MP4-Videos ansehen, beginnt die Zeit zu driften. Das bedeutet, dass aufgrund der variablen Bildrate das Video manchmal zu schnell abgespielt wird und die Zeit nicht stimmt!

Hat jemand Erfahrung mit H264-Videos mit variabler Bildrate (VFR)? Wie können wir diese VFR-Videos ohne Zeitdrift abspielen? Ist es möglich, VFR-Video in Video mit konstanter Bildrate zu konvertieren?

(Alle getesteten Player wie VLC scheinen das gleiche Problem zu haben...)

Hier die Ausgabe von mediainfo:

Complete name                            : VIDEO_REPLICA_12.h264
Format                                   : AVC
Format/Info                              : Advanced Video Codec
File size                                : 249 MiB
Overall bit rate mode                    : Variable

Video
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L3.2
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 1 frame
Format settings, GOP                     : M=1, N=15
Bit rate mode                            : Variable
Maximum bit rate                         : 20.0 Mbps
Width                                    : 1 280 pixels
Height                                   : 800 pixels
Display aspect ratio                     : 1.600
Frame rate mode                          : Variable
Standard                                 : NTSC
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Eine mediainfo-Ausgabe einer dieser Dateien wäre hilfreich. mediaarea.net/en/MediaInfo

Antworten (3)

Sind Sie sicher, dass die von Ihnen aufgenommenen Dateien tatsächlich eine variable Framerate haben? Es hört sich so an, als hätten Sie mit einer konstanten Bildrate aufgenommen (obwohl Sie einen Video-Feed mit variabler Bildrate erhalten), wodurch dieses "Artefakt" eingeführt wurde, und die Player spielen es dann natürlich mit einer konstanten Bildrate ab, obwohl sie dies nicht sollten.

Um Filmmaterial mit variabler Bildrate richtig in Filmmaterial mit konstanter Bildrate umzuwandeln, können Sie auf Handbrake zurückgreifen . Es ist ein benutzerfreundliches Tool für die h264-Codierung, mit dem Sie Ihr Video in eine konstante Bildrate konvertieren können.

Ja, wir können das Video mit einem Tool in eine konstante Framerate konvertieren. Aber wenn die Bildrate variabel ist, wird das Video manchmal zu langsam und manchmal zu schnell abgespielt oder nicht?
Der Encoder sollte dies berücksichtigen, variable Framerate bedeutet nicht, dass Sie starke Einbrüche in der Framerate haben werden, es liegt normalerweise immer um einen bestimmten Wert von +-2 fps.

Ich bin kürzlich auf dieses Problem gestoßen ... meine in H264 transcodierten Videos wurden mit VARIABLEN Bildraten herausgebracht, während sie in der Vergangenheit mit fester Bildrate herauskamen.

Ich verwende VLC-cmdline, um meine endgültigen Transcodierungen durchzuführen (weil VLC Funktionen unterstützt, die HandBrake und andere nicht haben ... wie Lauftext- und Schriftfarbensteuerung usw.

Als ich kürzlich dieses Problem gegoogelt habe, ist mir aufgefallen, dass Wikipedia und einige andere Kommentare zur variablen Framerate erwähnen, dass der „Containertyp“ einen Unterschied machen kann, ob feste oder variable Frames generiert werden. (Das hat mich verwirrt ... das hätte ich nie gedacht.)

Aber sicher genug! In meiner VLC-Befehlszeile habe ich meinen „mux“ von MP4 auf MKV und voila geändert. Der 'Mediainfo'-Checker zeigt deutlich, dass ich bei der Verwendung von MP4-Containern variable und bei MKV feste Frames erhalten habe.

[Großartig ... Ich hatte sowieso vor, auf MKV-Ausgabedateien umzusteigen, und das war für mich ein guter Grund, dies zu tun! Seien Sie sich bewusst -- Version 1.x und frühe VLC unterstützten nur MP4-Container, aber v2.x unterstützt jetzt auch MKV.]

Hoffe das hilft anderen.

Zuerst Ihr Video transkodieren Sie müssen Ihr Video zuerst mit einem "echten" Encoder wie Apple Compressor oder Adobe Media Encoder transkodieren.

Quicktime MP4 29,97 oder 30 Bilder pro Sekunde

Stellen Sie sicher, dass Sie eine Standardauflösung wie 640 x 360, 720 x 405, 1280 x 720, 1920 x 1080 oder 640 x 360 für die Standardauflösung 4 x 3 verwenden.

Sie können auch versuchen, HandBrake zu verwenden, es kann sehr gut den Trick für Sie erledigen und viel einfacher sein.

640 x 360 ist nicht das Standardverhältnis von SD 4:3. 640 x 480 oder vorzugsweise 720 x 480 mit einem Pixelverhältnis von 0,9 ist das Verhältnis 4:3. 640 x 360 ist ein Seitenverhältnis von 16:9.