Grabación y reproducción de video con velocidad de cuadro variable

Estamos usando una cámara de transmisión para grabar y reproducir videos de vigilancia.

Esta cámara envía una transmisión RTSP que nuestra aplicación grabará como un video H264.

En nuestra aplicación, los videos H264 se almacenarán en un contenedor MP4 y se publicarán en un servidor HTTP (Apache2). Los videos almacenados ahora se pueden ver con cualquier navegador web HTML5. ¡Hasta ahora tan bueno!

Nuestro problema es que la cámara envía sus fotogramas con una velocidad de fotogramas variable. Esto no es un problema mientras veamos la transmisión en vivo. Pero cuando miramos los videos grabados en H264/MP4, el tiempo comienza a desviarse. Esto significa que debido a la velocidad de fotogramas variable, a veces el video se reproducirá demasiado rápido y el tiempo no es correcto.

Entonces, ¿alguien tiene experiencia con videos H264 con velocidad de cuadro variable (VFR)? ¿Cómo podemos reproducir estos videos VFR sin desfase temporal? ¿Es posible convertir video VFR a video con velocidad de cuadro constante?

(Todos los reproductores probados como VLC parecen tener el mismo problema...)

Aquí la salida de 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
Una salida de mediainfo de uno de esos archivos sería útil. mediaarea.net/es/MediaInfo

Respuestas (3)

¿Estás seguro de que los archivos que grabaste tienen una velocidad de fotogramas variable? Parece que grabó con una velocidad de fotogramas constante (a pesar de que obtiene una transmisión de video de velocidad de fotogramas variable) que introdujo este "artefacto" y los reproductores, por supuesto, lo reproducen con una velocidad de fotogramas constante aunque no deberían.

Para convertir correctamente el metraje de velocidad de fotogramas variable en metraje de velocidad de fotogramas constante, puede residir en Handbrake . Es una herramienta fácil de usar para la codificación h264 que le permite elegir convertir su video a una velocidad de cuadros constante.

Sí, podemos convertir el video con una herramienta a una velocidad de fotogramas constante. Pero si la velocidad de fotogramas es variable, ¿el video se reproducirá a veces demasiado lento y otras veces demasiado rápido o no?
El codificador debe tener en cuenta eso, la velocidad de fotogramas variable no significa que tendrá grandes caídas en la velocidad de fotogramas, generalmente siempre está alrededor de ciertos valores +-2 fps.

Recientemente me encontré con este problema... mis videos transcodificados en H264 comenzaron a aparecer con velocidades de fotogramas VARIABLES, mientras que en el pasado salían con velocidades de fotogramas fijas.

Utilizo VLC-cmdline para hacer mis transcodificaciones finales (porque VLC admite funciones que HandBrake y otros no... como el texto de marquesina y el control de color de fuente, etc.

Cuando recientemente busqué en Google este problema, noté que wikipedia y algunos otros comentarios sobre la velocidad de fotogramas variable mencionan que el "tipo de contenedor" puede marcar la diferencia en la generación de fotogramas fijos o variables. (Eso me desconcertó... nunca lo hubiera imaginado).

Pero, por supuesto! En mi línea de comandos de VLC, cambié mi 'mux' de MP4 a MKV y listo. El verificador 'Mediainfo' muestra claramente que estaba obteniendo variables cuando usaba el contenedor MP4 y marcos fijos con MKV.

[Genial... Había estado planeando cambiar a archivos de salida MKV de todos modos, ¡y esto me proporcionó una gran razón para hacerlo! Tenga en cuenta: la versión 1.x y los primeros VLC solo admitían contenedores MP4, pero v2.x ahora también es compatible con MKV.]

Espero que esto ayude a otros.

Primero transcodifique su video Primero debe transcodificar su video usando un codificador "real" como Apple Compressor o Adobe Media Encoder.

Quicktime MP4 29,97 o 30 fotogramas por segundo

Asegúrese de utilizar una resolución estándar como 640x360,720x405,1280x720,1920x1080 o 640x360 para definición estándar 4x3.

También puede intentar usar HandBrake, es muy posible que funcione para usted y sea mucho más fácil.

640x360 no es la relación estándar SD 4:3. 640x480, o preferiblemente 720x480 con una relación de 0,9 píxeles es la relación 4:3. 640x360 es una relación de 16:9.