Я записываю некие беседы на мобильник в формат AAC. Иногда в процессе записи у него заряд уходит в ноль и процесс записи прерывается. При этом в файле оказывается "что успели записать" (последний фрейм длиной 570 байт), потом идет какой-нибудь короткий мусор. Файл в итоге битый - ни в одном редакторе и ни в одном плеере мне его прочитать не удаётся:
Формат нормального файла:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'recording2016-01-17 14-58-50.aac':
Metadata:
major_brand : isom
minor_version : 0
compatible_brands: isom3gp4
creation_time : 2016-01-17 13:37:50
Duration: 01:38:59.62, start: 0.000000, bitrate: 98 kb/s
Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 98 kb/s (default)
Metadata:
creation_time : 2016-01-17 13:37:50
handler_name : SoundHandle
Что говорит ffmpeg на битый файл:
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000036eac0] moov atom not found
recording2016-03-13 18-48-21.bak: Invalid data found when processing input
Как показало расследование в конце файла отсутствует в принципе
moov atom.
Вот пример списка нод (атомов) полноценного файла (вывод программы
AtomicParsLey):
Atom ftyp @ 0 of size: 24, ends @ 24
Atom free @ 24 of size: 3072, ends @ 3096
Atom mdat @ 3096 of size: 2937162, ends @ 2940258
Atom moov @ 2940258 of size: 21147, ends @ 2961405
Atom mvhd @ 2940266 of size: 108, ends @ 2940374
Atom trak @ 2940374 of size: 21031, ends @ 2961405
Atom tkhd @ 2940382 of size: 92, ends @ 2940474
Atom mdia @ 2940474 of size: 20931, ends @ 2961405
Atom mdhd @ 2940482 of size: 32, ends @ 2940514
Atom hdlr @ 2940514 of size: 44, ends @ 2940558
Atom minf @ 2940558 of size: 20847, ends @ 2961405
Atom smhd @ 2940566 of size: 16, ends @ 2940582
Atom dinf @ 2940582 of size: 36, ends @ 2940618
Atom dref @ 2940590 of size: 28, ends @ 2940618
Atom stbl @ 2940618 of size: 20787, ends @ 2961405
Atom stsd @ 2940626 of size: 91, ends @ 2940717
Atom mp4a @ 2940642 of size: 75, ends @ 2940717
Atom esds @ 2940678 of size: 39, ends @ 2940717
Atom stts @ 2940717 of size: 32, ends @ 2940749
Atom stsz @ 2940749 of size: 20608, ends @ 2961357
Atom stsc @ 2961357 of size: 28, ends @ 2961385
Atom stco @ 2961385 of size: 20, ends @ 2961405
------------------------------------------------------
Total size: 2961405 bytes; 21 atoms total. AtomicParsley version: 0.9.0 (utf16)
Media data: 2937162 bytes; 24243 bytes all other atoms (0.819% atom overhead).
Total free atom space: 3072 bytes; 0.104% waste.
------------------------------------------------------
А вот атомы битого файла:
Atom ftyp @ 0 of size: 24, ends @ 24
Atom free @ 24 of size: 3072, ends @ 3096
Atom mdat @ 3096 of size: 32178176, ends @ 32181272
------------------------------------------------------
Total size: 32181272 bytes; 2 atoms total. AtomicParsley version: 0.9.0 (utf16)
Media data: 32178176 bytes; 3096 bytes all other atoms (0.010% atom overhead).
Total free atom space: 3072 bytes; 0.010% waste. Padding available: 0 bytes.
------------------------------------------------------
или
Atom ftyp @ 0 of size: 24, ends @ 24
Atom free @ 24 of size: 3072, ends @ 3096
Atom mdat @ 3096 of size: 59281408, ends @ 59284504
------------------------------------------------------
Total size: 59284504 bytes; 2 atoms total. AtomicParsley version: 0.9.0 (utf16)
Media data: 59281408 bytes; 3096 bytes all other atoms (0.005% atom overhead).
Total free atom space: 3072 bytes; 0.005% waste. Padding available: 0 bytes.
------------------------------------------------------
Вдумчивое и упорное гугление ни к чему не привело (нашлась одна программа под мак, которая
"восстановить локально файл не могу, давайте его отправим на сайт и все за 299 долларов мы его восстановим?" Что, разумеется, не вариант.
Кто виноват я знаю.
Что делать?