Tengo un montón de videos que quiero verificar si están completos o no. Algunos de ellos pueden descargarse parcialmente, pero no son defectuosos. ¿Cómo puedo verificar eficientemente si estos videos están completamente descargados?
Si tuviera los enlaces, habría verificado su tamaño, pero no los tengo.
Traté de usar ffprobe
y mediainfo
. ffprobe
informa problemas menores en archivos descargados parcialmente, pero también informa problemas similares con algunos de los archivos descargados completamente. ¿Debo usar ffmpeg
para leer los archivos completos y comparar la duración de los videos para verificar si se descargan? ¿Hay una mejor solución?
Respuestas:
ffmpeg
es una herramienta independiente del sistema operativo que es capaz de determinar si un archivo de video se ha descargado por completo. El siguiente comando le indicaffmpeg
que lea el video de entrada y codifique el video a nada. Durante el proceso de codificación, cualquier error, como la falta de cuadros, se envía a test.log.Si un archivo de video no se descarga completamente, habrá muchas líneas en el archivo test.log. Por ejemplo, .1 MB faltantes en un archivo de video produjeron 71 líneas de errores. Si el video está completamente descargado y no se ha dañado, no se encuentran errores y no se imprimen líneas para test.log.
Editar
En el ejemplo que di arriba, probé todo el archivo porque el video de prueba que descargué era un torrent, que puede tener fragmentos faltantes en todo el archivo.
Agregar
-sseof -60
a la lista de argumentos verificará los últimos 60 segundos del archivo, que es considerablemente más rápido.Necesitará una versión más nueva de ffmpeg, a 2.8 le faltaba el indicador sseof, así que usé 3.0.
fuente
ffmpeg
? Me refiero a buscar el 99% sin procesar todo el video y verificar si funciona bien sin errores.-ss
y-sseof
, ffmpeg lee y procesa todo el archivo. Entonces, de todos modos, abrir el video en VLC y hacer clic cerca del final sería más rápido.MediaInfo muestra una línea:
si un archivo no está completo como se esperaba por las especificaciones de formato.
Como técnicamente no hay diferencia entre un archivo incorrectamente (no cumple con las especificaciones sobre los límites del archivo) y archivos descargados parcialmente y descargados, es técnicamente imposible hacer la diferencia entre un archivo defectuoso y un archivo parcialmente descargado.
Se podría hacer otra prueba (avanzada), por ejemplo, leer el índice de un archivo .mp4 y verificar que el desplazamiento del archivo + tamaño de fotograma del último fotograma esté dentro del tamaño del archivo que obtiene, pero no es exactamente lo que está buscando. para (si hay metadatos, por ejemplo, pósters en el archivo fuente, al final del archivo, y el archivo se trunca justo antes de este póster, la descarga parcial todavía no se detecta en todos los casos). No está implementado en MediaInfo, pero puede agregar una solicitud de función de MediaInfo .
En todos los casos, es muy difícil detectar todas las descargas parciales, porque el tamaño total del archivo no está indicado en la mayoría de los formatos de archivos de video, por lo que puede estar seguro de que un archivo está truncado, pero no puede estar seguro de que un archivo no esté truncado. La única forma de asegurarse de haber descargado el archivo completo es obtener el tamaño del archivo en otro lugar (y mejor: tener su hash, por ejemplo, MD5).
PD: esta pregunta no es específica de ningún sistema operativo.
fuente
-f
(pantalla de información completa). ¿Podría por favor ayudarme a conseguir elTruncated
campo?mediainfo * | grep -E "^(IsTruncated|Complete name)"
donde el nombre del archivo del archivo correspondiente se muestra directamente encima de la línea "IsTruncated: Yes".Tenía un archivo donde ffmpeg (v3.1.1) con -sseof -60 no mostraba ninguna advertencia y acababa de salir sin ninguna indicación de que algo estaba mal. Mediainfo tampoco mostró que el archivo estaba truncado. Solo omitiendo -sseof -60 informaría cualquier error con ffmpeg. Así que volví a probar ffprobe. Parecía un poco más rápido que ffmpeg.
producido esta salida
Todavía no encontré ningún falso positivo (según lo informado por el OP).
Editar : ffprobe estaba en mis archivos de prueba aproximadamente un 10% más rápido que ffmpeg, pero solo si le indica que use todos los núcleos con la opción '-threads 0'. De lo contrario, usa solo un núcleo / hilo y es más lento.
fuente