Este título podría ser algo engañoso, así que déjame explicarte ...
Estoy descargando un archivo de video ... mpeg, avi, siendo uno de los formatos más populares. Ahora, si lo estoy descargando, y la descarga se interrumpe en el medio de la descarga uhm ..., entonces, por ejemplo, Windows Media Player emitirá algún error y se negará a reproducirlo (aunque el archivo es, digamos, 98% completo). Pero jugadores como KMPlayer o MediaPlayer Classic lo jugarán hasta ese momento (de hecho, también pueden jugarlo mientras se está descargando).
Entonces, estoy interesado, ... sin usar ningún medio de descarga (gestores de descargas y similares) para asegurar que el archivo se descargue por completo, ¿cómo se puede verificar si el archivo de video se descargó completo y si está completo?
fuente
Incomplete MPEG should play with no problems.
@bobince, la pregunta era / es cómo verificar si hay corrupción, no cómo reproducir un archivo incompleto. Incluso si un formato admite la reproducción de archivos incompletos, aún debería ser posible verificar si el archivo no cumple con las especificaciones del formato. Por ejemplo, aún puede leer un archivo de texto plano incompleto, pero aún puede detectar si el archivo tiene problemas como si termina en el medio de una oración o si hay un fragmento de información que obviamente falta en el medio.Respuestas:
Puede usar una función en el
ffmpeg
convertidor de video: si lo especifica para recodificar el video a nada, solo leerá el archivo de entrada e informará cualquier error que aparezca. Este es un proceso muy rápido porque los cuadros de video se están leyendo, verificando y descartando en silencio.Ejemplo de línea de comando: (para Linux)
-v error
significa un cierto nivel de verbosidad (para mostrar algunos errores que normalmente están ocultos porque no afectan mucho la jugabilidad).Obtendrá un registro de errores completo con información genérica sobre el archivo ffmpeg que se generará, por lo que esto probablemente requerirá su atención, ya que se pueden escribir filtros para realizar una verificación por lotes de archivos similares.
FFmpeg también está disponible para Windows aquí . La línea de comando será casi idéntica con la excepción de redirección stderr:
fuente
ffprobe
que viene en paquete conffmpeg
. No realiza ninguna conversión, sino que simplemente lee la información de metadatos del archivo. Por lo tanto, detectará errores en los metadatos pero no encontrará ningún problema dentro del archivo. Uso personalffprobe
para hacer una verificación rápida de los archivos cargados antes de seguir procesando-map
), lo que acelerará significativamente la operación:ffmpeg -v error -i in.mkv -map 0:1 -f null …
si hay un error, registrará la posición del byte, que puede usar para truncar el archivo (un megabyte o dos antes para estar seguro) y luego reanudará la descarga.Me gustó la idea de usar
ffmpeg -f null
arriba, pero en realidad me gustaría automatizar el proceso de usar esa salida. En particular, el escenario común que tengo con mi colección de videos musicales es que tengo pocos clips que tienen la misma resolución, y me gustaría diferenciar los registros de verificación de esos archivos para eliminar los que están más rotos.Desafortunadamente, ffmpeg hasta ahora no tiene una forma de desactivar su modo interactivo, que genera ruido para este caso de uso. Terminé hackeando un script de contenedor simple para hacer el filtrado:
Salida de ejemplo:
fuente
Para Windows, puede verificar la integridad por lotes de los videos en la carpeta actual y todas las subcarpetas con este archivo bat:
checkvideo.bat
Utilizar:
checkvideo.bat [filter]
Si no le da un filtro, obtendrá '* .mp4'.
Muestras:
checkvideo.bat
checkvideo.bat *.avi
Configuración: descargue FFmpeg para Windows desde aquí: https://ffmpeg.zeranoe.com/builds/ y descomprímalos. Cambie
C:\ffmpeg\bin\
en el archivo bat de la ruta donde ha descomprimido ffmpeg. Coloquecheckvideo.bat
una carpeta incluida en la Ruta o agregue su carpeta a Variable de entorno de rutafuente
El problema con la otra respuesta que se usa
ffmpeg
para recodificar elnull
formato es que lleva realmente mucho tiempo. Especialmente, si desea verificar múltiples archivos en un directorio.Una forma rápida sería generar miniaturas para todos los videos y ver dónde falla la generación de miniaturas.
Este método resultó ser mucho MÁS RÁPIDO que otros métodos.
Sin embargo, hay un CAVEAT. Este método puede arrojar resultados incorrectos, porque a veces se pueden generar imágenes en miniatura incluso para archivos corruptos. Por ejemplo, si el archivo de video está dañado solo al final, este método fallará.
fuente
MediaInfo es una gran herramienta para obtener información sobre cualquier archivo de video que desee lanzar. Esto puede resaltar la información que desea.
Otra herramienta es GSpot, pero no se ha actualizado desde 2007.
Intente dar a cada uno un archivo conocido bueno y otro malo conocido y compare los resultados.
Solía usar GSpot hasta que dejó de actualizarse, luego cambié a MediaInfo
fuente
mediainfo *
.mediainfo
aparentemente no verifica la integridad. Tomé unwebm
archivo de video de 33 MB y lotruncate
reduje a la mitad.mediainfo
todavía tenía casi el mismo resultado para ambos, sin signos aparentes de corrupción. Despuéstruncate
de llegar a 1 MB todavía no había signos claros de corrupción en la salida. Solo si tenía una mirada más profunda a la salida, había alguna información contradictoria. Pero estas partes dependen del formato del archivo de video, por lo que no puede automatizar esta detección.mediainfo
no lee nada más que metadatos. Esto no verificará la validez de su archivo de ninguna manera.