2010-01-25 12:54:46 +0000 2010-01-25 12:54:46 +0000
130
130

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

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

Ich lade eine Videodatei herunter … mpeg, avi - das ist eines der gängigen Formate. Wenn ich sie nun herunterlade und der Download mitten im ähm … Download abbricht, dann gibt z. B. der Windows Media Player einen Fehler aus und weigert sich, sie abzuspielen (obwohl die Datei, sagen wir mal, zu 98% vollständig ist). Aber Player wie KMPlayer oder MediaPlayer Classic spielen sie bis zu diesem Punkt ab (sie können sie übrigens auch abspielen, während sie heruntergeladen wird).

Also, mich interessiert, … ohne irgendwelche Mittel zum Herunterladen (Download-Manager und ähnliches) zu verwenden, um sicherzustellen, dass die Datei vollständig heruntergeladen wurde, wie kann man überprüfen, ob die Videodatei ganz heruntergeladen wurde und ob sie vollständig ist?

Antworten (7)

137
137
137
2010-01-25 13:05:22 +0000

Sie können eine Funktion im ffmpeg Videokonverter nutzen: Wenn Sie angeben, dass das Video in nichts umkodiert werden soll, liest es nur die Eingabedatei und meldet alle Fehler, die auftreten werden. Dies ist ein sehr schneller Prozess, da die Videobilder nur gelesen, geprüft und stillschweigend verworfen werden.

Beispiel-Befehlszeile: (für Linux)

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

-v error bedeutet eine bestimmte Ausführlichkeitsstufe (um einige Fehler anzuzeigen, die normalerweise versteckt sind, weil sie die Abspielbarkeit nicht so sehr beeinträchtigen).

Sie erhalten ein vollständiges Fehlerprotokoll mit einigen allgemeinen Informationen über die Datei, die ffmpeg ausgibt, so dass dies wahrscheinlich Ihre Aufmerksamkeit erfordert, da Filter geschrieben werden können, um eine Batch-Prüfung von ähnlichen Dateien durchzuführen.

FFmpeg ist auch für Windows verfügbar hier . Die Kommandozeile wird fast identisch sein, mit Ausnahme der stderr-Umleitung:

ffmpeg.exe -v error -i file.avi -f null - >error.log 2>&1
14
14
14
2011-09-22 17:05:59 +0000

Ich mochte die Idee der Verwendung von ffmpeg -f null oben, aber ich möchte eigentlich den Prozess der Verwendung dieser Ausgabe automatisieren. Insbesondere habe ich das übliche Szenario mit meiner Musikvideo-Sammlung, dass ich ein paar Clips habe, die die gleiche Auflösung haben, und ich würde gerne die Verifizierungsprotokolle für diese Dateien vergleichen, um diejenigen zu entfernen, die am meisten kaputt sind.

Leider hat ffmpeg bisher keine Möglichkeit, seinen interaktiven Modus zu deaktivieren, der für diesen Anwendungsfall Rauschen ausgibt. Am Ende habe ich ein einfaches Wrapper-Skript gehackt, um die Filterung durchzuführen:

#!/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
1
1
1
2017-08-15 14:13:33 +0000

Unter Windows können Sie die Integrität von Videos im aktuellen Ordner und allen Unterordnern mit dieser Batch-Datei prü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

Verwendung:

checkvideo.bat [filter]

Wenn Sie keinen Filter angeben, erhalten Sie ‘*.mp4’.

Samples: checkvideo.batcheckvideo.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\binUnter Windows können Sie die Integrität von Videos im aktuellen Ordner und allen Unterordnern mit dieser Batch-Datei prü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

Verwendung:

checkvideo.bat [filter]

Wenn Sie keinen Filter angeben, erhalten Sie ‘*.mp4’.

Samples: checkvideo.batcheckvideo.bat *.avi

Setup: Laden Sie FFmpeg für Windows von hier herunter: [ https://ffmpeg.zeranoe.com/builds/ ]0x3& und entpacken Sie sie Ändern Sie in der Bat-Datei für den Pfad, in den Sie ffmpeg entpackt haben Legen Sie checkvideo.bat auf einen Ordner, der im Pfad enthalten ist, oder fügen Sie seinen Ordner zur Umgebungsvariablen Path hinzu

0
0
0
2020-01-12 11:14:29 +0000

fluent-ffmpeg

var ffmpeg = require('fluent-ffmpeg');
var ff = new ffmpeg();

ff.on('start', function(commandLine) {
  // on start, you can verify the command line to be used
})
.on('progress', function(data) {
  // do something with progress data if you like
})
.on('end', function() {
  // do something when complete
})
.on('error', function(err, stdout, stderr) {
  // handle error conditions
  console.log('Error: ' + err.message)
  console.log('ffmpeg output:\n' + stdout)
  console.log('ffmpeg stderr:\n' + stderr)
})
.addInput('path\to\file')
.addInputOption('-xerror')
.addInputOption('-v error')
.output('-')
.outputOptions('-f null')
.run();

Referenz: https://stackoverflow.com/questions/43349360/how-to-check-for-corrupted-webm-video-using-node-js-and-fluent-ffmpeg

0
0
0
2019-11-12 09:31:47 +0000

Einfachere Version

for file in *.mp4; do ffmpeg -v error -i "$file" -f null - >error.log 2>&1; print "$file"; done

Damit werden die Dateinamen gedruckt, während sie verarbeitet werden.

error.log wird die Fehler enthalten.

0
0
0
2010-01-25 13:13:15 +0000

MediaInfo ist ein großartiges Werkzeug, um Informationen über jede beliebige Videodatei zu erhalten. Damit können Sie möglicherweise die gewünschten Informationen hervorheben.

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

Versuchen Sie, jedem eine bekannte gute und eine bekannte schlechte Datei zu geben und vergleichen Sie die Ergebnisse.

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

0
0
0
2018-04-11 12:16:24 +0000

Das Problem mit der anderen Antwort, die ffmpeg zum Umkodieren in das null-Format verwendet, ist, dass es wirklich sehr lange dauert. Besonders, wenn Sie mehrere Dateien in einem Verzeichnis überprüfen wollen.

Ein schneller Weg wäre, Thumbnails für alle Videos zu generieren und zu sehen, wo die Thumbnail-Generierung 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.

Allerdings gibt es einen CAVEAT. Diese Methode kann zu falschen Ergebnissen führen, da manchmal auch für beschädigte Dateien ein Thumbnail erzeugt werden kann. Wenn z. B. die Videodatei nur am Ende beschädigt ist, schlägt diese Methode fehl.