Hi Leute,
ich bin an einem Punkt mit meinem Video gescheitert und komme absolut nicht mehr weiter. :-(
Ich habe ein defektes Video einer Kamera, das sich nicht abspielen lässt.
Jetzt hat die Kamera den gesamten Videostream aber vermutlich vollständig auf die SD-Karte geschrieben. Das richtig Dumme ist aber, dass der Datensatz standardmäßig ein zweites Video auf einer zweiten Videospur mit geringerer Auflösung aus dem Zweitobjektiv enthält und all das in dem Datenstream steckt.
Ich habe schon die verschiedensten Reparaturansätze probiert, aber fast nur Datenausschuss rausgekriegt.
• ffmpeg repariert mir das Video nicht, weil das MOOV Atom fehlt.
• Mit recover_mp4 kriege ich den .h264-Datenstream des zweiten Videos teilweise extrahiert, der ist aber unwichtig. Das Hauptvideo zerschießt es mir vollkommen in ein Grau-Grün-Standbild.
• Mit Video Repair kriege ich den Datenstream des ersten Videos als ca. halb so große Datei extrahiert, er läuft auch bis zum Ende durch, aber ich habe sehr viele Ruckler und graue und grüne Artefakte im Video und er lässt sich nicht mit jedem Player abspielen (z.B. VLC spielt ihn nicht).
• in meinem Videoeditor kann ich den defekten Stream nicht laden.
Meine Absicht ist daher, das MOOV Atom aus einem intakten Video aus derselben Kamera ohne die Laufzeitangabe und Videogröße in den kaputten Stream einzubinden. Die Daten, Bitraten und Bewegungsalgorithmen wären dann identisch und vielleicht kann ein Player dann das erste Video ruckelfrei bis zum Ende abspielen. Ich weiß nur nicht, wie ich das mache?
recover_mp4 analysiert mir zwar die Daten aus einem intakten Video, allerdings sind die am Ende vollkommen ** Netiquette! **ig. Es sind genau die Daten vom Zweitstream (9fps, 160x120px). In der Analyse sehe ich sogar das gesamte MOOV Atom des Erststreams (1920x1080 @ 29.97fps usw. usf.), in die Analysedatei werden aber Daten des Zweitstreams geschrieben :-(
Mit diesen falschen Grundlagen versucht dann ffmpeg den Erststream wiederherzustellen, was natürlich in die Hose geht.
Außerdem habe habe ich den Dateiheader der defekten Datei in einem Hexeditor umgeschrieben, aber dann ist das Video Schrott. Zusätzlich zum Header sind ja noch unzählige andere Daten fürs MOOV Atom wichtig, die ich manuell dort nicht finden kann.
Wichtig ist auch noch: nicht jeder Player erkennt den zweiten Videostream. Diesen kann ich bei einem intakten Video per VLC über die den Direct3D9-Output parallel mit 9fps mitlaufen lassen, ein anderer Player, mein Videoschnittprogramm oder auch Reparatursoftware erkennen jedoch nur den ersten Stream.
Ihr seht also: Hier beißt sich die Katze in den Schwanz. Zur Analyse werden die Daten des Zweitstreams herangezogen, zum Rendern nur die Daten des Erststreams erkannt.
Eine Softwarelösung könnte evtl. noch GPAC sein, aber damit kenne ich mich absolut nicht aus.
Habt ihr eine Lösung oder noch eine Idee, was ich ausprobieren könnte? Ich habe bereits Urlaubsvideos auf diese Weise wiederhergestellt, aber das waren alles einheitliche Streams aus einer DSLR, niemals ein Doppelstream.
Ganz unten bei den ffmpeg-Parametern seht ihr die framerate 9.001, was schon auf einen Fehler hindeutet. Die CGO3-Kamera könnte man notfalls drin lassen, denn der Stream wird vermutlich vom gleichen Sensor verarbeitet. Allerdings ist die tatsächliche Kamera eine modifizierte CGO3.
Danke für gute Lösungsansätze im Voraus. Von einer Online-Reparaturlösung nehme ich allerdings Abstand. Datenschutz.
recover_mp4 v1.92 (C) 2011-2017 Dmitry Vasilyev <[email protected]>
http://slydiman.me
Analyzing file 'Good.mp4':
'ftyp' 0x0 [24] Major Brand: 'mp42', Minor Version: 0x0
Compatible brands: 'mp42', 'isom'
'mdat' 0x18 [309230940]
'moov' 0x126E7D74 [159215]
'mvhd' 0x126E7D7C [108] Movie Header: Time scale 90000, Duration 14145700 (157.174 sec)
Rate 1, Volume 1
Creating time: 2019/07/04 17:03:37
Modification time: 2019/07/04 17:03:37
Next Track ID: 3
'udta' 0x126E7DE8 [128]
'FIRM' 0x126E7DF0 [40] "0.2.14A"
'CAME' 0x126E7E18 [40]
Unprocessed 32 bytes
'SETT' 0x126E7E40 [40]
Unprocessed 32 bytes
'trak' 0x126E7E68 [76553]
'tkhd' 0x126E7E70 [92] Track #1, Duration 14145700
Resolution: 1920x1080
Creating time: 2019/07/04 17:03:37
Modification time: 2019/07/04 17:03:37
'mdia' 0x126E7ECC [76453]
'mdhd' 0x126E7ED4 [32] Media Header: Time scale 90000, Duration 14145700 (157.174 sec)
Creating time: 2019/07/04 17:03:37
Modification time: 2019/07/04 17:03:37
'hdlr' 0x126E7EF4 [43] Component Type: {0000}, Subtype: 'vide'
'minf' 0x126E7F1F [76370]
'vmhd' 0x126E7F27 [20]
'dinf' 0x126E7F3B [36]
'dref' 0x126E7F43 [28]
'url?' 0x126E7F53 [12]
Unprocessed 4 bytes 00 00 00 01
'stbl' 0x126E7F5F [76306]
'stsd' 0x126E7F67 [174]
'avc1' 0x126E7F77 [158] Video Sample 1920x1080, 24 bits, cgo3
'avcC' 0x126E7FCD [72] AVC video 1920x1080, Main Profile, Level 4.0
'stts' 0x126E8015 [24] Time-to-Sample[1] (#: Count * Duration):
0: 4710 * 3003
'ctts' 0x126E802D [37696]
Unprocessed 37688 bytes
'stsc' 0x126F136D [28] Sample-to-Chunk[1] (#: FirstChunk / SamplesPerChunk / SampleDescIndex):
0: 1 / 1 / 1
'stsz' 0x126F1389 [18860] Sample Size[4710] (#: Sample Size):
0: 0x46e42
1: 0xb890
2: 0xef3a
3: 0xd614
4: 0xe215
5: 0xe7ac
6: 0xe797
7: 0xf4c4
8: 0xdf42
9: 0xe313
10: 0xe791
...
'stco' 0x126F5D35 [18856] Chunk Offset[4710] (#: Chunk Offset):
0: 0x20
1: 0x46e62
2: 0x526f2
3: 0x64d7e
4: 0x72484
5: 0x81262
6: 0x8fb00
7: 0x9e297
8: 0xad84d
9: 0xbd033
10: 0xcb438
...
'stss' 0x126FA6DD [644] Sync Sample[157] (#: SamplesNumber):
0: 1
1: 31
2: 61
3: 91
4: 121
5: 151
6: 181
7: 211
8: 241
9: 271
10: 301
...
'mark' 0x126FA961 [16]
Unprocessed 8 bytes
'trak' 0x126FA971 [59385]
'tkhd' 0x126FA979 [92] Track #2, Duration 14148480
Creating time: 2019/07/04 17:03:37
Modification time: 2019/07/04 17:03:37
'mdia' 0x126FA9D5 [59285]
'mdhd' 0x126FA9DD [32] Media Header: Time scale 90000, Duration 14148480 (157.205 sec)
Creating time: 2019/07/04 17:03:37
Modification time: 2019/07/04 17:03:37
'hdlr' 0x126FA9FD [43] Component Type: {0000}, Subtype: 'soun'
'minf' 0x126FAA28 [59202]
'smhd' 0x126FAA30 [16]
'dinf' 0x126FAA40 [36]
'dref' 0x126FAA48 [28]
'url?' 0x126FAA58 [12]
Unprocessed 4 bytes 00 00 00 01
'stbl' 0x126FAA64 [59142]
'stsd' 0x126FAA6C [102]
'mp4a' 0x126FAA7C [86] Sound Sample v0, 1ch, 16 bits, 48000 Hz
'esds' 0x126FAAA0 [50] MPEG-4 audio AAC 48000 Hz 1ch profile 2 (codec data 0x11 0x88)
'stts' 0x126FAAD2 [24] Time-to-Sample[1] (#: Count * Duration):
0: 7368 * 1920
'stsc' 0x126FAAEA [28] Sample-to-Chunk[1] (#: FirstChunk / SamplesPerChunk / SampleDescIndex):
0: 1 / 1 / 1
'stsz' 0x126FAB06 [29492] Sample Size[7368] (#: Sample Size):
0: 0x79
1: 0x79
2: 0x79
3: 0x79
4: 0x79
5: 0x79
6: 0x79
7: 0x79
8: 0x79
9: 0x79
10: 0x79
...
'stco' 0x12701E3A [29488] Chunk Offset[7368] (#: Chunk Offset):
0: 0x64c8c
1: 0x64d05
2: 0x72392
3: 0x7240b
4: 0x80699
5: 0x80712
6: 0x8fa0e
7: 0x8fa87
8: 0xad75b
9: 0xad7d4
10: 0xbcf41
...
'trak' 0x1270916A [23033]
'tkhd' 0x12709172 [92] Track #3, Duration 14143568
Resolution: 160x120
Creating time: 2019/07/04 17:03:37
Modification time: 2019/07/04 17:03:37
'mdia' 0x127091CE [22933]
'mdhd' 0x127091D6 [32] Media Header: Time scale 90000, Duration 14143568 (157.151 sec)
Creating time: 2019/07/04 17:03:37
Modification time: 2019/07/04 17:03:37
'hdlr' 0x127091F6 [43] Component Type: {0000}, Subtype: 'vide'
'minf' 0x12709221 [22850]
'vmhd' 0x12709229 [20]
'dinf' 0x1270923D [36]
'dref' 0x12709245 [28]
'url?' 0x12709255 [12]
Unprocessed 4 bytes 00 00 00 01
'stbl' 0x12709261 [22786]
'stsd' 0x12709269 [146]
'avc1' 0x12709279 [130] Video Sample 160x120, 24 bits, cgo3
'avcC' 0x127092CF [44] AVC video 160x120, Baseline Profile, Level 2.0
'stts' 0x127092FB [24] Time-to-Sample[1] (#: Count * Duration):
0: 1366 * 9999
'ctts' 0x12709313 [10944]
Unprocessed 10936 bytes
'stsc' 0x1270BDD3 [28] Sample-to-Chunk[1] (#: FirstChunk / SamplesPerChunk / SampleDescIndex):
0: 1 / 1 / 1
'stsz' 0x1270BDEF [5484] Sample Size[1366] (#: Sample Size):
0: 0x3660
1: 0xad7
2: 0x17b2
3: 0x110c
4: 0x1277
5: 0x174c
6: 0x1754
7: 0x1896
8: 0x1e1a
9: 0x3680
10: 0x89c
...
'stco' 0x1270D35B [5480] Chunk Offset[1366] (#: Chunk Offset):
0: 0x6162c
1: 0x8078b
2: 0xbb78f
3: 0xe8889
4: 0x1130ac
5: 0x13bc6f
6: 0x171ab2
7: 0x1a6123
8: 0x1d33bd
9: 0x246214
10: 0x272753
...
'stss' 0x1270E8C3 [656] Sync Sample[160] (#: SamplesNumber):
0: 1
1: 10
2: 19
3: 28
4: 37
5: 44
6: 53
7: 62
8: 70
9: 76
10: 85
...
'mark' 0x1270EB53 [16]
Unprocessed 8 bytes
----------------------
File 'video.hdr' created succesfully
File 'audio.hdr' created succesfully
----------------------
Video statistics:
Sample Size: Min 0x45b, Avg 0x1996, Max 0x459a
Samples Per Chunk: Min 1, Avg 1, Max 1
Count 1366, [ 0c 00 00] Size Min 0x93, Avg 0x94, Max 0x95
Count 160, [ 41 9a 20] Size Min 0x3bf, Avg 0x12b8, Max 0x2820
Count 159, [ 41 9a 40] Size Min 0x762, Avg 0x15b1, Max 0x27d7
Count 157, [ 41 9a 60] Size Min 0xbfc, Avg 0x16a3, Max 0x276f
Count 155, [ 41 9a 80] Size Min 0xc92, Avg 0x18d5, Max 0x2422
Count 149, [ 41 9a a0] Size Min 0xd12, Avg 0x18d1, Max 0x2592
Count 145, [ 41 9a c0] Size Min 0xa3d, Avg 0x17a7, Max 0x2490
Count 142, [ 41 9a e0] Size Min 0xd24, Avg 0x17c5, Max 0x2628
Count 139, [ 41 9b 00] Size Min 0xd9a, Avg 0x192c, Max 0x27c6
Count 80, [ 65 88 82] Size Min 0x1b68, Avg 0x3649, Max 0x44fe
Count 80, [ 65 88 84] Size Min 0x1d82, Avg 0x3608, Max 0x42ea
----------------------
Sound statistics:
Sample Size: Min 0x79, Avg 0x79, Max 0x79
Samples Per Chunk: Min 1, Avg 1, Max 1
Count 7368, [01 48 20] Fixed Size 0x79
----------------------
Now run the following command to start recovering:
recover_mp4.exe corrupted_file result.h264 result.aac --cgo3
Then use ffmpeg to mux the final file:
ffmpeg.exe -r 9.001 -i result.h264 -i result.aac -bsf:a aac_adtstoasc -c:v copy -c:a copy result.mp4