Question Comment puis-je vérifier l'intégrité d'un fichier vidéo (avi, mpeg, mp4 ...)?


Ce titre pourrait être quelque peu trompeur, alors laissez-moi vous expliquer ...

Je télécharge un fichier vidéo ... mpeg, avi - étant l'un des formats populaires. Maintenant, si je le télécharge et que le téléchargement est interrompu au milieu du téléchargement, Windows Media Player, par exemple, émettra des erreurs et refusera de les lire (bien que le fichier soit, disons, 98% terminé). Mais les joueurs comme KMPlayer ou MediaPlayer Classic joueront jusqu'à ce moment-là (ils peuvent en fait jouer pendant le téléchargement).

Donc, je suis intéressé, ... sans utiliser aucun moyen de téléchargement (gestionnaires de téléchargement et autres) pour sécuriser le fichier est complètement téléchargé, comment peut-on vérifier si le fichier vidéo est téléchargé en entier, et qu'il est complet?


98
2018-01-25 12:54


origine


MPEG incomplet devrait jouer sans problèmes. AVI a des index pour la recherche rapide à la fin du fichier, que certains joueurs utiliseront et certains n’ont pas besoin ou ignoreront. - bobince
Incomplete MPEG should play with no problems. @Bobince, la question était / est comment vérifier la corruption, pas comment lire un fichier incomplet. Même si un format prend en charge la lecture de fichiers incomplets, il devrait toujours être possible de vérifier la corruption si le fichier n'est pas conforme aux spécifications de format. Par exemple, vous pouvez toujours lire un fichier texte brut incomplet, mais vous pouvez toujours détecter si le fichier a des problèmes, par exemple s'il se termine au milieu d'une phrase ou si certaines informations manquent de manière évidente. - Synetech


Réponses:


Vous pouvez utiliser une fonctionnalité dans ffmpeg convertisseur vidéo: si vous le spécifiez pour recoder la vidéo à rien, il suffit de lire le fichier d'entrée et de signaler toute erreur qui apparaîtra. Ce processus est très rapide car les images vidéo sont simplement lues, vérifiées et supprimées en mode silencieux.

Exemple de ligne de commande: (pour Linux)

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

-v error signifie un certain niveau de verbosité (pour afficher certaines erreurs qui sont normalement masquées car elles n’affectent pas beaucoup la jouabilité).

Vous obtiendrez un journal d'erreur complet avec des informations génériques sur le fichier que ffmpeg va afficher, donc cela nécessitera probablement votre attention, grâce à des filtres qui peuvent être écrits pour effectuer une vérification par lots de fichiers similaires.

FFmpeg est également disponible pour Windows ici. La ligne de commande sera presque identique à l'exception de la redirection stderr:

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

104
2018-01-25 13:05



Même vitesse que si elle se convertissait. - Somebody
Une autre option est ffprobe qui vient dans le paquet avec ffmpeg. Il ne fait aucune conversion mais lit simplement les informations de métadonnées à partir du fichier. Par conséquent, il détectera les erreurs dans les métadonnées mais ne trouvera aucun problème dans le fichier lui-même. Personnellement utiliser ffprobe pour effectuer une vérification rapide des téléchargements avant le traitement - mente
Semble prendre autant de temps que regarder le film malheureusement, mais semble fonctionner - MattPark
Si, comme le déclare l'OP, "le téléchargement se brise au milieu de l'uhm ... download", il est très probable que tout les flux seront interrompus, vous pourrez donc détecter cette erreur en limitant le décodage à une seule piste audio (en utilisant -map), ce qui accélérera considérablement le fonctionnement: ffmpeg -v error -i in.mkv -map 0:1 -f null … S'il y a une erreur, il enregistrera la position d'octet, que vous pourrez utiliser pour tronquer le fichier (un ou deux mégaoctets plus tôt pour être sûr), puis reprendre le téléchargement. - Lumi
Il m'a fallu peut-être 4 minutes et demie pour tester un fichier .mkv de 1 Go d'une heure sur un ancien processeur hexadécimal. Tous les noyaux ont été maximisés pendant le test. J'ai hexadécimal édité une copie du fichier et ajouté quelques blocs de 00 pour simuler des dégâts. Le journal des erreurs a signalé les erreurs correctement. Les fichiers sans erreurs ont renvoyé une erreur.log vide - TripleAntigen


J'ai aimé l'idée d'utiliser ffmpeg -f null ci-dessus, mais j'aimerais en fait automatiser le processus d'utilisation de cette sortie. En particulier, le scénario commun que j'ai avec ma collection de vidéos musicales est que je possède peu de clips qui ont la même résolution, et je voudrais que les journaux de vérification de ces fichiers soient supprimés.

Malheureusement, jusqu'à présent, ffmpeg ne peut pas désactiver son mode interactif, qui génère du bruit pour ce cas d'utilisation. J'ai fini par pirater un simple script wrapper pour faire du filtrage:

#!/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

Exemple de sortie:

[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

7
2017-09-22 17:05



si vous faites en sorte qu'il remplace les pièces cassées par de bonnes pièces, ce serait encore mieux - akostadinov
Je reçois une erreur en utilisant ceci: - Akshit Rewari
Traceback (dernier appel en dernier): Fichier "F: \ filecheck.py", ligne 6, dans <module> t = os.popen ('ffmpeg -v 5 -i "% s" -f null - 2> & 1' % sys.argv [1]). read () IndexError: index de liste hors des limites - Akshit Rewari


MediaInfo est un excellent outil pour obtenir des informations sur tous les fichiers vidéo que vous souhaitez y jeter. Cela peut être en mesure de mettre en évidence les informations souhaitées.

Un autre outil est GSpot mais il n'a pas été mis à jour depuis 2007.

Essayez de donner à chacun un fichier connu et fiable et comparez les résultats.

J'avais l'habitude d'utiliser GSpot jusqu'à ce qu'il ne soit plus mis à jour, puis passe à MediaInfo


0
2018-01-25 13:13



J'ai une ancienne version de GSpot sur ma machine ... mais c'est un outil pour quelque chose de complètement différent (déterminer le code / décoder ...). Cela n'a rien à voir avec ça. Je vais vérifier mediainfo. - Rook
GSpot indiquera si la taille du fichier ou le nombre d'images ne correspondent pas à ceux attendus de l'index (quelque part sur le côté gauche, cela fait un moment que je ne l'ai pas utilisé!). - Shevek
mediainfo peut analyser récursivement les répertoires: pour obtenir un rapport de tous les fichiers à tout niveau à partir du dossier en cours, exécutez simplement mediainfo *. - ccpizza
mediainfo apparemment ne vérifie pas la complétude. J'ai pris un 33 Mo webm fichier vidéo et truncated à la moitié. mediainfo toujours eu le même résultat pour les deux, aucun signe apparent de corruption. Après truncateÀ 1 MB, il n'y avait toujours pas de signe clair de corruption dans la sortie. Ce n’est que si vous avez examiné de plus près le résultat, que certaines informations étaient contradictoires. Mais ces pièces dépendent du format du fichier vidéo, vous ne pouvez donc pas automatiser cette détection. - Tino
mediainfo ne lit rien d'autre que des métadonnées. Cela ne vérifiera pas la validité de votre fichier de quelque manière que ce soit. - DanielSmedegaardBuus


Pour Windows, vous pouvez vérifier l’intégrité des vidéos sur le dossier en cours et tous les sous-dossiers avec ce fichier de commandes:

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

Utilisation:

checkvideo.bat [filter]

Si vous ne donnez pas de filtre, vous obtiendrez "* .mp4".

Échantillons:      checkvideo.bat checkvideo.bat *.avi

Installer: Téléchargez FFmpeg pour Windows à partir d'ici: https://ffmpeg.zeranoe.com/builds/ et décompressez-les Changement C:\ffmpeg\bin\ dans le fichier bat pour le chemin où vous avez décompressé ffmpeg Mettre checkvideo.batsur un dossier inclus dans le chemin ou ajouter son dossier à la variable d'environnement Path


0
2017-08-15 14:13



Juan Antonio Tubíola réponse fonctionne pour moi pour vérifier l'intégrité de la vidéo. Mais comment puis-je lire le fichier journal et détecter le temps où la vidéo est corrompue. Exemple de journal. [h264 @ 00000173649787c0] Le décodage cabac de diff qscale a échoué à l'erreur 64 7 [h264 @ 00000173649787c0] lors du décodage du MB 64 7, bytestream 38638 - J.Duck


Le problème avec l'autre réponse en utilisant ffmpeg recoder à null le format est que cela prend vraiment beaucoup de temps. Surtout si vous voulez vérifier plusieurs fichiers dans un répertoire.

Un moyen rapide serait de générer des vignettes pour toutes les vidéos et de voir où la génération de vignettes échoue.

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;

Cette méthode s'est avérée beaucoup plus rapide que les autres méthodes.

Cependant, il y a un CAVEAT. Cette méthode peut donner des résultats incorrects, car parfois des vignettes peuvent être générées même pour des fichiers corrompus. Par exemple. Si le fichier vidéo est corrompu uniquement à la fin, cette méthode échouera.


0
2018-04-11 12:16