El 25% de mi .mp4 tiene un "error al leer el encabezado" en FFMPEG, OpenCV, pero todos los videos se reproducen bien

El 25% de mi .mp4 tiene un "error al leer el encabezado" en FFMPEG, OpenCV, pero todos los videos se reproducen bien

Tengo una cámara de seguridad Reolink, que guardó archivos .mp4 a través de FTP en un servidor local. Luego tengo mi propia aplicación basada en Python que procesa esos videos. Ha estado funcionando bien durante el último año, aunque a menudo noté advertencias en la consola Python (de OpenCV) sobre "error al leer el encabezado", pero funcionó de todos modos, así que lo ignoré.

Desde que obtuvo un nuevo servidor y reinstaló todo el software, lo que significa versiones actualizadas de Debian Linux, Python y OpenCV, ya no tolera los errores y no carga esos videos. Lo preocupante es que alrededor de 1 de cada 4 videos guardados a través de FTP dan este error en mi aplicación Python, y si intento cargarlos a través de FFMPEG en mi servidor o en mi computadora portátil (Mac), aparece el error.[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7ff492000400] error reading header [path]: Operation not permitted

He subido uno de los vídeos a Dropbox para que puedas verlo:https://www.dropbox.com/s/tu4ddegh6yn05nu/ErrorReadingHeader.mp4?dl=0

¿Alguien tiene alguna idea de qué está causando esto o cómo solucionarlo? Creo que tengo algunas opciones, pero no tengo suficiente información para avanzar en ninguna de ellas:

  • Arregla los videos para que no estén corruptos. Le he preguntado a Reolink, el fabricante, si pueden arrojar algo de luz...
  • Haga que FFMPEG, etc. tolere los errores. No estoy seguro de cómo... tampoco estoy seguro de qué códec está usando OpenCV (sé que definitivamente no es FFMPEG, por lo que hay más de un códec que no está contento con estos encabezados).
  • Intente 'reparar' los videos antes de procesarlos. Puede haber algo de provecho en esto como solución, pero se siente muy ineficiente, por lo que preferiría evitarlo si es posible... ¡pero está ahí como último recurso!

¡Muchas gracias!

Respuesta1

El MP4 de muestra está fragmentado y, por lo tanto, en lugar de tener un índice global para muestras, es decir, fotogramas, los metadatos son por fragmento. Dentro de los metadatos de cada fragmento, hay un cuadro de ejecución de pista trunque tiene datos para todas las muestras dentro del fragmento. Se realizó un cambio en octubre de 2017 (ffmpeg 4.0+) donde ffmpeg saldría si el cuadro trun indicaba que se almacenaban 0 muestras dentro del fragmento.

mp4box o versiones anteriores de ffmpeg no fallan, por lo que puede usarlas para remezclar el archivo a MP4 normales.

ffmpeg-3.4 -i in.mp4 -c copy out.mp4

o

mp4box -add in.mp4 -new out.mp4

información relacionada