Usando FFmpeg para localizar el átomo de moov

20

Tengo una biblioteca de videos, todos los cuales deberían haber sido ajustados para la transmisión web colocando el moovátomo por delante del resto del video. Esto permite que la reproducción comience antes de que el cliente haya descargado completamente el video.

¿Hay alguna manera confiable de verificar si cierto video ha sido ajustado localizando cuántos bytes hay en el moovátomo? Esto es solo para fines de depuración.

Jamie Taylor
fuente
44
Solo como referencia para otras personas interesadas en colocar el átomo de moov al principio para facilitar la reproducción, vea la -movflags faststartopción o la qt-faststartherramienta ffmpeg.
llogan

Respuestas:

22

FFmpeg no te mostrará esta información, de verdad.

Puede usar AtomicParsley para analizar el archivo, por ejemplo:

AtomicParsley input.mp4 -T 

Esto le mostrará la ubicación de los átomos en un árbol. Si el moovátomo se encuentra al comienzo del archivo, tendrá que venir inmediatamente después del ftypátomo, por lo que podría intentar analizar la salida, por ejemplo, en Bash, solo imprimiendo la segunda línea y verificando si contiene moov:

AtomicParsley input.mp4 -T | sed -n 2p | grep -q "moov" && echo "yup" || echo "nope"
slhck
fuente
Jaja, bueno ... me alegro de ayudar :)
slhck
Tenga en cuenta que esto no funcionará en los archivos DASH de YouTube.
Steven Penny
1
@StevenPenny Derecha, los segmentos DASH no contienen todo el árbol Atom, porque son solo segmentos, no archivos completos de ISO Base Media.
slhck
12

Usando estoqtfaststart (no es lo mismo que ffmpeg qt-faststart), la qtfaststart -l entrada .mp4 mostrará el orden de los átomos de nivel superior.

$ qtfaststart -l bad.mp4
ftyp (32 bytes)
free (8 bytes)
mdat (559619 bytes)
moov (52916 bytes)
$ qtfaststart -l good.mp4
ftyp (32 bytes)
moov (52916 bytes)
mdat (559619 bytes)
$
mark4o
fuente
3
Si lo ha pipinstalado, puede instalarlo qtfaststartconpip install qtfaststart
qff
También puede instalar con Homebrew:brew install qtfaststart
Brandon Durham
-1

Puede hacer esto con FFprobe:

ffprobe -v trace infile.mp4

O con Bento4 :

$ mp4info infile.m4a
Archivo:
  marca principal: isom
  versión menor: 200
  marca compatible: isom
  marca compatible: iso2
  marca compatible: mp41
  inicio rápido: no

$ mp4info outfile.m4a
Archivo:
  marca principal: isom
  versión menor: 200
  marca compatible: isom
  marca compatible: iso2
  marca compatible: mp41
  inicio rápido: sí
Steven Penny
fuente