Как победить ошибку вида «moov atom not found» в видеофайлах утилитой Untrunc и сохранить информацию

Всем, кто не смог воспроизвести файл видео с приложения «Камера» Windows 10, посвящена эта статья.

У автора статьи при работе приложения «Камера» Windows 10 на протяжении нескольких лет «случайно» выходила из строя батарейка ноутбука, и репортажный материал просто улетал в корзину…



Всех, кому необходима помощь с видеоданными, — прошу под кат.



Общим местом этой статьи является использование утилиты ffmpeg. Настоятельно советую ознакомиться с возможностями этой утилиты.

Работа будет проходить под Ubuntu 16.04. Эта утилита в ней есть. Но надо не забывать проверять ее новые версии. Плюс к этому, при работе с картами и винчестерами есть дополнительные проблемы при восстановлении поврежденных файловых систем и файлов. Об этом тоже лучше прочитать специализированные статьи. Считаем, что файл вы смогли достать.

$ ffmpeg WIN_20200204_17_08_00_Pro.mp4
ffmpeg version N-95993-ge1d836d Copyright © 2000-2019 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
Output #0, mp4, to 'WIN_20200204_17_08_00_Pro.mp4':
Output file #0 does not contain any stream


$ ffprobe WIN_20200204_17_08_00_Pro.mp4
ffprobe version N-95993-ge1d836d Copyright © 2007-2019 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
libavutil 56. 36.101 / 56. 36.101
libavcodec 58. 64.101 / 58. 64.101
libavformat 58. 35.101 / 58. 35.101
libavdevice 58. 9.101 / 58. 9.101
libavfilter 7. 68.100 / 7. 68.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x4215140] moov atom not found
WIN_20200204_17_08_00_Pro.mp4: Invalid data found when processing input


1. Сначала ставим в Ubuntu 16.04 библиотеку libui. В принципе, если вы привыкли работать
с командной строки, действия можно пропустить.

$ # need pip3 to install meson
$ sudo apt install python3-pip libgtk-3-dev ninja-build
$ # need meson 0.48 or higher to build libui
$ sudo -H pip3 install meson
$ git clone github.com/andlabs/libui.git
$ cd libui
$ meson setup build # [options]
$ ninja -C build
$ ./build/meson-out/controlgallery
$ sudo ninja -C build install

2. Ставим утилиту untrunc по ее инструкции.
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
# get the source code
make
sudo cp untrunc /usr/local/bin
sudo apt-get install libva-dev liblzma-dev libx11-dev libbz2-dev zlib1g-dev yasm pkg-config wget
make FF_VER=3.3.9
sudo cp untrunc /usr/local/bin


Если надо, подключаем интерфейс.
make untrunc-gui


Дальше — два файла — битый и не битый. Привожу скриншоты действий:









Если ставили без gui, то
./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v


Практические наблюдения и предупреждения.
  • Не делайте это под Windows (хотя такое возможно), зоопарк кодеков иногда не может физически работать с разновидностью заданного типа файла.
  • Ubuntu 16.04 имеет утилиту ffmpeg в репозитории. Если необходимо, то можно взять более свежую версию.
  • «Хорошее видео», которое тут используется, должно быть снято ЭТИМ ЖЕ устройством, с ЭТИМИ же форматными кодеками, и должно быть больше по длине минут на десять.
  • Восстановленный файл имеет наименование WIN_20200204_17_08_00_Pro.mp4_fixed-s2.mp4, где есть слово fixed и набор ключей, под которыми проходил запуск. Сильно меньше или больше исходного плохого файла он быть не может.
  • Если хорошего видео нет, берем хотя бы минуту, но, к сожалению, чаще всего получим только речевой поток. Увы… Утилита не всесильна.


Технология работает для многих других устройств и приложений, которые не смогли закрыть видеофайл.

Всем успехов в восстановлении ценной информации!

Небольшой справочник по командам:

$ ./untrunc
Usage: untrunc [options] <ok.mp4> [corrupt.mp4]

general options:
-V — version
-n — no interactive

repair options:
-s — step through unknown sequences
-st <step_size> — used with '-s'
-sv — stretches video to match audio duration (beta)
-dw — don't write _fixed.mp4
-dr — dump repaired tracks, implies '-dw'
-k — keep unknown sequences
--dyn — use dynamic stats

analyze options:
-a — analyze
-i[t|a|s] — info [tracks|atoms|stats]
-d — dump samples
-f — find all atoms and check their lenghts
-m — match/analyze file offset
untrunc <ok.mp4> <ok.mp4> — report wrong values

other options:
-ms — make streamable

logging options:
-q — quiet, only errors
-w — show hidden warnings
-v — verbose
-vv — more verbose
Источник: habr.ru