Hola, tenemos la solución a tu interrogante, desplázate y la hallarás más abajo.
Solución:
La compresión con pérdida es una compensación entre la tasa de bits (tamaño del archivo) y la calidad, no solo para obtener los archivos más pequeños. Si eso es todo lo que querías, usa -preset veryslow -crf 51
(y, opcionalmente, reducir la escala a 256×144) para obtener un archivo muy pequeño que en su mayoría solo tiene manchas borrosas sin detalles.
La codificación es una compensación de 3 vías entre el tiempo de la CPU y la calidad frente a la tasa de bits, muy diferente de la compresión sin pérdidas como zip
donde el tamaño del archivo es cómo se mide la “mejor” compresión, y es lo que se compensa con el tiempo en una compensación bidireccional.1 O 3 vías si la velocidad de compresión y descompresión son independientes …
-preset veryslow
le ofrece la mejor compensación que puede ofrecer x2642, al dedicar más tiempo de CPU a buscar formas de representar más detalles por bit. (es decir, la mejor compensación de tasa por distorsión).
Esto es principalmente ortogonal al control de velocidad, que decide cuántos bits totales gastar. x264 ‘el control de tasa predeterminado es CRF 23 (ffmpeg -crf 23
); si quieres archivos más pequeños, usa -preset veryslow -crf 26
o algo para gastar menos bits por la misma complejidad, lo que resulta en más borrosidad. Es logarítmico, por lo que aumentar el CRF en unos pocos números puede cambiar la tasa de bits en un factor de 2. Para una calidad casi transparente, -crf 18
o 20
suele ser bueno, pero cuesta más bitrate.
El modo CRF no es true calidad constante (SSIM, PSNR o cualquier otra métrica). Con ajustes preestablecidos de codificación más rápidos, x264 usa un proceso de toma de decisiones más simple para decidir cómo / dónde gastar los bits, lo que resulta en alguna variación en la tasa de bits para la misma configuración de CRF.
Con diferentes herramientas de búsqueda para encontrar redundancia, como explica @szatmary, un ajuste preestablecido más alto puede encontrar una forma mucho más pequeña de codificar algo que solo se ve un poco peor. O una forma de codificar algunos bloques que parece mucho mejor pero es solo un poco más grande. Dependiendo de cómo vayan estas cosas en promedio, el mismo CRF con diferentes ajustes preestablecidos de calidad tendrá una calidad diferente y tasa de bits diferente.
Es por eso que no obtiene archivos cada vez más pequeños con la misma calidad; -preset veryfast
normalmente se ve peor. -preset ultrafast
suele ser notablemente malo incluso con una tasa de bits alta, pero otros ajustes preestablecidos pueden verse tan bien como veryfast
si gastas mucha más tasa de bits.
Un archivo más pequeño no significa “mejor compresión”. Recuerda que la calidad también es variable. Si usaste ffmpeg -i in.mp4 -ssim 1 -tune ssim -preset veryslow out.mkv
para que libx264 calcule la métrica de calidad visual de SSIM, encontrará que veryslow tiene mejor calidad por tasa de bits que veryfast. (Si está evaluando la calidad, hágalo a una tasa de bits fija, es decir, 2 pasadas, no CRF. Consulte https://trac.ffmpeg.org/wiki/Encode/H.264)
Tenga en cuenta que las optimizaciones psicovisuales que hacen que las imágenes se vean mejor para los humanos (como -psy-rd=1.0:0.15
) puede obtener peores resultados en algunas métricas de calidad, por lo que para un uso real no querer -tune ssim
. Psy-rd significa tener en cuenta la percepción humana al optimizar la relación entre tasa y distorsión. AQ (cuantización adaptativa) es otra optimización ps, pero SSIM es lo suficientemente sofisticada como para reconocerla como beneficiosa, a diferencia de la métrica de calidad PSNR más simple.
Los humanos tienden a percibir el ruido de alta frecuencia (espacial) como un detalle si es a pequeña escala, incluso si no es el mismo detalle que en la imagen de origen. Y a nuestros ojos les gustan los detalles en lugar de difuminarse. por ejemplo, los artefactos de bordes y timbres de la cuantificación = redondear los coeficientes DCT pueden verse mejor que simplemente difuminar todo, si son menores. Las cosas que se ven peor cuando haces una pausa y haces zoom pueden engañar a tu ojo agradablemente cuando solo miras normalmente. (h.264 tiene un filtro de desbloqueo en bucle, que se aplica antes de que los fotogramas se muestren y se utilicen como referencias, por lo que evita el bloqueo más fácilmente que los códecs anteriores como DivX / h.263. Si lo activa, puede desenfocar todo a una tasa de bits baja).
La idea aquí es similar a lo que hacen los MP3 y otros códecs de audio avanzados para el sonido, excepto que hay más espacio para la optimización psicoacústica porque los sonidos fuertes realmente impiden que los oídos escuchen cosas silenciosas en frecuencias cercanas.
Si está codificando una vez para mantener el resultado durante mucho tiempo y / o publicarlo en Internet, utilice -preset veryslow
. O en menos-preset medium
. Usted paga el costo de la CPU una vez y obtiene los ahorros en el tamaño del archivo (para una calidad determinada) repetidamente.
Pero si solo va a ver una codificación una vez, por ejemplo, para poner un video en un dispositivo móvil donde lo verá una vez y luego eliminarlo, entonces -preset faster -crf 20
tiene sentido si tiene el espacio de almacenamiento. Solo gasta un poco más.
Nota al pie 1: En la compresión sin pérdida, se compensa el tamaño del archivo frente a la velocidad de compresión y / o descompresión (que puede ser diferente; algunos códecs son muy rápidos de descomprimir incluso si permiten una buena compresión lenta). En realidad, el uso de RAM / huella de caché también puede ser una variable si desea entrar en ese nivel de detalle. En la compresión sin pérdidas, la calidad se fija en “perfecta”, como x264 -qp 0
El rendimiento de la decodificación h.264 puede variar con el número de marcos de referencia, teniendo más una mayor huella de memoria y, por lo tanto, tal vez más pérdidas de caché para un decodificador de CPU. Pero a menudo h.264 es decodificado por hardware. Al igual que con muchos esquemas de compresión sin pérdida, los grandes cambios en el rendimiento de la decodificación solo se logran con códecs totalmente diferentes (como h.265), no con diferentes opciones para el mismo códec. Extra codificar se dedica tiempo a buscar diferentes formas de codificar los mismos bits, pero solo hay una forma de decodificar.
Y sí, h.264 tiene un modo sin pérdidas, como parte del perfil Hi444PP. No, no desea utilizarlo a través de Internet; muchos decodificadores distintos de FFmpeg carecen de soporte para esa característica especial, y la tasa de bits es enorme, como 100 a 200 Mbit / s para 1080p30 YUV 4: 2: 0 o RGB 4: 4: 4. Cómo crear un AVI sin comprimir a partir de una serie de miles de imágenes PNG usando FFMPEG tiene algunos resultados de prueba del avance de Sintel.
Nota a pie de página 2: Otros códecs como h.265 (con el codificador x265) o VP9 pueden ofrecer compensaciones de distorsión de velocidad aún mejores, pero a costa de mucho más tiempo de CPU para codificar. Durante un tiempo de codificación fijo, no estoy seguro de si hay alguna ventaja para x265 sobre x264. Pero la compatibilidad del decodificador con h.265 está mucho menos extendida que con h.264.
La compatibilidad de decodificación es muy buena para el perfil principal h.264 y, con suerte, también para el perfil alto en estos días. (8×8 DCT es más útil para resoluciones altas como 1080p y especialmente 4k). El valor predeterminado de x264 es de perfil alto. Es posible que algunos dispositivos móviles obsoletos solo tengan decodificación de hardware para el perfil de línea base h.264, pero esa es una calidad significativamente peor por tasa de bits (sin marcos B y sin CABAC, solo el CAVLC menos eficiente para el paso final de codificar estructuras sin pérdidas en un flujo de bits). )
Los ajustes preestablecidos no controlan la velocidad de la codificación. Habilitan o deshabilitan las funciones de compresión (generalmente llamadas “herramientas”). Cuando se usa un ajuste preestablecido más lento, se habilitan más herramientas. Pero dado que cada video es diferente, es imposible lograr el equilibrio perfecto para cada video cada vez.
En el caso de su contenido específico, una de esas herramientas consume más CPU y más bits, pero generará un video de mayor calidad sin dejar de encajar dentro del sobre de la tasa de bits.
Valoraciones y comentarios
No se te olvide dar recomendación a esta sección si te fue útil.