Wie extrahiere ich MOOV-Atom/Metadaten aus einer MP4-Datei?

Kann man das MOOV-Atom aus einer MP4-Datei "dumpen"/extrahieren? Wenn das so ist, wie? Hoffen auf einen obskuren FFMPEG-Befehl.

Ich muss einen Stream verarbeiten/abspielen können, ohne immer wieder nach dem MOOV-Atom suchen zu müssen. Bei sehr langen Streams kann dies mehrere Megabyte an Daten umfassen. Es ist ziemlich seltsam, ich glaube nicht, dass das MOOV-Atom riesig ist, ich denke nur, dass es über die ersten N Megabytes verstreut ist (dh Toplevel-Daten am Anfang, mit Verweisen auf weitere Atome, die später im Stream sind).

Daher wäre es für mich sinnvoll, das MOOV-Atom aus der Datei zu extrahieren und es zu behalten

Antworten (3)

Sie können AtomicParsley verwenden , um die Metadaten einer MP4-Datei zu parsen. Zum Beispiel

 AtomicParsley /path/to.mp4 -T 1

druckt den gesamten Atombaum.

Vielleicht bin ich etwas spät dran, aber ich würde bento4 mp4dump verwenden , es ist wirklich einfach mit Brew auf einem Mac zu installierenbrew install bento4

mp4dump 1.mp4 

[ftyp] size=8+16
  major_brand = iso5
  minor_version = 200
  compatible_brand = iso6
  compatible_brand = mp41
[moov] size=8+740
  [mvhd] size=12+96
    timescale = 1000
    duration = 0
    duration(ms) = 0
....

Sie können auch qtfaststart -l fileNamedie Ausgaben verwenden, die für Menschen besser lesbar sind, wie:

$ qtfaststart -l myFile.mp4
ftyp (32 bytes)
free (8 bytes)
mdat (283805466 bytes)
moov (3541465 bytes)

Die Python qtfaststartunterscheidet sich von der qt-faststartBinärdatei (gebündelt mit ffmpeg) und kann mit diesem Befehl installiert werden:

sudo -H $(which pip) install qtfaststart

qtfaststartKommandozeilenargumente :

$ qtfaststart -h
Usage: qtfaststart [options] infile [outfile]

Options:
  --version     show program's version number and exit
  -h, --help    show this help message and exit
  -d, --debug   Enable debug output
  -l, --list    List top level atoms
  -s, --sample  Create a small sample of the input file

Die qtfaststartQuellen sind hier

Auf meinem Mac, wo ich all diese raffinierten Dienstprogramme mit bekomme brew, ist der Befehl tatsächlich qt-faststartund Teil des ffmpegPakets.
@GwynethLlewelyn qt-faststart ist ein Binärprogramm, aber qtfaststart ist ein Python-Programm, sie haben unterschiedliche Befehlszeilenargumente. Ich habe keinen Mac zur Hand, also kann ich Ihnen nicht weiter helfen als das oder mit Brew -Pip
Vielen Dank, @SebMa, du hast recht – es gibt tatsächlich einen Unterschied – aber leider brewund brew-pipscheinen nicht zu gefallen qtfaststart; Anscheinend gibt es irgendwo einen Konflikt zwischen dem brew-provided-Paket und dem von ihm pipselbst bereitgestellten Paket (dh brewglaubt, dass beide gleich sind). easy_install qtfaststartfunktioniert mit dem Python des Systems (2.7.X in macOS Catalina).
Leider listet dies nur "Atome der obersten Ebene" auf, nicht den gesamten Baum