stark beschädigte Audio-Dateien retten

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
Hallo.

Habe in meiner iTunes-Bibliothek durch Zufall 9 beschädigte ALAC-Dateien gefunden (evtl. gibts noch mehr):
- Die defekten Dateien lassen weder in iTunes (12.9.5) noch im Finder (10.14.6) abspielen (zeigen in iTunes auch kein Cover mehr, so ists mir aufgefallen).
- In Audacity wird der erste Teil der Audiodatei nicht angezeigt. Beginnt mit kurzem Rauschen (1sec) und dann irgendwo in der Mitte.
- Mediainfo scheint das zu bestätigen: "tuncated=yes".
- Die Grösse der Dateien deutet darauf hin, dass die Daten des Audiostreams möglicherweise noch in der Datei enthalten sein könnten.

Wenn ich beschädigte Dateien mit dem Hexeditor Synalize einlese, erhalte ich Meldungen des Typs Length field with value soundso exceeds remaining structure size soundso. an einer Position, die wiederum auf den Header hinweist.
Reencoding ALAC->ALAC mit XLD oder ffmpeg -i damagedfile.m4a -c copy fixedfile.m4a funktioniert in diesen Fällen nicht: XLD (20181019) gibt eine Fehlermeldung, ffmpeg (4.1.3) erzeugt nur eine (immer noch) defekte Kopie.

Wenn ich den Header der beschädigten Audiodatei im Hexeditor rausschneide (Dateianfang bis (inkl.) mdat), sollte ich doch eigentlich raw-Audio erhalten, oder?
Doch das dann in eine hörbare Datei umzuwandeln (z.B. mit faad (2.8.8), sox (14.2.2) o.ä.), ist mir bis jetzt nicht gelungen. faad wirft den Fehler "Error: Gain control not yet implemented" aus und sox erstellt (wie Audacity) nur eine Datei mit Rauschen.
Also, i.M. seh ich den Wald vor lauter Bäumen nicht mehr.

Meine Hoffnung: Nur der Header ist beschädigt und ich schaffe es letztendlich doch noch, den Inhalt (Audiostream) zu retten.

Falls jemand konkrete Tips hat, die ich noch probieren könnte, wäre ich sehr dankbar.
 
Zuletzt bearbeitet:

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.196
guck dir die dateien mal mit einem hexeditor an, dann weißt du, ob es wirklich nur die header sind.
aber wenn du da große blöcke mit nullen siehst, dann wirst du da nicht wirklich viel retten können.

sind das denn irgendwelche seltenen aufnahmen?
oder warum machst du da so einen aufwand?
 
  • Gefällt mir
Reaktionen: masta k

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
große blöcke mit nullen
Ich fand da nur den Block kurz vor mdat, wo das free atom ist und der sich auch in unbeschädigten Dateien findet. Daher auch meine Hoffnung, noch was retten zu können.

Na ja, Aufwand... Die Hälfte sind Rips meiner Vinyl-Platten. Hab für eine beschädigte/defekte Datei pro Album eigentlich keine Lust, das Setup nach all den Jahren für einen erneuten Rip nochmals aufzubauen.
Blöderweise haben sich die Defekte mit den Jahren auch in meinen Backups breit gemacht, so dass ich da keine unbeschädigten Kopien finde.

Also, mal angenommen, der Audiostream ist noch in der beschädigten Datei, der Header ist aber defekt. Wie extrahiere das Audiomaterial?
 

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.196
du könntest mit dem atom inspector die datei angucken, wie weit die nun defekt ist.
der header sind nur ein paar bytes, ist schon optimistisch zu denken, das wäre nur der header.
findest du bei den apple developer downloads.
 

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
schon optimistisch zu denken, das wäre nur der header
Total. Denial, Zweckoptimismus usw. Ich liege wahrscheinlich falsch.
Hab zumindest für einen Titel eine funktionierende Kopie gefunden.
Das sagt übrigens der Atom Inspektor (rot = beschädigte Datei, grün = funktionierende Kopie):

atominsp.jpg

Sieht so aus, wie das Ergebnis im Hexeditor:

Synalize.jpg

BTW so siehts in Audacity aus:
waveforms.jpg

Ich schätze, ich bin effed. Schade.
 

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
Scheinbar sind die Audiodaten doch noch vollständig in der Datei enthalten:
Ich bin kein Experte in Sachen Audiodateien, aber m.W.n. sollten die Audiodaten nach mdat in der Datei beginnen, was auch die Proportionen der Blöcke nahelegen.
In einem einzigen Fall habe ich noch unbeschädigte Vergleichsdatei zur beschädigten gefunden. Im Hexeditor habe ich dann den Teil "Dateianfang bis kurz vor mdat" der unbeschädigten Datei (ohne Cover) kopiert (15KB) und in der beschädigten Datei den entsprechdenen Teil ersetzt. Und danach konnte ich die beschädigte Datei wieder von Anfang an normal abspielen, als hätte es nie ein Problem gegeben. 15KB, die den Unterschied machen.

Leider lässt sich der Teil "Dateianfang bis kurz vor mdat" der beiden Dateien nicht so gut vergleichen, weil ich das Cover nicht mehr aus der beschädigten Datei kann. Irgendwas hat da wohl die Metadaten etc. vor den Audiodaten vermurkst.
Theoretisch besteht also noch Hoffnung. Ich muss nur(!) eine Methode finden, wie ich den Teil Dateianfang bis kurz vor mdat "reparieren" kann (eben ohne unbeschädigte Vergleichsversionen).

Falls jemand eine Idee hat, ich lade auch gerne die komplette beschädigte und unbeschädigte Datei oder jeweils den Teil "Dateianfang bis mdat" irgendwohin (wohin?) hoch.
 

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.196
versuch doch ein metadaten tool, vielleicht geht es wieder, wenn du einfach ein neues cover rein packst oder entfernst.
sonst halt mit dem hexeditor den mdat byteheader suchen und den teil davor halt raus schneiden.
 
  • Gefällt mir
Reaktionen: dg2rbf

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
versuch doch ein metadaten tool, vielleicht geht es wieder, wenn du einfach ein neues cover rein packst oder entfernst.
Hab ich bereits versucht. Funktioniert leider nicht. Metadaten sind wahrscheinlich irgendwie zerschossen.
sonst halt mit dem hexeditor den mdat byteheader suchen und den teil davor halt raus schneiden.
Genau das hab ich gemacht. Aus der beschädigten Datei vor dem mdat Atom alles rausgeschnitten und als Kopie gespeichert, d.h. ich hätte dann wohl eine Datei mit Rohaudiodaten (ALAC) vorliegen.
Doch wie erhalte ich daraus wieder eine Lossless-Audiodatei? Habs mit faad, sox usw. versucht, bisherige Versuche geben mir nur Dateien mit Rauschen...
 

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.196
Genau das hab ich gemacht. Aus der beschädigten Datei vor dem mdat Atom alles rausgeschnitten und als Kopie gespeichert, d.h. ich hätte dann wohl eine Datei mit Rohaudiodaten (ALAC) vorliegen.
Doch wie erhalte ich daraus wieder eine Lossless-Audiodatei? Habs mit faad, sox usw. versucht, bisherige Versuche geben mir nur Dateien mit Rauschen...
faad ist doch ein AAC decoder, was soll der mit ALAC anfangen?
ffmpeg macht auch nichts drauf?
besser wäre es das beschädigte atom raus zu nehmen, aber dazu musst du dir mal im atom inspector das genau angucken.
 

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
faad ist doch ein AAC decoder, was soll der mit ALAC anfangen?
ffmpeg macht auch nichts drauf?
Ja, da hab ich mich vertan, meinte ffmpeg.
Nur damit ich mich nicht vertue: Was wäre denn der korrekte Befehl, um aus einer Raw-ALAC-Datei (44100/16) (also ohne den Teil vor mdat) wieder eine abspielbare ALAC zu machen? Möglicherweise hab ich da eine Option vergessen oder falsch angegeben.
 

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.196
Was wäre denn der korrekte Befehl, um aus einer Raw-ALAC-Datei (44100/16) (also ohne den Teil vor mdat) wieder eine abspielbare ALAC zu machen? Möglicherweise hab ich da eine Option vergessen oder falsch angegeben.
dazu müsste man deine optionen wissen.
am besten gibst du den decoder mit den optionen mit, damit der nicht selber raten muss.
 

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
Hab so einige Variationen durchprobiert, immer gibts irgendwo einen Fehler (moov atom fehlt, wenn ich m4a als Dateiendung verwende usw. usf.)
Bsp.:
ffmpeg -ar 44100 -sample_fmt s16p -ac 2 -i damaged.m4a -acodec alac fixed.m4a
 

Schnatterente

Mitglied
Mitglied seit
12.08.2010
Beiträge
1.285
kannst du uns die Datei zu Testzwecken zur verfügung stellen ?
Du hast mich richtig neugierig gemacht. :)
 

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
Habs im Hexeditor nochmals (2x) überprüft: Der reine Audiodaten-Teil der beschädigten und der unbeschädigten Datei sind identisch.
Die Atoms davor (moov,free) sind wahrscheinlich unwiderruflich zerschossen.

Ich sehe i.M. nur 2 Wege:
1. Ich schaffe es irgendwie, den ALAC-Rohaudiodatenteil wieder (verlustfrei) in eine abspielbare Audiodatei zu transkodieren. Doch ffmpeg macht da Schwierigkeiten.
2. Oder es gelingt, einen Minimal-Header (ftyp, moov, free) für eine ALAC-Datei zu erstellen, mit dem ich beschädigte Datei wieder abspielbar machen kann. Also nur mit den allernötigsten Headerinformationen, die benötigt werden, um die Datei erfolgreich abspielen und dann weiterbearbeiten zu können (ffmpeg).
Hab aber i.M. keine Ahnung, was die Mindestvoraussetzungen/-infos sind, die so ein Header enthalten musst.
 

404

Mitglied
Thread Starter
Mitglied seit
20.02.2015
Beiträge
224
Sorry, hab den Thread nicht aktualisiert. Wie es aussieht, kann ich wohl die sizes der einzelnen atom korrigieren, aber die Chunks der Mediadaten im stco atom sind wohl auch nicht korrekt und bei 403 Einträgen macht ne manuelle Korrektur keinen Sinn. Wie es aussieht, könnte man evtl. noch versuchen, aus dem Rohaudiodaten-Teil mit einem Streamer wie VLC eine neue Ausgabedatei zu erhalten. Hab ich bis jetzt noch nicht erfolgreich geschafft. Kenn mich mit VLC und Streaming aber auch nicht aus.
 
Oben