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

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



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

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

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

$ ffmpeg WIN_20200204_17_08_00_Pro.mp4
ffmpeg version N-95993-ge1d836d Copyright (c) 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 (c) 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] <b>moov atom not found</b>
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 https://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