Як відкрити та відновити відеофайл m4v або mp4?


59

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

Останні два рядки відображаються червоним кольором.


Моя ОС - це Windows 7, але при необхідності я можу підготувати віртуальну машину з дистрибутивом на базі Linux.
Дрейк

@slhck Дякую за допомогу, я зробив те, що ви запропонували, і оновив питання.
Дрейк

7
Ах, саме цього я і очікував. Атом MOOV - це частина даних, необхідна для доступу до необроблених відеопотоків всередині контейнера MP4 / M4V. В Інтернеті є багато інструментів "ремонту відео", але я б не довіряв більшості з них. Ви, звичайно, можете їм постріляти - просто нічого не платите. Що виглядає багатообіцяючим, це Untrunk , який, здається, закодований для цієї точної проблеми (а саме відсутній атом MOOV). Або AtomicParsley . Удачі!
slhck

1
Як виправити зламаний mp4 за допомогою AtomicParsley?
chovy

Відповіді:


60

Виправити зламаний файл mp4 або m4v можна за допомогою Untrunc .

Для цього методу вам потрібен ще один відеофайл із того ж пристрою, який не зламаний.

Як встановити untrunc

Для компіляції потрібна установка Linux (в ідеалі Ubuntu) та основна здатність використовувати командний рядок. Ви також можете пропустити цю частину та запустити untruncчерез Docker (див . Відповідь нижче ), якщо у вас є.

Ось що робити:

  1. Встановіть кілька необхідних бібліотек за допомогою цієї команди:

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

  2. Отримайте вихідний код для 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
  3. Складіть вихідний код за допомогою цієї команди (всі в одному рядку):

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

    (ви можете спробувати пропустити цей крок і скористатися готовим виконаним файлом, але це не спрацювало для мене)

  4. Тоді ви можете фактично виправити відео. Вам потрібно як розбите відео, так і приклад робочого відео.

Як виправити відео

Знайдіть ще одне робоче відео, в ідеалі з тієї самої камери і бажано принаймні до тих пір, як поламане; також така ж резолюція, якщо це можливо (я вважаю, що це може допомогти, хоча це не суттєво).

Запустіть цю команду в папці, де ви розпакували та компілювали 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

3
Дякую @Alex Я оновив посилання. На цій відповіді ґрунтовно читається Readme on github!
горобець

1
Дав би рішення на основі Windows. < superuser.com/questions/938185/recover-incomplete-video-files > оскільки у мене немає доступу до Інтернету в моїх Linux-дистрибутивах.
RogUE

2
FWIW це не створило для мене жодного відтворюваного відео - але запуск recovery_mp4_to_h264 через вино працював добре.
Укладач

1
Untrunc працював на мене, але мені довелося помістити обидва відео файли у підкаталог прихованої папки .untrunc з назвою untrunc-master. Потім запустіть: ./untrunc goodfile.mp4 badfile.mp4 Для файлу 2 Гб пішло близько 3 хвилин, і мені довелося лише повторно синхронізувати звук. Все інше було добре.
user8547

8

Якщо хтось інший натикається на це, я також намагався говорити про горобця, про який він говорив, але це не спрацювало для мене (див. Кілька звітів про помилки, які я створив у сховищі розробників). Можливо, це було тому, що це був не 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 (там з'явилися деякі помилки) я зрозумів, що частина аудіо пішла. У журналах (із задоволенням у програмі для ремонту відео є кілька) більше не було згадок про аудіо через певний час. Я прийму це як є ...


3
URL-адреса DROPBOX мертва. знайдено альтернативу: nagasoft.cn/download/videorepair1.5.zip
T.Todua

2
@ T.Todua, дякую за повідомлення. Я замінив посилання для випуску на вказане вами посилання.
SimonSimCity

8

Ви можете встановити docker(доступний для всіх основних операційних систем) та запустити:

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

Синтаксис призначений для Bash під Linux або macOS. Тут GOOD-reference-file.MP4і вони BAD-corrupt-file.md5повинні бути у вашому поточному каталозі, і каталог буде встановлений /volу контейнер Docker.

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

Це було найшвидше для мене!


Дякуємо @slhck, Dockerfileтут доступний, якщо хтось хоче побачити, що це буде працювати перед тим, як виконати його на вашому комп’ютері: github.com/synctree/docker-untrunc Також Dockerfileу фактичному untruncсховищі зараз є - я не перевіряв ані порівняння. детально про них, але згадуйте їх тут для повноти: github.com/ponchio/untrunc/blob/master/Dockerfile
sparrowt

7

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

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();

Як пояснено в сховищі непідключення , можливо, вам доведеться завантажувати 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

Це створило файл з назвою break-video_fixed.mp4, який працював на мене. Дякую тобі за започаткування цієї теми.


1
Дякую! У рядку компіляції непідключення у мене було кілька помилок у рядках "невизначеної посилання на` BZ2_bzDecompressInit '", мені довелося додати -lbz2
Andrew Smart

Він не може обробляти великі файли. Просто здається.
Кен Шарп

Чи містить у вас libav h264dec.h? тому що track.cppнамагається включити його, і я не можу його знайти де завгодно: /
x29a

Цю залежність додали з комісією github.com/ponchio/untrunc/commit/… 10 жовтня 2017 року. Я вважаю, що вам зараз доведеться завантажувати libav-12.2, а не libav-0.8.7
freeseek

Нарешті отримав це для роботи над Ubuntu 14.04.5 LTS. Довелося бігти sudo apt-get install yasm, sudo apt-get install libbz2-devі, щоб подолати невизначену посилання на «clock_gettime», додати -lrtв кінці g++командного рядка (див stackoverflow.com/a/2418175/550712 ). Він конвертував приблизно 2/3 мого відео.
Марк Беррі

2

Якщо виправлення не підтримує кодек у вашому файлі, ви можете спробувати виправити його за допомогою шестигранного редактора:

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

Я закінчив кодувати просту програму для цього: https://github.com/golimarrrr/fix-3gp

Як програма, так і вручну за допомогою шестигранного редактора повинні створити однаковий фіксований файл


-3

Ви намагалися відкрити файл за допомогою VLC Player ? Зазвичай це досить добре для відновлення пошкоджених файлів.


8
Я думаю, це може стосуватися файлів AVI, де індекс можна вбудувати в пам'ять, але MP4-файл помилка "атом moov не знайдено" під час обробки ffmpeg нічого не відтворює у VLC.
Нд

2
VLC також не може відтворити його, у моєму випадку (файл .mov)
rogerdpack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.