2016-04-20 21 views
2

Ich bin neu in Video-Codecs und Lern-Video-Dateiformat-Spezifikationen. Ich habe gelesen über QUICKTIME Dateiformat-Spezifikationen von here, und MP4-Dateiformat (das ist fast ähnlich) von here. Es gibt Atome wie FTYPE, MOOV, MDAT usw. Das MDAT-Atom enthält aktuelle Audio- und Videodaten. Das MOOV-Atom enthält Informationen zum Extrahieren von Daten aus MDAT, es gibt Referenzen auf Chunks (Samples).Wie entschlüsseln Frames aus MDAT-Atom extrahiert aus mp4 Video

Ich möchte die Video-Beispiele in MDAT-Atom aus Videodatei extrahieren, ohne ein Werkzeug wie ffmpeg oder Jongleur usw. zu verwenden. Ich kann meinen eigenen Code dafür schreiben. Das Problem ist, selbst wenn ich die Videodaten (Samples) in MDAT lokalisieren kann, indem ich Informationen von MOOV verwende, sind diese Samples komprimiert. Und wir müssen diese entpacken, um Frames zu erhalten. Meine Frage ist, können wir die aus MDAT extrahierten Samples dekomprimieren und die eigentlichen Videoframes bekommen?

Tools wie xuggler, ffmpeg usw. werden verwendet, um Frames aus Videodateien zu extrahieren. Aber hier möchte ich die Beispiele (für Videodaten) aus MDAT extrahieren, indem ich meinen eigenen Code schreibe, aber dann möchte ich diese mit einem Werkzeug entpacken. Ich möchte keine Codecs schreiben.

Kann mir bitte jemand dabei helfen ....!

Dank ...

+0

Um einen codierten Rahmen zu dekomprimieren, benötigen Sie einen ** de ** Coder. codec steht für * (en) coder-decoder *, also ja, du brauchst einen Codec, entweder einen bestehenden oder deinen eigenen. – Mulvya

+0

@Mulvya du hast recht, ich brauche einen Decoder. Ich möchte vorhandene Decoder verwenden. Aber der Punkt ist, ich möchte Samples von Videodaten aus MDAT extrahieren, indem ich meinen eigenen Code schreibe, und dann diese Samples mit einem Werkzeug decodieren. Im MP4-Format werden Frames in Samples gespeichert, Samples werden in Chunks gruppiert. Also möchte ich die Brocken selbst extrahieren und dann diese Brocken mit einem Werkzeug entschlüsseln. Danke für die Antwort. –

+0

Dies kann mit ffmpeg durchgeführt werden, indem ein Befehl wie folgt verwendet wird: 'ffmpeg -ss 3.00 -i input.mp4 -c kopieren -vframes 1 -map 0: v: 0 -f daten 1.bin' <- this dumps das gesamte Paket. – Mulvya

Antwort

2

ffmpeg ist eine Sammlung von Bibliotheken. libavformat wird verwendet, um Dateien zu lesen und zu schreiben (was Sie mit Ihrem eigenen Code machen), libavcodec kann alleine verwendet werden, um Beispiele zu entschlüsseln.

+0

das ist eine gute Information. So entschlüsseln libavcodec die Samples. Gibt es Abhängigkeiten innerhalb der Samples für die Decodierung? Ich meine, für Beispiele haben wir 1000 Samples, kann libavcodec diese Samples unabhängig decodieren. Wenn ich nur das 500. Sample dekodieren möchte. Kann ich das tun, ohne andere Proben zu verwenden? –