Pull to refresh

Восстановление повреждённого видеофайла с квадрокоптера

Случилось страшное: съездил в очередное интересное место в области (так как заграницы нынче недоступны), отлетал и отснимал на Мавике хороший материал, добрался до компьютера, чтобы его обработать, и внезапно:

image

Казалось бы, не страшно, такое бывает, и нам поможет VLC или ffmpeg, но они так же отказались как-либо воспроизводить файл. Так как ехать снова пару сотен километров с целью переснять материал было вообще не вариант, стал искать пути решения проблемы.

Обычно я веду съёмку с квадрокоптера непрерывно, так как нередко бывали моменты, что либо забываешь нажать на кнопку начала съёмки, либо, что ещё более обидное, вместо старта съёмки останавливаешь её, а вместо остановки — начинаешь, так как кнопка старт/стоп одна. Так что пишу видео нон-стоп, а потому уже нарезаю в видеоредакторе как нужно. Видео же пишется, сохраняясь в файлы по 4 гигабайта.

Итого, у меня есть два файла: первый битый, и второй нормальный. Беглое изучение байт-кода первого файла показало, что он не пуст, то есть проблема была именно в завершении записи файла. Стоит отметить, что за несколько лет использования Мавика такая ситуация сложилась впервые.

Беглые поиски решения проблемы привели к утилите untrunc. Суть утилиты в том, что на вход ей требуются два файла: нечитаемый и корректный. И обязательное условие для файлов: они должны быть сняты одним и тем же устройством. Как раз мой случай!

Но если для пользователей Windows предлагается уже готовое решение, всем остальным предлагается сбилдить утилиту самостоятельно, благо, есть подробная инструкция. И вот не знаю, то ли делал я что-то не так, то ли ещё что, но ни локально в OSX, ни в контейнере Ubuntu 16.04 сбилдить утилиту, следуя инструкциям, у меня не получилось. И хотел я уже было оставить попытки завести untrunc, как наткнулся на пункт в инструкции про докер-контейнер. Итог: если у вас есть установленный Docker, проблема с незавершённым видеофайлом решается буквально в несколько команд:

% git clone https://github.com/anthwlock/untrunc.git && cd untrunc
% docker build -t untrunc .
% cd ..
% docker run -v `pwd`:/mnt untrunc /mnt/DJI_0002.MOV /mnt/DJI_0001.MOV

А именно:

  1. клонируем репозиторий
  2. запускаем из его каталога билд контейнера
  3. запускаем сам контейнер с монтированием каталога с видео и указанием «небитого» и «битого» видеофайлов.

Для двух файлов 4К, размер «битого» — 4 гигабайта, размер читающегося — 3 гигабайта, весь процесс занял примерно две с половиной минуты. Ну и ещё менее минуты предварительно на билд контейнера. В результате был создан читающийся всеми проигрывателями файл DJI_0001.MOV_fixed.MOV, и что интересно, так это что его размер вопреки ожиданиям не увеличился, а наоборот уменьшился на 640 килобайт.

В результате проблема решена, можно смело переходить к видеомонтажу:

image
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.