Вчера я снимал сцену с моим телефоном, но внезапно приложение упало, и когда я пытаюсь открыть сгенерированный m4v, он говорит, что поврежден.
Я загрузил видеофайлы (около 36 МБ) на свой компьютер и пытаюсь открыть и восстановить их. Можете ли вы предложить мне способ сделать это?
FFMPEG информация
Как предлагается в комментариях, я пытаюсь проверить, что FFMPEG говорит мне об этом файле с этой командой
ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt
Вот это результат:
ffmpeg version N-40126-ga4b58fd Copyright (c) 2000-2012 the FFmpeg developers
built on Apr 26 2012 03:29:50 with gcc 4.6.3
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 51. 47.100 / 51. 47.100
libavcodec 54. 15.100 / 54. 15.100
libavformat 54. 3.100 / 54. 3.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 72.100 / 2. 72.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 11.100 / 0. 11.100
libpostproc 52. 0.100 / 52. 0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 003fc940] moov atom not found
VID_20120425_144739.m4v: Invalid data found when processing input
Последние две строки отображаются красным цветом.
Ответы:
Можно восстановить поврежденный файл mp4 или m4v с помощью Untrunc .
Для этого метода вам нужен еще один видеофайл с того же устройства, который не сломан.
Как установить
untrunc
Для компиляции вам понадобится установка Linux (в идеале Ubuntu) и базовые возможности использования командной строки. Вы также можете пропустить эту часть и запустить
untrunc
через Docker (см. Ответ ниже ), если он у вас есть.Вот что нужно сделать:
Установите несколько обязательных библиотек с помощью этой команды:
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
Получите исходный код для Untrunc из репозитория GitHub (выберите один метод):
wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
git clone https://github.com/ponchio/untrunc.git && cd untrunc
Скомпилируйте исходный код с помощью этой команды (все в одной строке):
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil
(вы можете попробовать пропустить этот шаг и использовать готовый исполняемый файл, но у меня это не сработало)
Тогда вы действительно можете исправить видео. Вам нужно как сломанное видео, так и пример рабочего видео.
Как исправить видео
Найдите другое рабочее видео, в идеале с той же камеры и желательно по крайней мере столько же, сколько сломанное; также то же самое разрешение, если это возможно (я думаю, что это может помочь, хотя и не обязательно).
Запустите эту команду в папке, где вы распаковали и скомпилировали Untrunc, но замените
/path/to/...
биты двумя вашими видеофайлами:Затем он должен сжать и, надеюсь, создать воспроизводимый файл под названием
broken-video_fixed.m4v
Вот и все, что вы сделали!
VLC Media Player теперь должен воспроизводить файл. Однако это может быть сообщение о неверной информации о длине (Untrunc пытается угадать / разобраться с этим, но не всегда делает это правильно). Чтобы это исправить, попробуйте перекодировать видео через другую программу.
[Спасибо комментарию slhck за предложение попробовать Untrunc.]
[Большое спасибо Федерико Пончио за то, что он в первую очередь написал Untrunc, чтобы решить эту проблему.]
источник
untrunc-master
. Затем запустите: ./untrunc goodfile.mp4 badfile.mp4 Это заняло около 3 минут для файла 2 ГБ, и мне нужно было только повторно синхронизировать звук. Все остальное было в порядке.Если кто-то наткнулся на это, я также попробовал приложение, о котором говорил воробей, но у меня это не сработало (см. Некоторые отчеты об ошибках, которые я создал в репозитории разработчиков). Может быть, это потому, что это был не файл mp4, а файл MOV ...
Мне помог этот пост: http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found
Они ссылаются на программу под названием «HD Video Repair Utility» ( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ), которая намного дешевле, чем Treasured ( http://aeroquartet.com/movierepair/repair ). , Они даже указали, что существует более ранняя его версия (версия 1.5), которая ничего не стоит ( http://nagasoft.cn/download/videorepair1.5.zip )!
Я попытался восстановить файл, используя версию 1.5, и получил его частично работающим. После перекодирования с помощью ffmpeg (там есть ошибки) я понял, что часть звука пропала. В журналах (к счастью, есть утилита Video Repair Utility) больше не упоминалось аудио после определенного времени. Я возьму это как есть ...
источник
Вы можете установить
docker
(доступно для всех основных операционных систем) и запустить:Синтаксис для Bash под Linux или macOS. Здесь,
GOOD-reference-file.MP4
иBAD-corrupt-file.md5
оба должны быть в вашем текущем каталоге, и каталог будет смонтирован/vol
в контейнере Docker.Прочитайте другие комментарии вокруг для более подробного объяснения.
Это было самым быстрым для меня!
источник
Dockerfile
это доступно здесь, если кто-то захочет увидеть, что это будет запущено, прежде чем выполнять его на вашем компьютере: github.com/synctree/docker-untrunc В настоящее время естьDockerfile
и реальныйuntrunc
репозиторий - я не тестировал ни, ни сравнивал их подробно, но@sparrowt Ваши текущие инструкции не работали на моей последней установке Ubuntu 16.10. Я получил следующую ошибку при компиляции Untrunc:
Как объясняется в репозитории untrunc , вам может потребоваться загрузить libav отдельно, а не использовать версию в репозитории Ubuntu. Следующий код работал для меня:
Это создало файл с именем broken-video_fixed.mp4, который работал для меня. Большое спасибо за инициирование этой темы.
источник
h264dec.h
? потому чтоtrack.cpp
пытается включить его, и я не могу найти его где-либо: /sudo apt-get install yasm
,sudo apt-get install libbz2-dev
и, чтобы преодолеть неопределенную ссылку на «clock_gettime», добавить-lrt
в концеg++
командной строки (см stackoverflow.com/a/2418175/550712 ). Преобразовано около 2/3 моего видео.Если untrunc не поддерживает кодек внутри вашего файла, вы можете попытаться исправить это с помощью шестнадцатеричного редактора:
mdat
раздел в файле «ok» наmdat
раздел в «сломанном» файле без заголовка (т.е. копируйте только байты после «mdat»)mdat
раздела, текущее значение будет старым размером ("нормально"mdat
размер раздела файла ), замените его новым размером (" битый »mdat
размер раздела файла )В итоге я написал простую программу для этого: https://github.com/golimarrrr/fix-3gp
Как программа, так и вручную с помощью шестнадцатеричного редактора должны создать один и тот же фиксированный файл.
источник
Вы пытались открыть файл с VLC Player ? Обычно он неплохо восстанавливает поврежденные файлы.
источник