FLA File Recovery

by Daniel Schönfeld

Kurzbeschreibung

Abb. der Fehlermeldung beim Öffnen einer defekten Flash-Datei

Vor einiger Zeit habe ich festgestellt, dass es beim Arbeiten mit Adobe® Flash Professional CS5 oder höher hin und wieder zu Speicherfehlern kommt, die dazu führen, dass die Datei von der Anwendung nicht mehr gelesen werden kann. Das Programm bestätigt dann nur, dass die Datei nicht geöffnet werden kann und meldet im Ausgabefenster "Flash kann dieses Dokument nicht analysieren". Das ist natürlich besonders ärgerlich, wenn man bereits mehrere Stunden oder Tage in die Gestaltung einer Flash-Datei investiert hat.

Ganz ähnlich verhält es sich, wenn man z.B. versucht eine in Flash CS5.5 erstellte Datei in der Version CS5 zu öffnen. Dabei ist die Software durchaus in der Lage die Datei zu lesen. Lediglich die Metainformationen im Datei-Header verhindern das Öffnen der Datei.

Auf dieser Seite habe ich deshalb mir bekannte Wege zusammengetragen, die helfen sollen eine Vielzahl dieser Probleme zu beheben. Es ist allerdings sehr wahrscheinlich, dass weitere Fehlerquellen existieren, die mir bislang einfach noch nicht untergekommen sind. In diesem Fall würde ich dich bitten, mir eine E-Mail zu schreiben.

Eine Liste von Problemen im Umgang mit Adobe Flash findest du unter http://helpx.adobe.com/flash/kb/known-issues-flash-cs5-5.html

Probleme vermeiden

Damit diese Probleme gar nicht erst entstehen, kann man beim Arbeiten in Adobe Flash einige Grundregeln beachten.

  1. Nicht mit Netzlaufwerken arbeiten!

    Flash hat einige Probleme beim Öffnen, Speichern und Testen von Dateien, die sich auf Netzlaufwerken befinden. So ist es möglich, dass Verweise zu externen Quellen in ActionScript nicht gefunden werden oder bei nicht ausreichenden Zugriffsrechten keine SWF-Datei zum Testen erstellt werden kann.

    Das direkte Speichern in Netzlaufwerke führt meiner Erfahrung nach sehr häufig zu defekten Dateien und Datenverlust. Deshalb ist es ratsam immer lokal zu arbeiten und die Datei erst anschließend, falls benötigt, über das Dateisystem ins Netzlaufwerk zu kopieren.

  2. Keine Leer- oder Sonderzeichen in Dateinamen oder Bezeichnern!

    Gerade im deutschen Sprachraum sind Sonderzeichen sehr gängig und werden stellenweise noch nicht einmal als solche wahrgenommen. Begriffe, wie z.B. Straße, Fußball, Lärmüberhörer oder Heizölrückstoßabdämpfung sind allgegenwärtig und werden in dieser Form auch gern als Dateiname verwendet - weil es geht!

    Flash hat damit allerdings große Probleme, sodass es vorkommen kann, dass mit Sonderzeichen benannte Medienelemente nicht oder nicht mehr gelesen werden können. Beim Speichern einer solchen Datei ist es auch schon vorgekommen, dass die entsprechenden Ressourcen mit 0kb, also leer angelegt wurden.

  3. Mediendateien vor dem Import prüfen und optimieren!

    Achte darauf, dass du dein Bildmaterial vor dem Import in Adobe Flash optimierst. Überprüfe vor allem die Auflösung und die tatsächliche Bildgröße in Pixeln.

    Zu große Bilder lassen die Anwendung instabil werden oder im schlimmsten Fall abstürzen, was wiederum zu Datenverlust führen kann. Es bringt auch nichts eine Grafik, die irgendwo klitzeklein erscheinen soll in High Resolution Irgendwas in die Bibliothek zu importieren.

    Gleiches gilt für Sound und Video. Es gibt Medienelemente, z.B. MP3's, die sich von Flash nicht importieren lassen. Das kann viele Ursachen haben. Am einfachsten behilft man sich damit, dass man diese Medien in einer anderen geeigneten Anwendung öffnet und erneut abspeichert.

In Flash CS5.5 oder CS6 erstellte Dateien mit Flash CS5 öffnen und bearbeiten

Mit der Version CS5 wurde in Flash das unkomprimierte Dateiformat XFL eingeführt. Seit dieser Zeit sind FLA-Dateien eigentlich herkömmliche Zip-Archive, deren Inhalt dem XFL-Format entspricht. Man muss also nur die Dateiendung .fla in .zip umbenennen und die Datei entpacken. Dadurch erhält man mehrere XML-Dokumente, sowie diverse Verzeichnisse, welche Symboldefinitionen bzw. die verwendeten Medienelemente enthalten. Durch eine kleine Änderung in einer XML-Datei lassen sich Dokumente aus neueren Versionen problemlos in der Version CS5 öffnen, soweit ich das beurteilen kann.

Abb. Dateistruktur des XFL-Formats

Screenshot der Dateistruktur des XFL-Formats
  1. Ändern der Dateiversion

    Die Parameter, die beim Öffnen der Datei geprüft werden, befinden sich in der ersten Zeile der Datei DOMDocument.xml und können mit jedem beliebigen Texteditor bearbeitet werden, der in der Lage ist unformatierten Text zu speichern.

    Am besten erstellt man sich mit der Zielanwendung (CS5) ein neues Dokument, welches die gleichen Basismerkmale aufweist, wie das zu öffnende Dokument, also Dokumentgröße, Bildrate und ActionScript-Version.

    Dieses Dokument sichert man dann am besten gleich im XFL-Format und öffnet die entstandene Datei DOMDocument.xml ebenfalls im Texteditor. Nun kann man die erste Zeile dieser Datei kopieren und in der Ausgangsdatei ersetzen. Ein Doppelklick auf die XFL-Datei öffnet nun das Dokument ganz normal in Flash, wo man es auch wieder als .fla speichern kann.

  2. Medienelemente (.dat) extrahieren

    Sämtliche Bilder, Sounds oder Videos, die in der Flash-Datei verwendet wurden befinden sich im Verzeichnis /bin der entpackten Flash-Datei. Leider mit anderen Dateinamen und in einem nicht sonderlich anwenderfreundlichen Format mit der nichtssagenden Bezeichnung .dat.

    Einige Dateien, die z.B. JPEG oder MP3-Daten enthalten, lassen sich einfach umbenennen und sind dann normal nutzbar, während andere Formate, wie z.B. PNG-Bilder in einem mir nicht bekannten properitären Format abgelegt werden. (Auf StackOverflow gibt es einen Beitrag zum Thema)

    Ohne intensives Reverse Engeniering des DAT-Formats ist das Umwandeln dieser Dateien daher ohne die Flash-Anwendung nicht möglich. Man kann die Daten aber in ein neues Flash-Dokument kopieren und anschließend wie gewohnt exportieren.

Datei manuell wiederherstellen

Tritt beim Speichern in Flash ein Fehler auf, kommt es mitunter vor, dass einzelne Dateien innerhalb des Archivs (*.fla) nicht mehr lesbar sind, bzw. im besten Fall nur die Prüfsummen nicht mehr passen. Flash verweigert in solchen Fällen das Öffnen der Datei.

Im Adobe Flash Professional Team Blog findet man auch einen Eintrag zu diesem Thema.

Hier erfährst du, wie du diese Probleme erfolgreich behebst.

  1. Zerstörtes Archiv (.fla) reparieren

    Linux / Mac OS:

    Öffne ein Terminalfenster bzw. eine Konsole und verwende zum Reparieren der Datei folgende Befehlszeile:

    zip -FF verzeichnis/dateiname.fla

    Windows

    Die Reparatur eines Zip-Archivs unter Windows kann, soweit ich weiß, nur mit Drittanbietersoftware realisiert werden. Lade dir hierfür z.B. WinRAR herunter.

    Die Datei muss dann mit der Endung .zip versehen und in WinRAR geöffnet werden.

    Unter dem Menüpunkt Werkzeuge » Archiv reparieren (Alt + R) kann der Reparaturvorgang gestartet werden. Anschließend kannst du die Endung der reparierten Datei wieder in .fla ändern.

    Möglicherweise funktioniert das Öffnen nun bereits wieder. Falls nicht, solltest du mit dem nächsten Schritt fortfahren.

  2. Fehlerhafte Frames aufspüren

    Als ich das erste Mal mit einer defekten Flash-Datei zu tun hatte, brachte mich eine erste Recherche auf diesen Eintrag bei flashforum.de. Im Beitrag wird beschrieben, dass das fehlerhafte Einbinden eines Symbols das Öffnen verhindert.

    Ich bin dem Ganzen dann weiter auf den Grund gegangen und habe herausgefunden, dass Flash in bestimmten Fällen ein leeres Schlüsselbild innerhalb eines Symbols mit der Zeichenkette <frames/> sichert, die allerdings beim Einlesen aus irgendeinem Grund nicht gelesen werden kann.

    Linux / Mac OS:

    Ob deine Datei davon betroffen ist, kannst du im Terminal mit folgender Befehlszeile testen:

    unzip -p verzeichnis/dateiname.fla "*.xml" | 
    grep -c "<frames/>"

    Erscheint in der Ausgabe die Ziffer 0, ist die Datei entweder in Ordnung oder zumindest nicht von diesem Problem betroffen. Bei jeder anderen Zahl kann sie repariert werden. Wie das geht, erfährst du im nächsten Schritt.

    Windows

    Um die Dateien innerhalb des Archivs (.fla) zu durchsuchen, muss der Inhalt entpackt werden. Anschließend kann man die systemeigene Suche im Explorer nutzen.

    Öffne dazu ein Explorer-Fenster und suche innheralb der entpackten FLA-Datei nach allen XML-Dateien, in denen die Zeichenkette "<frames/>" vorkommt.

    Die Kriterien für diese Suche siehst du in der Abbildung.

    Alle gefundenden Dateien müssen anschließend repariert werden, um von Flash wieder gelesen werden zu können.

  3. Fehlerhafte Frames korrigieren

    Linux / Mac OS:

    fla="/verzeichnis/dateiname.fla"; 
    tmp="/tmp/FLARepair";
    zip -FF $fla; unzip -oq $fla -d $tmp;
    find $tmp -name "*.xml" -print0 |
    xargs -0 grep -Irl "<frames/>" |
    xargs sed -i '' 's/<frames\/>/
    <frames><DOMFrame index="0" keyMode="9728">
    <elements\/><\/DOMFrame><\/frames>/g';
    cd $tmp; zip -u $fla; rm -rf $tmp

    Windows

    Im Prinzip müssen lediglich alle Vorkommen von

    <frames/>

    gegen

    <frames>
    	<DOMFrame index="0" keyMode="9728">
    		<elements/>
    	</DOMFrame>
    </frames>

    ausgetauscht werden. Am einfachsten geht das mit einem Texteditor, der dateiübergreifendes Suchen/Ersetzen unterstützt.

  4. Defekte Medienelemente ersetzen

    Manchmal kommt es vor, dass Bilder, Sounds oder Videos gar nicht gespeichert, bzw. mit 0kb angelegt werden. Ursache dafür sind möglicherweise Sonderzeichen im Dateinamen der Ausgangsdatei oder das Speichern der FLA-Datei in ein Netzlaufwerk.

    Die defekten Dateien lassen sich dann wie folgt aufspüren:

    Linux / Mac OS:

    find "/verzeichnis/bin"  -size 0

    Windows

    Suche im Verzeichnis /bin der entpackten Flash-Datei nach Dateien, deren Dateigröße 0kb ist.

    Die Idee ist nun diese defekten Medien gegen die jeweilge unbeschädigte Originaldatei auszutauschen und so die Flash-Datei wieder funktionsfähig zu machen. Diese Lösung funktioniert also nur, wenn man noch im Besitz der originalen Medienelemente ist.

    Zunächst wäre es also hilfreich zu wissen, welche Originale sich hinter den Dat-Files verstecken. Das ist schon etwas kniffliger, da man sich diese Informationen einzeln aus der DOMDocument.xml popeln muss.

    Linux / Mac OS:

    xfl="/verzeichnis";
    find "$xfl/bin"  -size 0 | 
    awk -v FS="/" '{print $NF}' |
    xargs -I{} grep {} "$xfl/DOMDocument.xml" |
    grep -o "name=\"[a-zA-Z0-9 ÄÖÜäöüß\?\.\/\_\#'-]*" |
    sed "s/name=\"//" |
    awk -v FS="/" '{print $NF}'

    Windows

    Öffne die Datei DOMDocument.xml in einem Texteditor und suche nach dem jeweiligen Dateinamen der DAT-Datei. Du findest den Verweis dann als Parameter eines DOMItems. Im Parameter name dieses Items steht dann der ursprüngliche Dateiname.

    Wenn klar ist, welche Dateien beschädigt sind, kannst du die Originale heraussuchen und gesammelt in einen Ordner kopieren.

    Erstelle nun ein neues Flash-Dokument, importiere die fehlenden Mediendateien und speicher dieses Dokument im Format XFL ab.

    Nun kannst du die enstandenen DAT-Files mit den entsprechenden Dateinamen aus dem /bin-Verzeichnis deiner Ausgangsdatei umbenennen und schließlich in dieser ersetzen.

    Über JavaScript, genauer gesagt über JSFL lässt sich dieser Vorgang in Verbindung mit der Konsole auch verautomatisieren, indem man das JSFL gleich in der Konsole erzeugt und ausführen lässt.

Datei automatisch wiederherstellen

Hinweis:
Die automatische Wiederherstellung ist zur Zeit deaktiviert, da dieser Server das Ausführen von Shell-Befehlen leider nicht unterstützt. Sobald ich dafür eine Lösung gefunden habe, geb ich die Funktion frei.