Defektes AVI reparieren

  • Hi,

    Ich habe hier einen AVI file der auf meiner Linux Kiste dahinschlummerte. Er war mit bz2 nochmal zusätzlich gepackt. Jetzt gab es aber vor kurzem einen Totalcrash der Box (Mainboard gekillt) und ich habe mir was neues zugelegt.
    Nachdem ich die alte platte in den neuen Recher gesteckt hatte, machte der erst mal 'n fsck (File system check) und fing an zu "restaurieren". Glücklicherweise gab's nicht viele Beschädigungen, aber halt mein Video hat was abbekommen. Das Bzip2 Archive hat einen korrupten Block.
    Mit bzip2recover zerlegt er den orginal File in viele kleine die dann ausgepackt und zusammen ge-cat-ed werden. Bis auf den defekten Block.
    Um's kurz zu machen ich habe jetzt zwei Files. Einmal den Anfang bis zur defekten Stelle und einen zweiten ab (und ohne) den defekten Block.
    Der Anfang wird tadellos abgespielt. Der zweite Teil überhaupt nicht.Was auch nicht wirklich verwunderlich ist da ja kein Header oder sonstiges vorhanden ist.
    Die Frage jetzt wie bieg ich das jetzt wieder hin ?

    Meine Idee ist den Header - zumindest zum Teil - vom ersten Teil zu nehmen.
    Vom zweiten Teil alles wegschneiden bis zum ersten I-Frame, und das Ganze wieder zusammenzubauen.
    Gibt es denn ein Tool mit dem man die AVI Struktur parsen kann oder so ähnlich ?
    Wie bastel ich den Header ? Habe mir schon einige Dokus bezüglich AVI Header angesehen aber das scheit es auch einige Unterschiede zu geben ...

  • So einfach wird das sicher nicht funktionieren. Es fehlen ja wirklich Daten. Und das auch noch von relativ unbekannter Größe. Das heißt, nach dem Zusammenstückeln hat die AVI-Datei ab der defekten Position nicht nur Datenfehler, sondern auch noch keinerlei Informationen mehr darüber, an welcher Stelle in der Datei nun jedes einzelne (Key-) Frame beginnt.

    Es gibt sicherlich Videoformate, bei denen man den Anfang von Frames noch an Bitmustern erkennen kann. Bei MPEG4 könnte das beispielsweise der Fall sein. Dann braucht man aber auch Rettungstools, die sich auf MPEG4 in AVIs spezialisiert haben (vielleicht DivFix). Jedes andere Format könnten die nicht mehr retten.

    Eventuell hilft es, die AVI-Datei mit VirtualDub so zu öffnen, dass im Datei-Öffnen-Dialog das Häkchen für die erweiterten Optionen gesetzt ist. Dann müsste man mal den AviFile-Kompatibilitätsmodus testen, sowie das Rederive-Keyframe-Flag. Aber Garantie auf Erfolg gibt es keinesfalls.

  • Also der Infahlt der Avi Datei ist Mpeg-4 asp (DivX 5 um genau zu sein) mit mp3 128kbps CBR. Das mit VirtualDub werde ich heut Abend mal Ausprobieren.

    Gibt es den keine "Kennung" (hex Wert) an der man ein I-Frame erkennt ?
    So daß man im "Notfall" auch mit dem hex-editor abeiten kann.
    Und wenn, wie bau ich den AVI header (manuell) zusammen ? Hast du da mal 'ne Referenzseite die den erklärt ?

    TIA
    may

  • Eventuell hilft der Hex-Editor von VirtualDub (unter "Tools" glaube ich); der zeigt den Chunk-Tree an (soweit er ihn erkennen kann).

    Ich habe mal einen Hex-Editor geschrieben, der auch Chunk-Trees anzeigen kann, allerdings sehr viel Hintergrundwissen erfordert, wenn man was reparieren will:
    https://localhost/www.gero-net.de/avihex/avihex240.zip

    Die Informationen zur Art der Frames (z.B. Keyframe, gleichbedeutend mit I-Frame) steckt in den Indizes, und davon gibt es meist zwei: Den idx1-Index (alte Avi-Spezifikation, ist aus Kompatibilitätsgründen meist auch in den neueren Avi-Dateien vorhanden) und den ix##-Index (## steht für eine Nummer).

    Beide Indizes enthalten für jeden Chunk (Datenpaket) einen Eintrag; bei idx1 enthält jeder Eintrag auch ein Dword (=4 Byte groß) "Flags", wobei das Flag 0x10 (hex) für "keyframe" steht; bei ix## ist das Flag in dem Wert "Size" enthalten: ist Bit 31 gesetzt (=1), handelt es sich NICHT um ein keyframe.

    Also, man muss sich ganz schön durchwühlen, um da weiterzukommen ...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!