Wie kann man eine m4v- oder mp4-Videodatei öffnen und reparieren?

98920
Drake

Ich habe gestern eine Szene mit meinem Handy gedreht, aber plötzlich stürzte die Anwendung ab und wenn ich versuche, das 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. Kannst du mir einen Weg vorschlagen?

FFMPEG-Info

Wie in 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.

47
Mein Betriebssystem ist Windows 7, aber bei Bedarf kann ich eine virtuelle Maschine mit einer Linux-basierten Distribution vorbereiten. Drake vor 12 Jahren 0
@slhck Danke für die Hilfe, ich habe getan, was Sie vorgeschlagen und die Frage aktualisiert haben. Drake vor 12 Jahren 0
Ah, das habe ich erwartet. Das MOOV-Atom ist ein Datenelement, das für den Zugriff auf die rohen Videoströme im MP4 / M4V-Container benötigt wird. Es gibt viele "Videoreparatur" -Tools online, aber den meisten würde ich nicht trauen. Sie können ihnen sicherlich eine Chance geben - zahlen Sie einfach nichts. Vielversprechend ist [Untrunk] (http://vcg.isti.cnr.it/~ponchio/untrunc.php), das für genau dieses Problem (nämlich ein fehlendes MOOV-Atom) kodiert zu sein scheint. Oder [AtomicParsley] (http://atomicparsley.sourceforge.net/). Viel Glück! slhck vor 12 Jahren 7
Wie behebe ich ein kaputtes mp4 mit AtomicParsley? chovy vor 7 Jahren 1

6 Antworten auf die Frage

49
sparrowt

It is possible to repair the broken mp4 or m4v file using Untrunc.

For this method you need:

  • another video file which isn't broken

  • a linux installation (I used Ubuntu 12.04) and basic ability to use a command line.

This is what to do:

  1. Install some pre-requisite libraries with this command:

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

  2. Download the source code for Untrunc from the github repo:

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

  3. Unzip the source code:

    unzip master.zip

  4. Go into the directory where it's been unzipped:

    cd untrunc-master

  5. Compile the source code using this command (all one line):

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

    (you can try skipping this step and using the ready-provided executable, but it didn't work for me)

  6. Then you can actually fix the video. You need both the broken video and an example working video.

    Ideally the video should be from the same camera & have the same resolution (mine was but it might work without). Also if it is at least as long as the broken one (preferably roughly the same) this may help.

    Run this command in the folder where you have unzipped and compiled Untrunc but replace the /path/to/... bits with your 2 video files:

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

    Then it should churn away and hopefully produce a playable file called broken-video_fixed.m4v

That's it you're done!

VLC Media Player should now be able to play the file. However it may be reporting the wrong length information (Untrunc tries to guess/work this out, but doesn't always get it right). To fix this try re-encoding the video through another program.

[Thanks to slhck's comment for the suggestion to try Untrunc.]

[Many thanks to Federico Ponchio for coding Untrunc in the first place, to solve this exact problem.]

Cool, danke für die vollständige Anleitung hier! slhck vor 10 Jahren 0
Dies funktionierte für mich, jedoch musste ich den aktuellsten Code von Github [hier] (https://github.com/ponchio/untrunc) anstelle des angegebenen Links verwenden. Alex vor 9 Jahren 0
Danke @Alex Ich habe den Link aktualisiert. Amüsanterweise basiert das Readme auf github auf dieser Antwort! sparrowt vor 9 Jahren 3
Würde eine Windows-basierte Lösung geben. da ich keinen Internetzugang in meinen Linux-Distributionen habe. RogUE vor 8 Jahren 1
Ihre Methode funktioniert tatsächlich. Ich danke dir sehr. :) Juan Carlos Kuri Pinto vor 8 Jahren 0
FUNKTIONIERT! Gut gemacht. Erdinc Ay vor 8 Jahren 0
FWIW hat zwar keine abspielbaren Videos für mich produziert - aber das Ausführen von [recover_mp4_to_h264] (http://slydiman.me/deu/mmedia/recover_mp4.htm) über Wein hat gut funktioniert. The Compiler vor 8 Jahren 2
Von arch linux aus können Sie untrunc aus dem Arch User Repository installieren: https://aur.archlinux.org/packages/untrunc-git/ Michael Kern vor 7 Jahren 0
Untrunc funktionierte für mich, aber ich musste beide Videodateien in das Unterverzeichnis des versteckten .untrunc-Ordners mit dem Namen `untrunc-master` legen. Führen Sie dann Folgendes aus: ./untrunc goodfile.mp4 badfile.mp4 Es dauerte etwa 3 Minuten für eine 2-GB-Datei, und ich musste nur das Audio neu synchronisieren. Alles andere war gut. user8547 vor 7 Jahren 0
Danke, das hat funktioniert! Ich musste jedoch sudo apt-get install entzIP g ++ in der VM installieren, die ich erstellt habe, um Untrunc in auszuführen. Anscheinend sind diese Befehle nicht standardmäßig auf Ubuntu. Das Audio in der reparierten Datei ist auch mit dem Video nicht synchron, wobei das Video scheinbar schneller und langsamer wird. Ich denke, das liegt daran, dass ich mit einer variablen Bildrate aufgenommen habe ... http://video.stackexchange.com/q/19052/16308 Ajedi32 vor 7 Jahren 0
Hat auch für mich gearbeitet. Ich habe zuerst unwissentlich ein paar von `dd if = ok-file.mp4 von = / tmp / broken-file.mp4 ausprobiert. Bs = 1056 count = 1 conv = notrunc` mit zunehmender Blockgröße, ohne Erfolg. Dann löste untrunc mein Problem schnell und fehlerlos. Avio vor 7 Jahren 0
Sie können das Docker-Image auch hier verwenden: https://hub.docker.com/r/synctree/untrunc/ Auf diese Weise müssen Sie nicht alles installieren und kompilieren. Ein kurzer Lauf und es hat es für mich gelöst !! abourget vor 6 Jahren 0
6
SimonSimCity

Wenn jemand anderes darüber stolpert, habe ich auch versucht, über die App zu sprechen, über die Sparrow gesprochen hat, aber es funktionierte nicht für mich (siehe einige Fehlerberichte, die ich im Entwickler-Repository erstellt habe). Vielleicht lag das daran, dass es keine mp4-Datei war, sondern eine MOV-Datei ...

Was für mich 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 sind mit einem Programm namens "HD Video Repair Utility" ( http://grauonline.de/cmsimple2_6/de/?Solutions:HD_Video_Repair_Utility ) verbunden, das weitaus günstiger als Treasured ( http://aeroquartet.com/movierepair/repair ) ist. . 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 hat zum Teil funktioniert. Nach dem Umcodieren mit ffmpeg (habe dort einige Fehler bekommen), wurde mir klar, dass ein Teil des Audios weg war. In den Protokollen (gerne hat das Videoreparaturprogramm einige), wurde Audio nach einer bestimmten Zeit nicht mehr erwähnt. Ich nehme es so wie es ist ...

DROPBOX-URL ist tot. Alternative gefunden: ** http: //nagasoft.cn/download/videorepair1.5.zip** T.Todua vor 7 Jahren 1
@ T.Todua, vielen Dank für die Benachrichtigung. Ich habe den Dropbox-Link durch den von Ihnen angegebenen Link ersetzt. SimonSimCity vor 7 Jahren 1
6
freeseek

@sparrowt Ihre aktuellen Anweisungen funktionierten bei meiner letzten Installation von Ubuntu 16.10 nicht. Beim Kompilieren von untrunc wurde folgende Fehlermeldung angezeigt:

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 möglicherweise libav separat herunterladen, anstatt die Version im Ubuntu-Repository zu verwenden. Der folgende Code hat für mich 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 namens broken-video_fixed.mp4 erstellt, die für mich funktionierte. Vielen Dank, dass Sie diesen Thread initiiert haben.

Vielen Dank! In der untrunc-Kompilierzeile hatte ich einige Fehler im Sinne von "undefined Verweis auf 'BZ2_bzDecompressInit'", ich musste -lbz2 hinzufügen Andrew Smart vor 7 Jahren 1
Große Dateien können nicht verarbeitet werden. Gibt einfach auf Ken Sharp vor 7 Jahren 0
Enthält Ihre Libav eine `h264dec.h`? weil `track.cpp` versucht, es aufzunehmen, und ich kann es nicht überall finden: / x29a vor 6 Jahren 0
Diese Abhängigkeit wurde mit Commit https://github.com/ponchio/untrunc/commit/63254cacdd79d0a6b26373424a75c7459673d402#diff-cccc67908b2f1e13cf272e8122344d24 am 10. Oktober 2017 hinzugefügt freeseek vor 6 Jahren 0
Endlich bekam ich das für Ubuntu 14.04.5 LTS. Ich musste `sudo apt-get install yasm` ausführen,` sudo apt-get install libbz2-dev` und, um einen undefinierten Verweis auf 'clock_gettime' zu überwinden, füge `-lrt` am Ende der` g ++ `- Befehlszeile hinzu ( siehe https://stackoverflow.com/a/2418175/550712). Es konvertierte etwa 2/3 meines Videos. Mark Berry vor 6 Jahren 0
3
abourget

Wenn Sie eine aktuelle Ubuntu-Distribution haben, können Sie Folgendes installieren dockerund ausführen:

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

Lesen Sie die anderen Kommentare, um ausführlichere Erklärungen zu erhalten.

Das war das schnellste für mich!

0
golimar

Falls der Codec in Ihrer Datei durch untrunc nicht unterstützt wird, können Sie ihn mit einem Hex-Editor beheben:

  1. Holen Sie sich eine andere Datei mit dem gleichen Format, ich habe eine größere, aber wahrscheinlich funktioniert jede Länge
  2. Öffnen Sie beide Dateien in einem Hex-Editor
  3. Ersetzen Sie den mdatAbschnitt in der "ok" -Datei durch den mdatAbschnitt in der "defekten" Datei ohne den Header (dh kopieren Sie nur die Bytes nach "mdat").
  4. es würde wahrscheinlich schon so funktionieren, wenn nicht, die 4 Bytes vor 'mdat' geben die Größe des mdatAbschnitts an, der aktuelle Wert ist die alte Größe ("ok" -Dateigröße mdat), ersetzen Sie ihn durch die neue Größe (" gebrochene "Datei- mdatAbschnittsgröße)

Am Ende habe ich ein einfaches Programm programmiert: https://github.com/golimarrrr/fix-3gp

Sowohl das Programm als auch von Hand mithilfe des Hex-Editors sollten dieselbe feste Datei erstellen

-2
Carlos Manta

Have you tried to open the file with VLC Player? It is usually quite good at repairing damaged files.

Ich denke, dies kann für AVI-Dateien gelten, bei denen der Index in den Arbeitsspeicher eingebaut werden kann, aber eine MP4-Datei, die einen Fehler "moov atom not found" während der ffmpeg-Verarbeitung aufweist, spielt nichts im VLC ab. Sun vor 9 Jahren 5
VLC kann es in meinem Fall (.mov-Datei) auch nicht abspielen. rogerdpack vor 8 Jahren 2