¿ffmpeg vuelve a codificar libx264 sin pérdida de calidad?

De acuerdo con la documentación para la codificación libx264 (h264), podemos usar un ajuste preestablecido de muy rápido, más rápido, rápido, medio, lento, etc. https://trac.ffmpeg.org/wiki/Encode/H.264

...para una codificación de calidad constante, simplemente ahorrará la tasa de bits eligiendo un ajuste preestablecido más lento.

Por lo tanto, al usar una calidad constante, un ajuste preestablecido más lento no tiene ningún efecto sobre la calidad del video, pero puede comprimir el tamaño del archivo más pequeño.

En teoría, esto significa que debería ser posible tomar un video comprimido con el preajuste "muy rápido" y volver a comprimirlo con "lento", lo que da como resultado un archivo más pequeño sin pérdida de calidad de video.

¿Alguien ha hecho esto alguna vez o sabe cómo se puede hacer?

No tengo claro por qué comprimirías y volverías a comprimir: si 'lento' te da el tamaño y la calidad que deseas, ¿por qué hacerlo en dos pasos? ¿Qué crees que ganas con el paso 'muy rápido' original?
@JimMack ¿Por qué supone que estamos comprimiendo videos nuevos u originales? Tenemos cientos de videos antiguos que se crearon con una compresión menos óptima y sería bueno reducir su tamaño ahora.

Respuestas (2)

Tienes un malentendido sobre cómo funciona la compresión. En casi todos los tipos especializados de compresión con pérdida, cuando comprime algo por segunda vez, incluso en un nivel de calidad mucho más alto que las codificaciones anteriores, aún pierde calidad adicional.

El uso de una codificación más lenta de la misma fuente original con calidad constante a menudo producirá un archivo más pequeño de calidad similar, pero si vuelve a codificar la versión ya comprimida, siempre terminará con un video de menor calidad debido a las pérdidas de calidad de segunda generación. de comprimir dos veces.

Tengo curiosidad, ¿qué son estos códecs especializados que mencionas? Nunca he visto un códec con pérdida que no arrojara más información al volver a comprimir con la misma codificación.
@ProfessorSparkles: olvidé cuál, ni siquiera estoy seguro de que se usen para video y es un número limitado de cosas que puede hacer sin tener una mayor pérdida de calidad. Intentaré hacer un poco de excavación para encontrarlos de nuevo. Sé que no se usan con mucha frecuencia porque la compresión no es tan buena, pero sé que existen.
El término importante es idempotencia . Aparentemente, algunas implementaciones de JPEG y JPEG-2000 logran esto para ciertas recompresiones. Ningún algoritmo lo hace el 100% del tiempo que yo sepa, pero algunos pueden hacerlo algunas veces.

Solo para agregar un poco a la respuesta correcta de AJ Henderson. Puede comprimir sin pérdidas con h264, este es el perfil predictivo sin pérdidas y se logra mediante la codificación con una configuración CRF de 0.

Aunque mientras obtiene la compresión h264 sin pérdidas de esa manera, terminará con un archivo más grande que su archivo fuente. La compresión con pérdida no se puede hacer dos veces sin perder más información con cada iteración, ya dice que eso en sí mismo, es "con pérdida", pierde información cada vez que codifica con él, por lo tanto, solo una codificación sin pérdida conservará toda la información y ese es el CRF 0 (que produce archivos enormes).

Lo que lee como calidad constante solo significa que tendrá una tasa de bits constante y x264 no alterará la tasa de bits para conservar más información en ciertos cuadros o usar menos espacio donde no necesita tanto espacio para guardar la información dada en el marco.

Dicho esto, si las codificaciones que tiene son de alta calidad y no hay ningún artefacto visible presente, puede volver a comprimirlo, si el espacio en disco es lo más importante aquí. Aunque pierda información que podría ser útil para mejorar aspectos del video en un futuro lejano que no son relevantes en este momento.