J'ai un tas de vidéos que je veux vérifier si elles sont complètes ou non. Certains d'entre eux peuvent être téléchargés partiellement, mais ils ne sont pas défectueux. Comment puis-je vérifier efficacement si ces vidéos sont complètement téléchargées?
Si j'avais eu les liens, j'aurais vérifié leur taille, mais je n'en ai pas.
J'ai essayé d'utiliser ffprobe
et mediainfo
. ffprobe
signale des problèmes mineurs sur des fichiers partiellement téléchargés, mais il signale également des problèmes similaires avec certains des fichiers complètement téléchargés. Dois-je utiliser ffmpeg
pour lire les fichiers entiers et comparer la longueur des vidéos pour vérifier si elles sont téléchargées? Y a-t-il une meilleure solution?
Réponses:
ffmpeg
est un outil indépendant du système d'exploitation qui est capable de déterminer si un fichier vidéo a été complètement téléchargé. La commande ci-dessous indiqueffmpeg
de lire la vidéo d'entrée et de coder la vidéo pour rien. Pendant le processus d'encodage, toutes les erreurs telles que les trames manquantes sont sorties dans test.log.Si un fichier vidéo n'est pas totalement téléchargé, le fichier test.log comportera de nombreuses lignes. Par exemple, 0,1 Mo manquant dans un fichier vidéo a produit 71 lignes d'erreurs. Si la vidéo est entièrement téléchargée et n'a pas été corrompue, aucune erreur n'est trouvée et aucune ligne n'est imprimée dans test.log.
Éditer
Dans l'exemple que j'ai donné ci-dessus, j'ai testé l'intégralité du fichier car la vidéo de test que j'ai téléchargée était un torrent, qui peut avoir des morceaux manquants dans le fichier.
L'ajout
-sseof -60
à la liste d'arguments vérifiera les 60 dernières secondes du fichier, ce qui est considérablement plus rapide.Vous aurez besoin d'une version plus récente de ffmpeg, il manquait le drapeau sseof à 2.8, j'ai donc utilisé 3.0.
la source
ffmpeg
? Je veux dire chercher à 99% sans traiter toute la vidéo et vérifier si cela fonctionne bien sans erreur.-ss
et-sseof
, ffmpeg lit et traite tout le fichier. Donc, de toute façon, ouvrir la vidéo dans VLC et cliquer près de la fin serait plus rapide.MediaInfo affiche une ligne:
si un fichier n'est pas complet comme prévu par les spécifications de format.
Comme il n'y a techniquement aucune différence entre un fichier mal (ne répondant pas aux spécifications concernant les limites de fichier) les fichiers multiplexés et partiellement téléchargés, il est techniquement impossible de faire la différence entre un fichier bogué et un fichier partiellement téléchargé.
Un autre test (avancé) pourrait être effectué, par exemple en lisant l'index d'un fichier .mp4 et en vérifiant que le décalage de fichier + la taille de la dernière image correspond à la taille du fichier que vous obtenez, mais ce n'est pas exactement ce que vous recherchez. pour (s'il y a des métadonnées, par exemple des affiches dans le fichier source, à la fin du fichier, et que le fichier est tronqué juste avant cette affiche, le téléchargement partiel n'est toujours pas détecté dans tous les cas). Il n'est pas implémenté dans MediaInfo mais vous pouvez ajouter une demande de fonctionnalité MediaInfo .
Dans tous les cas, il est très difficile de détecter tous les téléchargements partiels, car la taille totale du fichier n'est pas indiquée dans la plupart des formats de fichiers vidéo, vous pouvez donc être sûr qu'un fichier est tronqué, mais vous ne pouvez pas être sûr qu'un fichier n'est pas tronqué. La seule façon de vous assurer que vous avez téléchargé le fichier complet est d'obtenir la taille du fichier ailleurs (et mieux: avoir son hachage, par exemple MD5).
PS: cette question n'est spécifique à aucun système d'exploitation.
la source
-f
(affichage complet des informations). Pourriez-vous s'il vous plaît aider à obtenir leTruncated
champ?mediainfo * | grep -E "^(IsTruncated|Complete name)"
où le nom de fichier du fichier correspondant est affiché directement au-dessus de la ligne "IsTruncated: Yes".J'avais un fichier où ffmpeg (v3.1.1) avec -sseof -60 n'affichait aucun avertissement et venait de se terminer sans aucune indication que quelque chose n'allait pas. Mediainfo n'a pas non plus montré que le fichier était tronqué. Seule la suppression de -sseof -60 signale toute erreur avec ffmpeg. J'ai donc recommencé à essayer ffprobe. Il semblait légèrement plus rapide que ffmpeg.
produit cette sortie
Je n'ai pas encore rencontré de faux positifs (comme rapporté par l'OP).
Edit : ffprobe était sur mes fichiers de test environ 10% plus rapide que ffmpeg, mais seulement si vous lui demandez d'utiliser tous les cœurs avec l'option '-threads 0'. Sinon, il n'utilise qu'un seul noyau / fil et est plus lent.
la source