Как открыть и восстановить видео файл m4v или mp4?

99157
Drake

Вчера я снимал сцену с моим телефоном, но внезапно приложение упало, и когда я пытаюсь открыть сгенерированный 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 

Последние две строки отображаются красным цветом.

47
Моя ОС - Windows 7, но при необходимости я могу подготовить виртуальную машину с дистрибутивом на основе Linux. Drake 12 лет назад 0
@slhck Спасибо за помощь, я сделал то, что вы предложили, и обновил вопрос. Drake 12 лет назад 0
Ах, это то, что я ожидал. Атом MOOV - это фрагмент данных, который необходим для доступа к необработанным видеопотокам внутри контейнера MP4 / M4V. В Интернете есть множество инструментов для «восстановления видео», но я бы не стал доверять большинству из них. Вы, конечно, можете дать им шанс - просто не платите ни за что. Многообещающим выглядит [Untrunk] (http://vcg.isti.cnr.it/~ponchio/untrunc.php), который, по-видимому, закодирован именно для этой проблемы (а именно отсутствующего атома MOOV). Или [AtomicParsley] (http://atomicparsley.sourceforge.net/). Удачи! slhck 12 лет назад 7
Как я могу исправить сломанный mp4 с AtomicParsley? chovy 8 лет назад 1

6 ответов на вопрос

49
sparrowt

С помощью Untrunc можно восстановить поврежденный файл mp4 или m4v .

Для этого метода вам нужно:

  • другой видео файл, который не сломан

  • установка Linux (я использовал Ubuntu 12.04) и базовые возможности использования командной строки.

Вот что нужно сделать:

  1. Установите несколько обязательных библиотек с помощью этой команды:

    sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev

  2. Загрузите исходный код для Untrunc из репозитория github:

    wget https://github.com/ponchio/untrunc/archive/master.zip

  3. Разархивируйте исходный код:

    unzip master.zip

  4. Перейдите в каталог, где он был распакован:

    cd untrunc-master

  5. Скомпилируйте исходный код с помощью этой команды (все в одной строке):

    g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil

    (вы можете попробовать пропустить этот шаг и использовать готовый исполняемый файл, но у меня это не сработало)

  6. Тогда вы действительно можете исправить видео. Вам нужно как сломанное видео, так и пример рабочего видео.

    В идеале видео должно быть с одной и той же камеры и иметь такое же разрешение (у меня было, но оно могло бы работать без). Также, если это по крайней мере так же долго, как сломанный (предпочтительно примерно то же самое), это может помочь.

    Запустите эту команду в папке, где вы распаковали и скомпилировали Untrunc, но замените биты / path / to / ... вашими 2 видеофайлами:

    ./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v

    Затем он должен откачать и, надеюсь, создать воспроизводимый файл с именем broken-video_fixed.m4v

Вот и все, что вы сделали!

VLC Media Player теперь должен воспроизводить файл. Однако это может быть сообщение о неправильной информации о длине (Untrunc пытается угадать / разобраться с этим, но не всегда делает это правильно). Чтобы это исправить, попробуйте перекодировать видео через другую программу.

[Спасибо комментарию slhck за предложение попробовать Untrunc.]

[Большое спасибо Федерико Пончио за то, что он в первую очередь написал Untrunc, чтобы решить эту проблему.]

Круто, спасибо за предоставление полной инструкции здесь! slhck 11 лет назад 0
Это сработало для меня, однако мне пришлось использовать самый последний код от Github [здесь] (https://github.com/ponchio/untrunc) вместо предоставленной ссылки. Alex 9 лет назад 0
Спасибо @Alex Я обновил ссылку. Забавный файл Readme на github основан на этом ответе! sparrowt 9 лет назад 3
Дало бы решение на основе Windows. так как у меня нет доступа в интернет в моем дистрибутиве Linux. RogUE 9 лет назад 1
Ваш метод на самом деле работает. Огромное спасибо. :) Juan Carlos Kuri Pinto 9 лет назад 0
РАБОТАЕТ! Отлично сработано. Erdinc Ay 8 лет назад 0
FWIW это не произвело для меня ни одного воспроизводимого видео - но работа с [wine_mp4_to_h264] (http://slydiman.me/eng/mmedia/recover_mp4.htm) через wine работала хорошо. The Compiler 8 лет назад 2
Из arch linux вы можете установить unrrunc из репозитория Arch: https://aur.archlinux.org/packages/untrunc-git/ Michael Kern 8 лет назад 0
У меня работал Untrunc, но мне пришлось поместить оба видеофайла в подкаталог скрытой папки .untrunc с именем `untrunc-master`. Затем запустите: ./untrunc goodfile.mp4 badfile.mp4 Это заняло около 3 минут для файла 2 ГБ, и мне нужно было только повторно синхронизировать звук. Все остальное было в порядке. user8547 8 лет назад 0
Спасибо, это сработало! Хотя мне пришлось `sudo apt-get install unzip g ++` на виртуальной машине, которую я создал, для запуска Untrunc; похоже, что эти команды не включены в Ubuntu по умолчанию. Звук в восстановленном файле также не синхронизирован с видео, и кажется, что видео ускоряется и замедляется случайным образом. Я предполагаю, что это потому, что я снимал с переменной частотой кадров ... http://video.stackexchange.com/q/19052/16308 Ajedi32 8 лет назад 0
Работал и для меня. Сначала я невежественно попробовал пару `dd if = ok-file.mp4 of = / tmp / broken-file.mp4 bs = 1056 count = 1 conv = notrunc` с увеличением размера блока, но безуспешно. Тогда unrrunc быстро и без проблем решил мою проблему. Avio 8 лет назад 0
Вы также можете использовать образ Docker здесь: https://hub.docker.com/r/synctree/untrunc/ таким образом, вам не нужно устанавливать и компилировать все вещи. Быстрый бег, и это решило это для меня !! abourget 7 лет назад 0
6
SimonSimCity

Если кто-то еще наткнулся на это, я также попробовал приложение, о котором говорил воробей, но у меня это не сработало (см. Некоторые отчеты об ошибках, которые я создал в репозитории разработчиков). Может быть, это потому, что это был не файл 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 (там были некоторые ошибки) я понял, что часть звука пропала. В журналах (к счастью, есть утилита восстановления видео) больше не было упоминания аудио по прошествии определенного времени. Я возьму это как есть ...

URL-адрес DROPBOX мертв. найденная альтернатива: ** http: //nagasoft.cn/download/videorepair1.5.zip** T.Todua 7 лет назад 1
@ T.Todua, спасибо за уведомление. Я заменил дропбокс-ссылку на предоставленную вами ссылку. SimonSimCity 7 лет назад 1
6
freeseek

@sparrowt Ваши текущие инструкции не работали на моей последней установке Ubuntu 16.10. Я получил следующую ошибку при компиляции Untrunc:

track.cpp: In member function ‘int Codec::getLength(unsigned char*, int)’: track.cpp:204:40: error: ‘avcodec_alloc_frame’ was not declared in this scope AVFrame *frame = avcodec_alloc_frame(); 

Как объясняется в репозитории untrunc, вам может потребоваться загрузить libav отдельно, а не использовать версию в репозитории Ubuntu. Следующий код работал для меня:

sudo apt-get install unzip yasm g++ zlib1g-dev libbz2-dev cd /tmp/ wget https://github.com/ponchio/untrunc/archive/master.zip unzip master.zip cd untrunc-master wget http://libav.org/releases/libav-12.2.tar.xz tar xvf libav-12.2.tar.xz cd libav-12.2 ./configure make cd .. g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -I./libav-12.2 -L./libav-12.2/libavformat -lavformat -L./libav-12.2/libavcodec -lavcodec -L./libav-12.2/libavresample -lavresample -L./libav-12.2/libavutil -lavutil -lpthread -lz -lbz2 ./untrunc /path/to/working-video.mp4 /path/to/broken-video.mp4 

Это создало файл с именем broken-video_fixed.mp4, который работал для меня. Большое спасибо за инициирование этой темы.

Спасибо! В строке компиляции Untrunc у меня было несколько ошибок в соответствии с «неопределенной ссылкой на` BZ2_bzDecompressInit '", мне пришлось добавить -lbz2 Andrew Smart 7 лет назад 1
Он не может обрабатывать большие файлы. Просто сдается. Ken Sharp 7 лет назад 0
Содержит ли ваша libav `h264dec.h`? потому что `track.cpp` пытается включить его, и я не могу его найти нигде: / x29a 7 лет назад 0
Эта зависимость была добавлена ​​с помощью коммита https://github.com/ponchio/untrunc/commit/63254cacdd79d0a6b26373424a75c7459673d402#diff-cccc67908b2f1e13cf272e8122344d24 10 октября 2017 года. Я полагаю, что теперь libav больше, чем 0.8av-12.2.2 freeseek 6 лет назад 0
Наконец-то получил это для работы на Ubuntu 14.04.5 LTS. Пришлось запустить `sudo apt-get install yasm`,` sudo apt-get install libbz2-dev` и, чтобы преодолеть неопределенную ссылку на 'clock_gettime', добавить `-lrt` в конец командной строки` g ++ `( см. https://stackoverflow.com/a/2418175/550712). Это преобразовало приблизительно 2/3 моего видео. Mark Berry 6 лет назад 0
3
abourget

Если у вас последний дистрибутив Ubuntu, вы можете установить dockerи запустить:

docker run -v `pwd`:/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt 

Прочитайте другие комментарии вокруг для более подробного объяснения.

Это было самым быстрым для меня!

0
golimar

Если untrunc не поддерживает кодек внутри вашего файла, вы можете попытаться исправить это с помощью шестнадцатеричного редактора:

  1. получить другой файл с тем же форматом, я получил больший, но, вероятно, подойдет любая длина
  2. открыть оба файла в шестнадцатеричном редакторе
  3. замените mdatраздел в файле «ok» на mdatраздел в «сломанном» файле без заголовка (т.е. копируйте только байты после «mdat»)
  4. это, вероятно, уже будет работать так, если нет, то 4 байта перед 'mdat' указывают размер mdatраздела, текущее значение будет старым размером ( mdatразмер раздела файла "ok" ), замените его новым размером (" битый » mdatразмер раздела файла )

В итоге я написал простую программу для этого: https://github.com/golimarrrr/fix-3gp

Как программа, так и вручную с помощью шестнадцатеричного редактора должны создать один и тот же фиксированный файл.

-2
Carlos Manta

Вы пытались открыть файл с VLC Player ? Обычно он неплохо восстанавливает поврежденные файлы.

Я думаю, что это может относиться к файлам AVI, где индекс может быть встроен в память, но файл MP4 с ошибкой «атом moov не найден» во время обработки ffmpeg ничего не воспроизводит в VLC. Sun 9 лет назад 5
VLC не может воспроизвести его, в моем случае (файл .mov) rogerdpack 8 лет назад 2

Похожие вопросы