Поврежденный MP4 [запись прервана]

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

Чтобы исправить это, я попробовал Avidemux, я пробовал множество программ, перечисленных в других вопросах на stackexchange. И пока ничего не получилось.

Вывод ffmpeg -i выглядит следующим образом:

  libavutil      55. 24.100 / 55. 24.100
  libavcodec     57. 43.100 / 57. 43.100
  libavformat    57. 37.100 / 57. 37.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 46.100 /  6. 46.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000262d040] moov atom not found
2016_05_27_20_08_12-ses.mp4: Invalid data found when processing input

Вывод медиаинформации:

General
Complete name                            : F:\vids\2016_05_27_20_08_12-ses.mp4
Format                                   : MPEG-4
Format profile                           : Base Media / Version 2
Codec ID                                 : mp42 (mp41/isom)
File size                                : 1.21 GiB

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

Может ли кто-нибудь помочь мне здесь?

Иногда мне удавалось работать с mplayer, когда ffmpeg не заботился о файле. Как бы то ни было, я не так уверен, как вы, что файл содержит достаточно достоверных данных, чтобы его можно было использовать.
Аналогичные вопросы по суперпользователю: superuser.com/q/1033251/514709 и superuser.com/q/417100/514709 .

Ответы (3)

Недавно я столкнулся именно с этой проблемой, и мне удалось восстановить файл с помощью Untrunc , программы, созданной специально для решения этой проблемы, как было предложено sparrowt в SuperUser :

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

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

  • установка 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/... двумя вашими видеофайлами:

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

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

Вот и все!

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

У меня есть эта ошибка при попытке построить:track.cpp:60:32: fatal error: libavcodec/h264dec.h
@unfa У меня та же проблема, поэтому я использовал порт untrunc , созданный @anthwlock, который намного проще собрать и установить.

Обновлено : этот инструмент теперь может восстанавливать файлы из большего количества источников.

Попробуйте с помощью recovery_mp4_to_h264 . Это программа командной строки, и для нее потребуется хороший справочный файл.

Использование, как указано:

recover_mp4 in_good_similar.mp4 --analyze
recover_mp4 in_corrupted.mp4 {out_video.h264 | out_video.hevc | --novideo} [out_audio.aac | out_audio.wav | out_audio.mp3 | out_audio.raw | --noaudio] [options]
Я пробовал это раньше, он сказал, что формат не поддерживается.
Restore.media , компания, которая делает recover_mp4файлы , больше не предлагает эту загрузку, а вместо этого только восстанавливает файлы онлайн через свой сайт (за определенную плату). Вы по-прежнему можете получить более раннюю версию этого инструмента (по закону; Restore.media даже предоставляет прямую ссылку для загрузки ). К сожалению, исходный код закрыт и доступен только для Windows (32/64 бит)...

Вы также можете, чтобы избавить себя от проблем, сначала проверьте наличие данных. Размер файла составляет 1,21 ГБ, правильно ли это для времени, пока вы не потеряли питание?

Я упоминаю об этом, потому что некоторые программы сначала записывают данные в память... иногда очень большие куски данных, прежде чем фактически зафиксировать их на диске.

С MP4 видео должно воспроизводиться, если оно имеет допустимые заголовки, до последнего хорошего пакета, содержащего правильные кадры key/i.

Что приходит мне в голову, так это то, что данных может и не быть, например, они были зафиксированы в памяти, а не на диске -- я бы сделал тестовую запись (учитывая время, когда это "должно быть", и сравнил файл размеры). Прежде чем прыгать через обручи.

Атом MOOV, содержащий информацию о потоке и позиции выборки, записывается во время завершения файла, т. е. когда все данные медиапотока зафиксированы на диске. У вас может быть MP4 с атомом MOOV заранее только с информацией о потоке, что делает файл воспроизводимым, но не доступным для поиска. Однако очень немногие приложения или устройства записывают MP4 таким образом.
Bandicam, очень популярное приложение для захвата экрана, имеет опцию относительно того, как часто оно фиксирует данные, захваченные в оперативной памяти, на диск, поэтому я упомянул об этом — просто для проверки. Существует так много программных приложений. Недоступный для поиска файл также можно исправить с помощью ffmpeg, и VLC также может сделать это, вставив в соответствующие ключевые кадры. Другим примером больших перезаписей кеша являются продукты AJA, некоторые из которых не будут выполнять запись на диск, пока не пройдет 60 секунд.
Я попытался использовать бесплатное программное обеспечение, чтобы посмотреть, можно ли его восстановить, и да, данные определенно есть. Видеоданные минимум. Однако, как я уже сказал, я действительно не хочу покупать программное обеспечение для одного видеофайла, мне не нужно так много.