Ce titre pourrait être un 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, par exemple, Windows Media Player émettra une erreur et refusera de le lire (bien que le fichier soit, disons, Terminé à 98%). Mais des joueurs comme KMPlayer ou MediaPlayer Classic le joueront jusque-là (ils pourront même le jouer pendant le téléchargement).
Donc, ça m'intéresse, ... sans utiliser aucun moyen de téléchargement (gestionnaires de téléchargement ou autres) pour sécuriser le fichier complètement téléchargé, comment vérifier si le fichier vidéo est téléchargé en entier et s'il est complet?
Vous pouvez utiliser une fonctionnalité dans le convertisseur vidéo ffmpeg
: si vous spécifiez de ne pas recoder la vidéo, elle lira simplement le fichier d'entrée et signalera les erreurs éventuelles. Ce processus est très rapide car les images vidéo sont en cours de lecture, de vérification et de suppression silencieuse.
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 normalement cachées car elles n'affectent pas beaucoup la jouabilité).
Vous obtiendrez un journal des erreurs complet contenant des informations génériques sur le fichier que ffmpeg affichera. Cela nécessitera probablement votre attention. Des filtres peuvent être écrits pour permettre la vérification par lots de fichiers similaires.
FFmpeg est également disponible pour Windows ici . La ligne de commande sera presque identique à l'exception de stderr redirect:
ffmpeg.exe -v error -i file.avi -f null - >error.log 2>&1
J'aimais bien 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 que j’ai couramment avec ma collection de vidéos musicales est que j’ai peu de clips qui ont la même résolution, et je voudrais comparer les journaux de vérification de ces fichiers pour supprimer ceux qui sont le plus endommagés.
Malheureusement, jusqu'à présent, ffmpeg n'a pas la possibilité de désactiver son mode interactif, qui génère du bruit pour ce cas d'utilisation. J'ai fini par pirater un script de wrapper simple 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
Le problème avec l’autre réponse utilisant ffmpeg
pour recoder au format null
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 erronés, car parfois, une vignette peut être générée même pour des fichiers corrompus. Par exemple. si le fichier vidéo est corrompu seulement à la fin, cette méthode échouera.
Pour Windows, vous pouvez vérifier par lots l'intégrité des vidéos sur le dossier actuel et tous les sous-dossiers contenant ce fichier bat:
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 un filtre, vous obtiendrez '* .mp4'.
Exemples: checkvideo.bat
checkvideo.bat *.avi
Setup: Téléchargez FFmpeg pour Windows à partir d’ici: https://ffmpeg.zeranoe.com/builds/ et décompressez-les. Modifiez C:\ffmpeg\bin\
dans le fichier bat pour le chemin où vous avez décompressé ffmpeg. Mettez checkvideo.bat
sur un dossier inclus dans le chemin ou ajouter son dossier à la variable d'environnement chemin
MediaInfo est un excellent outil pour obtenir des informations sur tous les fichiers vidéo que vous souhaitez importer. 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 mauvais fichier connu et comparez les résultats.
J'avais l'habitude d'utiliser GSpot jusqu'à ce qu'il cesse d'être mis à jour, puis je suis passé à MediaInfo