it-swarm.com.de

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

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.

53
Drake

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

Für diese Methode benötigen Sie:

  • eine andere Videodatei, die ist nicht defekt

  • eine Linux-Installation (ich habe Ubuntu 12.04 verwendet) und die grundlegende Fähigkeit, eine Befehlszeile zu verwenden.

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. Laden Sie den Quellcode für Untrunc vom Github-Repo herunter:

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

  3. Entpacke den Quellcode:

    unzip master.Zip

  4. Gehen Sie in das Verzeichnis, in das es entpackt wurde:

    cd untrunc-master

  5. 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.)

  6. Dann kannst du das Video tatsächlich reparieren. Sie benötigen sowohl das defekte Video als auch ein Beispiel-Arbeitsvideo.

    Idealerweise sollte das Video von derselben Kamera stammen und dieselbe Auflösung haben (meins war, aber es könnte ohne funktionieren). Auch wenn es mindestens so lang ist wie das zerbrochene (vorzugsweise ungefähr das gleiche), kann dies helfen.

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

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

    Dann sollte es weglaufen und hoffentlich eine abspielbare Datei mit dem Namen broken-video_fixed.m4v erzeugen.

Fertig!

Der VLC Media Player sollte nun in der Lage sein, die Datei abzuspielen. Möglicherweise werden jedoch falsche Längenangaben gemeldet (Untrunc versucht, dies zu erraten/herauszufinden, macht es jedoch 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.]

54
sparrowt

Wenn jemand anderes darüber stolpert, habe ich auch versucht, über die App zu sprechen, aber sie 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- gefunden

Sie verlinken auf ein Programm namens "HD Video Repair Utility" ( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ), das weitaus günstiger ist als Treasured ( http: // aeroquartet. de/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 es so wie es ist ...

7
SimonSimCity

@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 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 mit dem Namen broken-video_fixed.mp4 erstellt, die für mich funktioniert hat. Vielen Dank, dass Sie diesen Thread initiiert haben.

6
freeseek

Wenn Sie eine aktuelle Ubuntu-Distribution haben, können Sie docker installieren und 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 genauere Erklärungen zu erhalten.

Das war das schnellste für mich!

3
abourget

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 Abschnitt mdat in der Datei "ok" durch den Abschnitt mdat in der Datei "broken" ohne den Header (d. h. 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 Abschnitts mdat an, der aktuelle Wert wird die alte Größe sein ("ok" Datei mdat Abschnittsgröße), ersetzen Sie ihn durch die neue Größe ("kaputte" Datei mdat Abschnittsgröße)

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

0
golimar