Wie kann ich die Integrität einer Videodatei (avi, mpeg, mp4 ...) überprüfen?

160126
Rook

Dieser Titel könnte etwas irreführend sein, also lassen Sie mich das erklären ...

Ich lade eine Videodatei herunter ... mpeg, avi - eines der beliebtesten Formate. Wenn ich es jetzt herunterlade und der Download in der Mitte des uhm abbricht ... download, dann gibt Windows Media Player zum Beispiel einen Fehler aus und lehnt es ab, es abzuspielen (obwohl die Datei zum Beispiel 98% abgeschlossen). Aber Spieler wie KMPlayer oder MediaPlayer Classic spielen es bis zu diesem Punkt (tatsächlich können sie es auch spielen, während es heruntergeladen wird).

Also, ich bin interessiert, ... ohne Download-Methoden (Download-Manager und dergleichen) zu verwenden, um sicherzustellen, dass die Datei vollständig heruntergeladen ist. Wie kann man überprüfen, ob die Videodatei vollständig heruntergeladen wurde und ob sie vollständig ist?

101
Unvollständiges MPEG sollte problemlos funktionieren. AVI verfügt über Indizes für die schnelle Suche am Ende der Datei, die von einigen Playern verwendet werden und von anderen nicht benötigt oder ignoriert werden. bobince vor 14 Jahren 0
`Unvollständige MPEG-Dateien sollten ohne Probleme abgespielt werden. <@Bobince, die Frage war / ist, wie nach Korruption gesucht wird und nicht, wie eine unvollständige Datei abgespielt wird. Selbst wenn ein Format die Wiedergabe unvollständiger Dateien unterstützt, sollte es trotzdem möglich sein, auf Beschädigungen zu prüfen, wenn die Datei nicht den Formatvorgaben entspricht. Beispielsweise können Sie eine unvollständige Nur-Text-Datei immer noch lesen. Sie können jedoch immer noch feststellen, ob die Datei Probleme aufweist, z. B. wenn sie mitten in einem Satz endet oder in der Mitte ein Teil der offensichtlich fehlenden Informationen vorhanden ist. Synetech vor 10 Jahren 6

5 Antworten auf die Frage

108
whitequark

Sie können eine Funktion im ffmpegVideokonverter verwenden: Wenn Sie angeben, dass das Video in nichts umgewandelt werden soll, liest es nur die Eingabedatei und meldet eventuelle Fehler. Dies ist ein sehr schneller Vorgang, da Videoframes gerade gelesen, geprüft und stummgeschaltet werden.

Beispiel Befehlszeile: (für Linux)

ffmpeg -v error -i file.avi -f null - 2>error.log 

-v errorbedeutet ein gewisses Maß an Ausführlichkeit (um einige Fehler anzuzeigen, die normalerweise verborgen sind, da sie die Spielbarkeit nicht sehr beeinträchtigen).

Sie erhalten ein komplettes Fehlerprotokoll mit einigen allgemeinen Informationen über die Ausgabe der Datei ffmpeg. Daher ist wahrscheinlich Ihre Aufmerksamkeit erforderlich, da Filter erstellt werden können, um eine Stapelprüfung ähnlicher Dateien durchzuführen.

FFmpeg ist auch hier für Windows verfügbar . Die Befehlszeile ist mit einer Ausnahme von stderr redirect fast identisch:

ffmpeg.exe -v error -i file.avi -f null - >error.log 2>&1 
Gleiche Geschwindigkeit wie bei der Konvertierung. Somebody vor 11 Jahren 5
Eine weitere Option ist "ffprobe", die im Paket mit "ffmpeg" enthalten ist. Es führt keine Konvertierung durch, sondern liest einfach Metadaten-Informationen aus der Datei. Daher werden Fehler in den Metadaten erkannt, jedoch keine Probleme in der Datei selbst gefunden. Persönliche Verwendung von 'ffprobe' zur schnellen Überprüfung des Uploads vor der weiteren Verarbeitung mente vor 10 Jahren 6
Scheint ungefähr so ​​lange wie der Film anzusehen, scheint aber zu funktionieren MattPark vor 9 Jahren 1
Beispielfehler aus Datei mit abgeschnittenem Ende: `[mov, mp4, m4a, 3gp, 3g2, mj2 @ 0x161a180] moov-Atom nicht gefunden video-head.mp4: Ungültige Daten bei der Verarbeitung von Eingaben gefunden` StackAbstraction vor 8 Jahren 0
Wenn, wie das OP besagt, "Download bricht mitten im uhm ... download" ab, ist es sehr wahrscheinlich, dass * alle * Streams unterbrochen werden, so dass Sie diesen Fehler erkennen können, indem Sie die Decodierung auf * nur eine Audiospur * beschränken. (mit `-map`), was die Operation erheblich beschleunigt:` ffmpeg -v error -i in.mkv -map 0: 1 -f null ... `Wenn ein Fehler auftritt, wird die Byte-Position protokolliert, welche Sie können verwenden, um die Datei abzuschneiden (ein Megabyte oder zwei, um sicher zu sein) und das Herunterladen fortsetzen. Lumi vor 8 Jahren 1
Das Hinzufügen der -map 0: 1 ist viel schneller, führt jedoch zu einer Menge von `Ausgabedatei # 0 enthält keinen Stream` MattPark vor 7 Jahren 0
Es dauerte vielleicht 4 1/2 Minuten, bis ich eine 1 GB lange, .mkv-Datei mit einem alten Hex-Core-Prozessor getestet hatte. Alle Kerne waren während des Tests maximal. Ich habe eine Kopie der Datei im Hex-Format bearbeitet und einige Blöcke von 00 hinzugefügt, um Schäden zu simulieren. Das Fehlerprotokoll hat die Fehler korrekt gemeldet. Dateien ohne Fehler gaben ein leeres error.log zurück TripleAntigen vor 6 Jahren 2
7
pfalcon

Ich mochte die Idee von ffmpeg -f nulloben, aber ich würde tatsächlich gerne den Prozess der Verwendung dieser Ausgabe automatisieren. Das häufigste Szenario, das ich mit meiner Musikvideosammlung habe, ist, dass ich nur wenige Clips mit derselben Auflösung habe, und ich möchte die Überprüfungsprotokolle für diese Dateien unterscheiden, um die am meisten beschädigten Dateien zu entfernen.

Leider hat ffmpeg noch keine Möglichkeit, den interaktiven Modus zu deaktivieren, der für diesen Anwendungsfall Rauschen ausgibt. Am Ende habe ich ein einfaches Wrapper-Skript gehackt, um zu filtern:

#!/usr/bin/env python import sys import os import re  t = os.popen('ffmpeg -v 5 -i "%s" -f null - 2>&1' % sys.argv[1]).read() t = re.sub(r"frame=.+?\r", "", t) t = re.sub(r"\[(.+?) @ 0x.+?\]", "[\\1]", t) print t 

Beispielausgabe:

[mpeg1video]ac-tex damaged at 21 17 [mpeg1video]Warning MVs not available [mpeg1video]concealing 22 DC, 22 AC, 22 MV errors [mpeg1video]Warning MVs not available [mpeg1video]concealing 22 DC, 22 AC, 22 MV errors [mpeg1video]ac-tex damaged at 13 9 
Wenn Sie es so machen, dass gebrochene Teile durch gute Teile ersetzt werden, wäre das noch besser akostadinov vor 7 Jahren 1
Ich bekomme eine Fehlermeldung, wenn ich Folgendes verwende: Akshit Rewari vor 6 Jahren 0
Traceback (letzter Anruf zuletzt): Datei "F: \ filecheck.py", Zeile 6, in t = os.popen ('ffmpeg -v 5 -i "% s" -f null - 2> & 1'% sys.argv [1]). read () IndexError: Listenindex außerhalb des gültigen Bereichs Akshit Rewari vor 6 Jahren 1
0
Shevek

MediaInfo ist ein großartiges Tool, um Informationen zu jeder Videodatei zu erhalten, die Sie darauf werfen möchten . Dies kann möglicherweise die gewünschten Informationen hervorheben.

Ein weiteres Tool ist GSpot, das aber seit 2007 nicht aktualisiert wurde.

Geben Sie jeder Datei eine bekannte und eine schlechte Datei und vergleichen Sie die Ergebnisse.

Ich habe GSpot verwendet, bis es nicht mehr aktualisiert wurde, und wechselte dann zu MediaInfo

Ich habe eine alte Version von GSpot auf meinem Rechner ... aber es ist ein Werkzeug für etwas völlig anderes (Bestimmen des Codes / Dekodierens ...). Das hat nichts damit zu tun. Ich werde Mediainfo auschecken. Rook vor 14 Jahren 1
GSpot meldet, wenn Dateigröße oder Bildanzahl nicht den erwarteten Werten aus dem Index entsprechen (irgendwo auf der linken Seite ist es eine Weile her, seit ich sie verwendet habe!), Auch spätere Versionen fügten viel Funktionalität hinzu. Shevek vor 14 Jahren 0
** mediainfo ** kann Verzeichnisse rekursiv prüfen: Um einen Bericht über alle Dateien auf jeder Ebene ab dem aktuellen Ordner zu erhalten, führen Sie einfach `mediainfo *` aus. ccpizza vor 7 Jahren 0
Mediainfo prüft anscheinend nicht die Vollständigkeit. Ich nahm eine 33 MB `webm`-Videodatei und` truncate`d zur Hälfte. "mediainfo" hatte für beide immer noch fast das gleiche Ergebnis, keine offensichtlichen Anzeichen von Korruption. Nach dem "Abschneiden" auf 1 MB gab es immer noch keine eindeutigen Anzeichen von Korruption in der Ausgabe. Nur wenn Sie sich die Ausgabe genauer angesehen haben, gibt es einige widersprüchliche Informationen. Diese Teile hängen jedoch vom Format der Videodatei ab, sodass Sie diese Erkennung nicht automatisieren können. Tino vor 7 Jahren 1
"mediainfo" liest nichts außer Metadaten. Die Gültigkeit Ihrer Datei wird dadurch in keiner Weise überprüft. DanielSmedegaardBuus vor 6 Jahren 2
0
Juan Antonio Tubío

Mit Windows können Sie die Integrität für Videos im aktuellen Ordner und in allen Unterordnern mit dieser Bat-Datei überprüfen:

checkvideo.bat

@echo off  set "filtro=%1" if [%filtro%]==[] ( set "filtro=*.mp4" )  for /R %%a in (%filtro%) do call :doWork "%%a"  PAUSE exit /B  :doWork C:\ffmpeg\bin\ffmpeg.exe -v error -i %1 -f null - > "%~1.log" 2>&1 

Benutzen:

checkvideo.bat [filter]

Wenn Sie keinen Filter angeben, wird '* .mp4' angezeigt.

Proben: checkvideo.bat checkvideo.bat *.avi

Setup: Laden Sie FFmpeg für Windows von hier herunter: https://ffmpeg.zeranoe.com/builds/ und entpacken Sie sie. Ändern Sie C:\ffmpeg\bin\in der bat-Datei den Pfad, in den Sie ffmpeg entpackt haben. Legen Sie checkvideo.bateinen Ordner im Pfad ab oder fügen Sie seinen Ordner hinzu Pfadumgebungsvariable

** Juan Antonio Tubío ** 's Antwort arbeitet für mich, um die Integrität des Videos zu überprüfen. Aber wie kann ich die Protokolldatei lesen und die Zeit ermitteln, in der das Video beschädigt ist. Protokollbeispiel. [h264 @ 00000173649787c0] Fehler bei der Cabac-Decodierung von qscale diff bei 64 7 [h264 @ 00000173649787c0] Fehler beim Decodieren von MB 64 7, Bytestream 38638 J.Duck vor 6 Jahren 0
0
shivams

Das Problem bei der anderen Antwort, die ffmpegzum Umcodieren in nullFormat verwendet wird, ist, dass es wirklich lange dauert. Insbesondere, wenn Sie mehrere Dateien in einem Verzeichnis überprüfen möchten.

Eine schnelle Möglichkeit wäre, Miniaturansichten für alle Videos zu erstellen und zu sehen, wo die Erzeugung von Miniaturansichten fehlschlägt.

find . -iname "*.mp4" | while read -r line; do  line=`echo "$line" | sed -r 's/^\W+//g'`;  echo 'HERE IT IS ==>' "$line";  if ffmpeg -i "$line" -t 2 -r 0.5 %d.jpg;  then echo "DONE for" "$line";  else echo "FAILED for" "$line" >>error.log;  fi;  done; 

Diese Methode erwies sich als viel schneller als andere Methoden.

Es gibt jedoch einen CAVEAT. Diese Methode kann zu falschen Ergebnissen führen, da manchmal sogar für beschädigte Dateien ein Miniaturbild erzeugt werden kann. Wenn beispielsweise die Videodatei nur am Ende beschädigt ist, schlägt diese Methode fehl.