
Gestern habe ich mit meinem Telefon eine Szene gefilmt, aber plötzlich stürzte die Anwendung ab und als ich versuchte, das generierte M4V zu öffnen, hieß es, es sei beschädigt.
Ich habe die Videodateien (ca. 36 MB) auf meinen PC heruntergeladen und versuche, sie zu öffnen und zu reparieren. Können Sie mir eine Möglichkeit vorschlagen, dies zu tun?
FFMPEG-Informationen
Wie in den Kommentaren vorgeschlagen, versuche ich mit diesem Befehl zu überprüfen, was FFMPEG mir ü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.
Antwort1
Es ist möglich, die beschädigte MP4- oder M4V-Datei zu reparieren mitUntrunc.
Für diese Methode benötigen Sie eine weitere Videodatei vom selben Gerät, dieist nichtgebrochen.
Wie installiert manuntrunc
Für die Kompilierung benötigen Sie eine Linux-Installation (idealerweise Ubuntu) und grundlegende Kenntnisse in der Verwendung einer Kommandozeile. Sie können diesen Teil auch überspringen und untrunc
über Docker ausführen (siehedie Antwort unten), falls Sie das haben.
So gehen Sie vor:
Installieren Sie einige erforderliche Bibliotheken mit diesem Befehl:
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
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
Kompilieren Sie den Quellcode mit diesem Befehl (alles in einer 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 fertige ausführbare Datei zu verwenden, aber bei mir hat das nicht funktioniert)
Dann können Sie das Video tatsächlich reparieren. Sie benötigen sowohl das defekte Video als auch ein funktionierendes Beispielvideo.
So reparieren Sie das Video
Suchen Sie ein anderes funktionierendes Video, idealerweise von derselben Kamera und vorzugsweise mindestens so lang wie das kaputte, und wenn möglich auch mit derselben Auflösung (ich glaube, das könnte hilfreich sein, 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 weiterlaufen und hoffentlich eine abspielbare Datei namensbroken-video_fixed.m4v
Das war’s, Sie sind fertig!
Der VLC Media Player sollte die Datei jetzt abspielen können. Allerdings kann es sein, dass er falsche Längeninformationen meldet (Untrunc versucht, dies zu erraten/herauszubekommen, liegt aber nicht immer richtig). Um dies zu beheben, versuchen Sie, das Video mit einem anderen Programm neu zu kodieren.
[Danke an slhcks 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.]
Antwort2
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 gilt für Bash unter Linux oder macOS. Dabei GOOD-reference-file.MP4
müssen sich beide in Ihrem aktuellen Verzeichnis befinden, und das Verzeichnis wird im Docker-Container BAD-corrupt-file.md5
gemountet ./vol
Lesen Sie die anderen Kommentare für ausführlichere Erklärungen.
Das ging bei mir am schnellsten!
Antwort3
Falls jemand anders darüber stolpert: Ich habe auch die App ausprobiert, von der Sparrowt gesprochen hat, aber die hat bei mir nicht funktioniert (siehe einige Fehlerberichte, die ich im Entwickler-Repository erstellt habe). Vielleicht lag es daran, dass es keine MP4-Datei, sondern eine MOV-Datei war ...
Was mir geholfen hat, war dieser Beitrag:http://muzso.hu/2012/11/14/wie-behebt-man-ein-defektes-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 davon (Version 1.5) gab, die nichts kostete (http://nagasoft.cn/download/videorepair1.5.zip)!
Ich habe versucht, die Datei mit Version 1.5 zu reparieren und es funktionierte teilweise. Nach dem erneuten Kodieren mit ffmpeg (wobei es einige Fehler gab) wurde mir klar, dass ein Teil des Audios weg war. In den Protokollen (zum Glück hat das Video Repair Utility welche) wurde nach einer bestimmten Zeit kein Audio mehr erwähnt. Ich nehme es so, wie es ist ...
Antwort4
Falls untrunc den Codec in Ihrer Datei nicht unterstützt, können Sie versuchen, das Problem mit einem Hex-Editor zu beheben:
- Holen Sie sich eine andere Datei im gleichen Format. Ich habe eine größere, aber wahrscheinlich funktioniert jede Länge.
- Öffnen Sie beide Dateien in einem Hex-Editor
- Ersetzen Sie den
mdat
Abschnitt in der Datei „ok“ durch denmdat
Abschnitt in der Datei „defekt“, ohne den Header (d. h. kopieren Sie nur die Bytes nach „mdat“). - es würde wahrscheinlich schon so funktionieren, wenn nicht, geben die 4 Bytes vor „mdat“ die Größe des
mdat
Abschnitts an, der aktuelle Wert ist die alte Größe („ok“ Dateiabschnittsgrößemdat
), ersetzen Sie ihn durch die neue Größe („defekte“ Dateiabschnittsgrößemdat
)
Am Ende habe ich dafür ein einfaches Programm geschrieben:https://github.com/golimarrrr/fix-3gp
Sowohl das Programm als auch manuell mit dem Hex-Editor sollten die gleiche feste Datei erstellen