Wie öffnet und repariert man eine m4v oder mp4 Videodatei?


59

Gestern habe ich eine Szene mit meinem Handy gedreht, aber plötzlich ist die Anwendung abgestürzt und als ich versuche, das erzeugte m4v zu öffnen, heißt es, dass es beschädigt ist.

Ich habe die Videodateien (ca. 36 MB) auf meinen PC heruntergeladen und versuche, sie zu öffnen und zu reparieren. Können Sie mir einen Weg vorschlagen, dies zu tun?

FFMPEG info

Wie in den Kommentaren vorgeschlagen, versuche ich mit diesem Befehl zu überprüfen, was FFMPEG über diese Datei sagt

ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt

Hier ist das Ergebnis:

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

Die letzten beiden Zeilen werden rot angezeigt.


Mein Betriebssystem ist Windows 7, aber bei Bedarf kann ich eine virtuelle Maschine mit Linux-basierter Distribution vorbereiten.
Drake

@slhck Vielen Dank für Ihre Hilfe, ich habe die von Ihnen vorgeschlagene und aktualisierte Frage beantwortet.
Drake

7
Ah, das habe ich erwartet. Das MOOV-Atom ist ein Datenelement, das für den Zugriff auf die Rohvideoströme im MP4 / M4V-Container benötigt wird. Es gibt viele "Video Repair" -Tools online, aber ich würde den meisten nicht vertrauen. Sie können sie aber auf jeden Fall ausprobieren - zahlen Sie nur für nichts. Vielversprechend erscheint Untrunk , das genau für dieses Problem (nämlich ein fehlendes MOOV-Atom) codiert zu sein scheint. Oder AtomicParsley . Viel Glück!
Slhck

1
Wie kann ich mit AtomicParsley einen kaputten mp4 reparieren?
Chovy

Antworten:


60

Es ist möglich, die defekte mp4- oder m4v-Datei mit Untrunc zu reparieren .

Für diese Methode benötigen Sie eine andere Videodatei von demselben Gerät, die nicht beschädigt ist.

Wie installiert man untrunc

Zum Kompilieren benötigen Sie eine Linux-Installation (im Idealfall Ubuntu) und die grundlegende Fähigkeit, eine Befehlszeile zu verwenden. Sie können diesen Teil auch überspringen und untruncüber Docker ausführen (siehe Antwort unten ), wenn Sie das haben.

Das ist was zu tun ist:

  1. Installieren Sie mit diesem Befehl einige erforderliche Bibliotheken:

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

  2. Holen Sie sich den Quellcode für Untrunc aus dem GitHub-Repository (wählen Sie eine Methode):

    • wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
    • oder git clone https://github.com/ponchio/untrunc.git && cd untrunc
  3. Kompilieren Sie den Quellcode mit diesem Befehl (alle eine Zeile):

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

    (Sie können versuchen, diesen Schritt zu überspringen und die bereitgestellte ausführbare Datei zu verwenden, aber es hat bei mir nicht funktioniert.)

  4. Dann kannst du das Video tatsächlich reparieren. Sie benötigen sowohl das defekte Video als auch ein funktionierendes Beispielvideo.

Wie man das Video repariert

Finde ein anderes funktionierendes Video, idealerweise von derselben Kamera und vorzugsweise mindestens so lange wie die kaputte. auch die gleiche auflösung wenn möglich (ich glaube das kann helfen ist aber nicht unbedingt erforderlich).

Führen Sie diesen Befehl in dem Ordner aus, in dem Sie Untrunc entpackt und kompiliert haben, aber ersetzen Sie die /path/to/...Bits durch Ihre 2 Videodateien:

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

Dann sollte es weglaufen und hoffentlich eine abspielbare Datei namens erzeugen broken-video_fixed.m4v

Fertig!

Der VLC Media Player sollte nun in der Lage sein, die Datei abzuspielen. Es kann jedoch sein, dass die Längenangaben falsch sind (Untrunc versucht, dies zu erraten / herauszufinden, bringt es aber nicht immer richtig). Um dies zu beheben, versuchen Sie, das Video mit einem anderen Programm neu zu codieren.

[Danke an slhck's Kommentar für den Vorschlag, Untrunc auszuprobieren.]

[Vielen Dank an Federico Ponchio für die Codierung von Untrunc, um genau dieses Problem zu lösen.]


Cool, danke für die vollständige Anleitung hier!
Slhck

3
Danke @Alex Ich habe den Link aktualisiert. Amüsanterweise basiert die Readme auf Github auf dieser Antwort!
Sparrowt

1
Würde eine Windows-basierte Lösung geben. < superuser.com/questions/938185/recover-incomplete-video-files >, da ich in meinen Linux-Distributionen keinen Internetzugang habe.
Rogue,

2
FWIW das hat für mich keine abspielbaren Videos produziert - aber recover_mp4_to_h264 via wine hat gut funktioniert.
Der Compiler

1
Untrunc funktionierte für mich, aber ich musste beide Videodateien in das Unterverzeichnis des versteckten .untrunc-Ordners mit dem Namen legen untrunc-master. Führen Sie dann Folgendes aus: ./untrunc goodfile.mp4 badfile.mp4 Es dauerte ungefähr 3 Minuten für eine 2-GB-Datei, und ich musste nur das Audio neu synchronisieren. Alles andere war in Ordnung.
User8547

8

Wenn jemand anderes darüber stolpert, habe ich auch versucht, dass der App-Spatz darüber spricht, aber es hat bei mir nicht funktioniert (siehe einige Fehlerberichte, die ich im Entwickler-Repository erstellt habe). Vielleicht lag das daran, dass es keine mp4-Datei, sondern eine MOV-Datei war ...

Was mir geholfen hat, war dieser Beitrag: http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found

Sie verlinken auf ein Programm namens "HD Video Repair Utility" ( http://grauonline.de/cmsimple2_6/de/?Solutions:HD_Video_Repair_Utility ), das weitaus billiger ist als Treasured ( http://aeroquartet.com/movierepair/repair ) . Sie wiesen sogar darauf hin, dass es eine frühere Version (Version 1.5) gab, die nichts kostete ( http://nagasoft.cn/download/videorepair1.5.zip )!

Ich habe versucht, die Datei mit der Version 1.5 zu reparieren und habe sie teilweise zum Laufen gebracht. Nach dem Umcodieren mit ffmpeg (einige Fehler sind aufgetreten) stellte ich fest, dass ein Teil des Audios weg war. In den Logs (gerne hat das Video Repair Utility welche) wurde nach einer bestimmten Zeit kein Audio mehr erwähnt. Ich nehme an, wie es ist ...


3
DROPBOX-URL ist nicht mehr verfügbar. gefundene Alternative: nagasoft.cn/download/videorepair1.5.zip
T.Todua

2
@ T.Todua, danke für die Benachrichtigung. Ich habe den Dropbox-Link durch den von Ihnen angegebenen Link ersetzt.
SimonSimCity

8

Sie können Folgendes installieren docker(für alle gängigen Betriebssysteme verfügbar) und ausführen:

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

Die Syntax ist für Bash unter Linux oder macOS. Hier GOOD-reference-file.MP4und BAD-corrupt-file.md5müssen sich beide in Ihrem aktuellen Verzeichnis befinden, und das Verzeichnis wird /volim Docker-Container angehängt .

In den anderen Kommentaren finden Sie ausführlichere Erklärungen.

Das war das schnellste für mich!


Vielen Dank @slhck, die Dockerfileist hier verfügbar, wenn jemand sehen möchte, was dies vor dem Ausführen auf Ihrem Computer ausgeführt wird: github.com/synctree/docker-untrunc Es gibt auch eine Dockerfileim aktuellen untruncRepository - ich habe weder getestet noch verglichen sie im Detail, aber der Vollständigkeit
halber

7

@sparrowt Ihre aktuellen Anweisungen funktionierten bei meiner letzten Ubuntu 16.10-Installation nicht. Beim Kompilieren von untrunc ist folgender Fehler aufgetreten:

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

Wie im Untrunc- Repository erläutert , müssen Sie libav möglicherweise separat herunterladen, anstatt die Version im Ubuntu-Repository zu verwenden. Der folgende Code hat bei mir funktioniert:

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

Dadurch wurde eine Datei mit dem Namen broken-video_fixed.mp4 erstellt, die für mich funktioniert hat. Vielen Dank, dass Sie diesen Thread initiiert haben.


1
Danke! In der untrunc-Kompilierungszeile gab es ein paar Fehler im Sinne von "undefined reference to` BZ2_bzDecompressInit '". Ich musste -lbz2
Andrew Smart

Es kann keine großen Dateien verarbeiten. Gib einfach auf.
Ken Sharp

Enthält Ihre libav ein h264dec.h? weil track.cppversucht, es
einzuschließen,

Diese Abhängigkeit wurde am 10. Oktober 2017 mit commit github.com/ponchio/untrunc/commit/… hinzugefügt . Ich glaube, Sie müssen jetzt libav-12.2 anstatt libav-0.8.7
freeseek 20.11.17

Endlich funktionierte dies auf Ubuntu 14.04.5 LTS. Habe zu laufen sudo apt-get install yasm, sudo apt-get install libbz2-devund eine undefinierte Bezugnahme auf ‚clock_gettime‘ zu überwinden, hinzuzufügen -lrtzu dem Ende der g++Befehlszeile (siehe stackoverflow.com/a/2418175/550712 ). Es hat ungefähr 2/3 meines Videos konvertiert.
Mark Berry

2

Falls untrunc den Codec in Ihrer Datei nicht unterstützt, können Sie versuchen, ihn mit einem Hex-Editor zu reparieren:

  1. bekomme eine andere datei mit dem gleichen format, ich habe eine größere aber wahrscheinlich wird jede länge funktionieren
  2. öffne beide Dateien in einem Hex-Editor
  3. Ersetzen Sie den mdatAbschnitt in der "ok" -Datei durch den mdatAbschnitt in der "broken" -Datei ohne den Header (dh kopieren Sie nur die Bytes nach "mdat").
  4. es würde wahrscheinlich schon so funktionieren, wenn nicht, geben die 4 Bytes vor 'mdat' die Größe des mdatAbschnitts an, der aktuelle Wert wird die alte Größe sein ("ok" Dateigröße des mdatAbschnitts), ersetzen Sie ihn durch die neue Größe (" kaputte "Dateigröße des mdatAbschnitts)

Ich habe ein einfaches Programm dafür programmiert: https://github.com/golimarrrr/fix-3gp

Sowohl das Programm als auch von Hand mit dem Hex-Editor sollten die gleiche feste Datei erstellen


-3

Haben Sie versucht, die Datei mit VLC Player zu öffnen ? Es ist in der Regel recht gut bei der Reparatur beschädigter Dateien.


8
Ich denke, dass dies auf AVI-Dateien zutrifft, in denen der Index in den Speicher eingebaut werden kann, aber eine MP4-Datei mit dem Fehler "moov atom not found" während der ffmpeg-Verarbeitung spielt in VLC nichts ab.
So,

2
VLC spielt es auch nicht ab, in meinem Fall (.mov-Datei)
Rogerdpack
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.