Ich habe eine Reihe von Videos, die ich überprüfen möchte, ob sie vollständig sind oder nicht. Einige von ihnen können teilweise heruntergeladen werden, aber sie sind nicht fehlerhaft. Wie kann ich effizient überprüfen, ob diese Videos vollständig heruntergeladen wurden?
Wenn ich die Links hätte, hätte ich die Größe überprüft, aber ich nicht.
Ich habe versucht, ffprobe
und zu verwenden mediainfo
. ffprobe
meldet kleinere Probleme bei teilweise heruntergeladenen Dateien, meldet jedoch auch ähnliche Probleme bei einigen vollständig heruntergeladenen Dateien. Soll ich ffmpeg
die gesamten Dateien lesen und die Länge der Videos vergleichen, um zu überprüfen, ob sie heruntergeladen wurden? Gibt es eine bessere Lösung?
Antworten:
ffmpeg
ist ein betriebssystemunabhängiges Tool, mit dem festgestellt werden kann, ob eine Videodatei vollständig heruntergeladen wurde. Der folgende Befehl weist Sieffmpeg
an, das Eingangsvideo zu lesen und das Video in nichts zu codieren. Während des Codierungsprozesses werden Fehler wie fehlende Frames in test.log ausgegeben.Wenn eine Videodatei nicht vollständig heruntergeladen wurde, enthält die Datei test.log viele Zeilen. Beispielsweise verursachte das Fehlen von 0,1 MB in einer Videodatei 71 Fehlerzeilen. Wenn das Video vollständig heruntergeladen und nicht beschädigt wurde, werden keine Fehler gefunden und keine Zeilen in test.log gedruckt.
Bearbeiten
In dem oben angegebenen Beispiel habe ich die gesamte Datei getestet, da das von mir heruntergeladene Testvideo ein Torrent war, in dem möglicherweise Teile in der Datei fehlen.
Durch Hinzufügen
-sseof -60
zur Liste der Argumente werden die letzten 60 Sekunden der Datei überprüft, was erheblich schneller ist.Sie benötigen eine neuere Version von ffmpeg, 2.8 fehlte das sseof-Flag, daher habe ich 3.0 verwendet.
quelle
ffmpeg
? Ich meine, 99% zu suchen, ohne das gesamte Video zu verarbeiten, und zu überprüfen, ob es ohne Fehler funktioniert.-ss
und-sseof
liest und verarbeitet ffmpeg die gesamte Datei. Das Öffnen des Videos in VLC und das Klicken gegen Ende wäre daher sowieso schneller.MediaInfo zeigt eine Zeile an:
wenn eine Datei nicht vollständig ist, wie in den Formatspezifikationen erwartet.
Da es technisch keinen Unterschied zwischen einer Datei gibt, die falsch (nicht den Spezifikationen bezüglich der Dateigrenzen) muxte und teilweise heruntergeladene Dateien enthält, ist es technisch unmöglich, den Unterschied zwischen einer fehlerhaften Datei und einer teilweise heruntergeladenen Datei zu machen.
Ein weiterer (fortgeschrittener) Test könnte durchgeführt werden, z. B. das Lesen des Index einer MP4-Datei und das Überprüfen, ob der Dateiversatz + die Frame-Größe des letzten Frames innerhalb der Dateigröße der Datei liegt, die Sie erhalten, aber nicht genau das, wonach Sie suchen für (wenn sich Metadaten, z. B. Poster in der Quelldatei, am Ende der Datei befinden und die Datei kurz vor diesem Poster abgeschnitten wird, wird der teilweise Download immer noch nicht in jedem Fall erkannt). Es ist nicht in MediaInfo implementiert, Sie können jedoch eine MediaInfo-Funktionsanforderung hinzufügen .
In allen Fällen ist es sehr schwierig, alle Teildownloads zu erkennen, da die Gesamtdateigröße in den meisten Videodateiformaten nicht angegeben ist, sodass Sie sicher sein können, dass eine Datei abgeschnitten ist, aber Sie können nicht sicher sein, dass eine Datei nicht abgeschnitten ist. Die einzige Möglichkeit, um sicherzugehen, dass Sie die gesamte Datei heruntergeladen haben, besteht darin, die Dateigröße von einem anderen Ort abzurufen (und besser: Sie haben den Hash, z. B. MD5).
PS: Diese Frage ist für kein Betriebssystem spezifisch.
quelle
-f
(vollständige Informationsanzeige) erhalten. Könnten Sie bitte helfen,Truncated
Feld zu bekommen ?mediainfo * | grep -E "^(IsTruncated|Complete name)"
Dabei wird der Dateiname der entsprechenden Datei direkt über der Zeile "IsTruncated: Yes" angezeigt.Ich hatte eine Datei, in der ffmpeg (v3.1.1) mit -sseof -60 keine Warnungen zeigte und nur ohne Hinweis darauf beendet wurde, dass etwas nicht stimmte. Mediainfo zeigte auch nicht an, dass die Datei abgeschnitten wurde. Wenn Sie nur -sseof -60 weglassen, wird ein Fehler mit ffmpeg gemeldet. Also versuchte ich es erneut mit ffprobe. Es schien etwas schneller als ffmpeg.
produzierte diese Ausgabe
Ich habe noch keine Fehlalarme festgestellt (wie vom OP gemeldet).
Bearbeiten : ffprobe war in meinen Testdateien etwa 10% schneller als ffmpeg, aber nur, wenn Sie es anweisen, alle Kerne mit der Option '-threads 0' zu verwenden. Ansonsten verwendet es nur einen Kern / Thread und ist langsamer.
quelle