Encontré este archivo mp4 de broma en línea. (Advertencia: enlace de descarga directa a un archivo de 8 mb). Tanto los reproductores multimedia como ffmpeg enumeran el archivo con una longitud de 596523:14:07.00 (!). Lo primero que supuse fue que el video podría haber usado una velocidad de fotogramas muy baja, pero ffmpeg enumera una velocidad de fotogramas de 10 fps, sin fotogramas que tengan una velocidad de fotogramas variable. ¿Qué está pasando en la codificación de este archivo para darle una longitud tan larga?
Hay varias cosas que podemos señalar aquí:
Entonces, aunque es una broma divertida, no es tan genial como pensé al principio. Nadie ha descubierto cómo hacer un bucle infinito de cuadros o algo similar. Esto parece ser solo un encabezado del archivo que no coincide con los datos.
¿Cómo calcula el reproductor (o la mayoría de las herramientas) la duración del video? No leen todo el archivo, de lo contrario los tiempos de carga de los archivos no serían prácticos. Entonces, al comienzo del archivo hay un marcador que dice la longitud, y el jugador simplemente confía en él.
Repasemos las matemáticas:
596523:14:07.00 = ((596523*60)+14)*60+7 = 2147483647 seconds
2147483647 (base 10) = 7FFFFFFF (base 16)
Oh, ese es un buen número. Ahora abramos el archivo con un editor hexadecimal, justo al principio vemos
00000000: 00 00 00 18 66 74 79 70 6d 70 34 32 00 00 00 00 ....ftypmp42....
00000010: 6d 70 34 32 6d 70 34 31 00 01 69 7b 6d 6f 6f 76 mp42mp41..i{moov
00000020: 00 00 00 6c 6d 76 68 64 00 00 00 00 dd 69 a6 fb ...lmvhd.....i..
00000030: dd 69 a6 fb 00 00 00 01 7f ff ff ff 00 01 00 00 .i..............
Ahí está nuestro culpable, justo en la marca 0x38. Vamos a editarlo y ver qué pasa. De hecho, obtengo una "broma" más divertida si cambio 7f a ff al principio. Para comprender por qué funciona, consulte ¿Cómo se almacenan los números negativos en la memoria? .
Jörg W. Mittag