¿Cómo comparar/mostrar la diferencia entre 2 videos en ffmpeg?
compare difference (1)
Soy un novato en la codificación. He leído y probado x264 en modo sin pérdida (-qp 0), sin embargo, me gustaría asegurarme de que en mi nuevo video, cada píxel contenga la misma información que el archivo de origen (que está en YUV 420, por lo que la pérdida de La conversión de color es evitable, que yo sepa). Quiero poder verificar eso, porque no creo en eso si alguien simplemente dice que no tiene pérdidas.
Acojo con satisfacción las respuestas que sugieren otros codecs para la codificación sin pérdida, mis únicos requisitos para codecs son tener uno de los mejores índices de compresión y me permiten elegir diferentes tiempos de cálculo (como el rango de placebo a muy rápido en x264) para ajustar el nivel de compresión y calculo el tiempo a mis necesidades. Pero tenga en cuenta que la pregunta original es acerca de cómo puedo calcular las diferencias cuadro por cuadro de dos videos y exportarlos a un tercer archivo, para poder verlo yo mismo. Creo que el conocimiento (si es posible y no tiene limitaciones serias) también será útil para mí en el futuro.
Comparación de datos decodificados con hash MD5
Puede usar el mezclador FFmpeg MD5 para mostrar que la decodificación produce exactamente el mismo resultado:
Obtenga el hash MD5 de la transmisión de video de su entrada original:
$ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 - MD5=5ee3ae1ee5feaf30618938290225f682
Convertir a una salida sin pérdidas:
$ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
Compara el hash MD5 del video sin pérdida:
$ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 - MD5=5ee3ae1ee5feaf30618938290225f682
Notas:
Es posible que no obtenga el mismo hash incluso con un codificador sin pérdida. Se pueden producir cambios en varios atributos que pueden alterar el hash MD5, como el espacio de color o el submuestreo de croma.
Puede ver que el hash MD5 puede cambiar si se imprime en un formato con pérdida.
Otros codificadores de video comprimidos sin pérdida compatibles con FFmpeg incluyen: ffv1, ffvhuff, huffyuv y utvideo.
Vea el muxer framemd5 para ver el hash para cada cuadro.
Comparacion visual
Con el filtro de mezcla.
Viendo la diferencia de una salida con pérdida.
Puede utilizar el filtro de mezcla para comparar visualmente la diferencia.
Usando ffplay
ffplay -f lavfi /
"movie=original.mkv[org]; /
movie=encoded.mkv[enc]; /
[org][enc]blend=all_mode=difference"
la mezcla es lenta y es posible que este comando no se ejecute en tiempo real dependiendo de su CPU y las entradas. Alternativamente, puede emitir un video con
ffmpeg
luego verlo como se muestra a continuación.Hay modos distintos a la
difference
que pueden ajustarse a sus necesidades. Consulte la documentación .
Utilizando ffmpeg
ffmpeg -i original.mkv -i encoded.mkv /
-filter_complex "blend=all_mode=difference" /
-c:v libx264 -crf 18 -c:a copy output.mkv
- Es posible que deba agregar
,format=yuv420p
al final de su cadena de filtros (inmediatamente después de ladifference
) para ver la salida en reproductores no basados en FFmpeg.
Con el filtro de superposición.
Ver Mostrar diferencia de video con el filtro de superposición de ffmpeg .