| Staff
Es hora del H.264. Aprende como escoger la herramienta de codificación correcta y optimiza la codificación H.264 para una calidad ideal y compatibilidad de dispositivos
H.264 Es la única tecnología de compresión que se reproduce en todas las computadoras, dispositivos móviles, y reproductores OTT. Esto hace que producir archivos H.264 de alta calidad y compatibles con tus dispositivos sea una habilidad esencial. Ayudarte a adquirir y/o pulir estas habilidades es el objetivo de este artículo.
Bueno, empezaremos con el tema de compatibilidad, debido a que si el archivo no se puede reproducir en el dispositivo que se necesita, realmente no importa mucho su calidad. Entonces, veremos, la resolución, frame rate y data rate de tu archivo codificado, ya que si estos estan mal, usar los parámetros de codificación H.264, tampoco importará. Así que cubriremos como escoger la herramienta correcta de codificación y el codec H.264 y como ajustar rápidamente los parámetros de codificación x264 para una calidad óptima en el archivo.
Asegurando compatibilidad
Los parámetros de codificación fundamentales relacionados con H.264 son los perfiles y los niveles. Brevemente, los controles de perfil usados al producir el archivo codificado. El perfil Baseline produce un archivo que puede ser reproducido en dispositivos con un CPU y memoria mínimos, mientras que el Perfil High usa una técnica mas avanzada que requiere una plataforma de reproducción un poco mas poderosa. La mayoría de las herramientas de codificación brindan un control simple para escoger el perfil, como se muestra en la siguiente figura:

101507-TuneUp-Figure-1-ORG

Figura 1. Eligiendo el perfil en Telestream
Los perfiles fueron establecidos en el estándar H.264 permitiendo a los fabricantes de dispositivos soportar reproducción H.264 de una forma barata, con un bajo consumo de energía, como la usada en los primeros iPods capaces de reproducir vídeo, que solo podían reproducir H.264 usando el perfil Baseline. Por otro lado las computadoras fabricadas en los últimos 5 o 6 años, así como los dispositivos OTT pueden reproducir vídeo codificado usando el perfil High.
Para permitir un objetivo incluso más preciso de capacidades de reproducción, los niveles se configuran al máximo para parámetros como resolución y data rate, dentro de cada perfil. Esto se muestra en la Tabla 1, que muestra los perfiles y niveles soportados por los dispositivos que reproducen vídeo de Apple. En la primer columna, puedes ver el iPod original, hasta la version 5g, solo puede reproducir vídeo codificado usando el perfil Baseline a un nivel 1.3, lo que significa resolución 320×240 a 30 fps a un data rate máximo de 768 kbps. En contraste, con las computadoras y dispositivos OTT, el dispositivo de Apple más nuevo puede reproducir prácticamente cualquier archivo.

101508-TuneUp-Table-1-ORG

Tabla 1. Capacidad de reproducción de distintos dispositivos Apple.
Viendo la segunda columna de la izquierda, si quieres que tu video se reproduzca en la versión 4 de iphone o mas abajo, necesitas producir estos streams usando el perfil Baseline a una configuración máxima de 640x480x30fos a 2.5Mbps. De hecho en la nota técnica TN2224, Referencia seminal de Apple sobre producir archivos adaptativos HTTP Live streaming (HLS), Apple recomienda codificar todos los streams 640×360 y más pequeños usando el perfil Baseline, con los archivos de mayor resolución usando el perfil High y Main. Nota que como parte de la especificación HLS, los dispositivos checan la especificación del archivo antes de recuperarlo, para que de esta manera no se recupere un archivo que no se va a poder reproducir.
Desafortunadamente, la amplitud de fabricantes de dispositivos Android hace que consolidar las capacidades de reproducción en una tabla como la Tabla1 sea algo imposible. En vez de eso Google garantiza que cualquier dispositivo Android puede reproducir una archivo 480x360x30fps codificado a 500kbps sin la aceleración de hardware que muchos dispositivos proporcionan. En otras palabras, mientras que los más recientes dispositivos android son capases de reproducir los archivos codificados usando el perfil Main y High, Google no te garantiza esto.
De hecho, El documento de Google los Formatos de Media soportados dice que video 1280x720x30fps codificado a 2Mbps usando el perfil Baseline no se podrá reproducir en todos los dispositivos.
Por esta razón, cuando se produce un archivo para Android, la mayoría de las fuentes recomiendan codificar a la máxima configuración soportada (480x360x30fps a 500Kbps, perfil Baseline). Desde las versiones 3.0 y superior se soporta reproducción HLS, puedes usar el esquema de Apple presentado en TN2224 para entregar eficientemente para esos dispositivos de Android. Esto es, mientras codifiques aunque sea un stream a 480x360x30fps a 500kbps usando el perfil Baseline, tendrás un stream que pueden reproducir los dispositivos Android, y usando los protocolos HLS, el dispositivo android podrá recuperar cualquier archivo de mayor calidad que pueda reproducir.
En resumen, si vas a producir un solo archivo para reproducción en móviles, debes usar el perfil Baseline para asegurar que se pueda ver en todos lados. Si vas a producir un grupo de archivos adaptativos para reproducción en móviles, debes de codificar la resolución más baja usando el perfil Baseline, y las recomendaciones que brinda Apple en el TN2224 son un buen punto de partida.
Esto levanta una pregunta más grande: ¿Si produces archivos usando el perfil Baseline para reproducción móvil, también deberías crear archivos usando el perfil High exclusivamente para computadora o dispositivos OTT para brindar la mejor calidad posible? En mi experiencia, la diferencia en calidad entre archivos codificados usando el perfil High y Baseline es menor de lo que se podría esperar. Por esta razón, deberías comparar la calidad de los archivos usando diferentes perfiles para asegurar que los ciclos adicionales de codificación valgan la pena el esfuerzo.
Configurando Archivos
Una vez que aseguramos la compatibilidad, es tiempo de que te enfoques en la calidad. La parte mas critica aquí es la configuración de tu archivo; específicamente la resolución, frame rate, y data rate. Comete un error en esta parte y tu archivo se verá horrible, incluso si todas las otras opciones de codificación son perfectas.
Como background, como en todos los codecs de streaming de video, h.264 es un codec con pérdida, lo que significa que entre más comprimas, mayor será la pérdida en calidad. ¿Cómo aseguras que no estés sobre-comprimiendo tu video? Monitoreando una métrica llamada bits por pixel.
Brevemente, bits por pixel es la cantidad de datos aplicada a cada pixel en el archivo. La formula es el per-second data rate, dividido entre el número de pixeles por segundo, que calculas multiplicando el ancho por la resolución por el frame rate (data rate/ ancho x alto x frame rate)- Por ejemplo, supongamos que codificamos a 640x360x30fps a 800kbps. Los bits per pixel serían 0.116, calculado al dividir 8000,000/(640x360x360), o 8000,000/6,912,000. Alternativamente, puedes solo cargar el archivo en Media Info, y dejar que esta plataforma gratuita calcule los bits per pixel por ti (figura 2), así como brindarte una gran cantidad de útil información sobre tu codificación.

101510-TuneUp-Figure-2-ORG

Figura 2. Eligiendo perfil en Telestream
A 640x360x30fps, la mayoría de los productores usan un data rate entre 700kbps a 1 Mbps, lo que entrega un valor de bits per pixel entre 0.1 y 0.15. En la parte alta de la escala, ESPN codifica sus deportes high-motion a 1.4Mbps o 0.203 bits per pixel. Si tu video se ve blocky, pixeleado, y lleno de artefactos, y lo estás codificando a un valor bits per pixel de 0.1 o más bajo, aumenta tu data rate, para aumentar la calidad. Si tu valor de bits per pixel es mayor a 0.2 es muy probable que puedas producir video con una calidad similar a un data rate mucho más bajo, ahorrando costos de ancho de banda y permitiendo entregar para dispositivos móviles. Intenta codificar a un data rate más bajo y compruebalo.
Debido a que los codecs son más eficientes a altas resoluciones, el valor de bits per pixel necesario para mantener una calidad equivalente baja conforme el tamaño del frame aumenta. Por ejemplo, a 720p ESPN codifica a 2.8Mbps, o 0.102bits per pixel, casi la mitad del valor usado para archivos 640×360. La representación matemática de este aumento de eficiencia es cuantificado en la regla de Potencia de .75, que involucra exponentes fraccionarios y va más allá de mi habilidad para explicarla verbalmente. Puedes leer más sobre esto aquí.
Para el propósito de este documento, solo hay que entender que conforme la resolución aumenta, el valor de bits per pixel requerido disminuye. Como una guía, considera los datos mostrados en la Tabla 2, de mi libro Producing Streaming Video for Multiple Screen Delivery, el cual muestra data rates a las resoluciones y bits per pixel mostrados, todo a 29.97fps. Los cuadros rojos sugieren el data rate apropiado para cada resolución, que como puedes ver baja conforme la resolución aumenta. Una vez mas, si tu data rate esta mas abajo que la mostrada en la tabla y la calidad no es suficiente, aumenta el data rate hasta que logres la calidad requerida. Si tu data rate es muy alta, experimenta con un valor más bajo para ver si puedes producir un stream que se vea muy parecido a un menor costo.

101509-TuneUp-Table-2-ORG

Tabla 2. Tasas de datos recomendadas en distintas configuraciones de video.
Escoge la herramienta de codificación correcta
Una vez que tienes la configuración y el perfil correcto, es hora de empezar a perfeccionar los parámetros específicos de H.264. El número de profesionales que usan Final Cut Pro X garantiza que muy pocos productores estan codificando con el producto complementario de FCPX, el Compressor de Apple. Aunque Compressor por si solo es capaz, el codec H.264 incluido en el producto es muy insatisfactorio.
Por cierto, como background, H.234 es un estándar, asi que a diferencia de los codecs propietarios como VP6 de On2 o los codecs de Windows Media Video de Microsoft, varios terceros pueden crear su propia versión del codec. Como verás, MainConcept, una subsidiaria alemana de ROvi Corp (originalmente Macrovision), ha producido un codec H.264 usado en herramientas premium de codificación, mientras que el x264 que es open-source también es altamente soportado, desde entonces, varios desarrolladores han optimizado sus codecs H.264, mientras que Apple, probablemente enfocados en segmentos un poco mas rentables, deja su codec debilitarse, y su calidad es ahora poco competitiva.
Afortunadamente, Compressor tiene acceso a los plugins de quicktime como el x264Encoder, que puedes descargar desde MyCometG3. Nota que el sitio del desarrollador, Takashi Mochizuki, descontinuó el desarrollo de este plugin a finales del 2011, así que el código esta congelado a esa fecha. Dicho esto, mientras que continúa habiendo avances en performance, el codec x264 estaba muy optimizado en su época. Como lo puedes ver en la Figura 3, y brinda una mejor calidad que el codec de Apple.

101511-TuneUp-Figure-3-ORG

Figura 3. Códec compresor nativo de Apple es poco eficiente dentro de parámetros de codificación agresivos.
Por cierto, todos los cuadros de comparación en este artículo fueron producidos usando my video estándar de pruebas de 720p, con un fps de 29.977 comprimido a 800 kbps usando la más alta calidad soportada por cada una de las herramientas de codificación usadas, y con consistent key frame, B-frame, reference frame, y parámetros similares. Estos parámetros son agresivos; en comparación, sitios como YouTube y ESPN producen sus videos 720p, 29.97 fps a 2.5Mbps o mas.
Para ser justos, si estas produciendo tus archivos 720p a 2.5Mbps o más alto, verás muy poca diferencia entre el codec Apple y el x264. Sin embargo, si intentas lograr la mejor calidad al menor data rate posible, el x264 Encoder tendrá un performance mucho mejor. En particular, los codificadores móviles, que requieren un stream demasiado optimizado para entregar la mejor resolución a un data rate bajo, se pueden beneficiar significativamente del plugin x264. Para aquellos que no estén familiarizados con el plugin, en OnlineVideo.net se publico un extensivo tutorial sobre como instalar y usar x264Encoder en un articulo titulado “Final Cut Pro X Tutorial: Como lograr los mejores resultados de codificación.”
Usa el mejor códec H.264
Muchas herramientas de codificación, tales como Sorenson Squeeze (Figura 4), ofrecen múltiples códecs, incluyendo el llamado MainConcept, x264 y múltiples códecs acelerados por hardware tales como los H.264 MainConcept, CUDA o Intel QuickSync Video (QSV). Cuáles resaltan aquí?

101512-TuneUp-Figure-4-ORG

Figure 4. Cuál es la mejor opción aquí?
Primero, nunca debes usar el códec MPEG-4 a menos que estés creando archivos específicamente para dispositivos móviles antiguos y/o similares. Para propósitos generales usa, H.264 siempre te da mayor calidad y menor tasa de datos.
Así como entre MainConcept y x264, La Universidad del Estado de Moscú publica una comparación anual del H.264 el cuál es extenso y altamente considerado. A través de los últimos años, x264 ha probado ser la opción de más alta calidad, con MainConcept en segundo, un 20% por debajo de x264. Para explicar, los investigadores reportaron que para los clips de prueba, usando el códec x264, puedes producir un archivo con una tasa de datos menor en un 20% que MainConcept con calidad equivalente.
Resulta interesante que la Universidad del Estado de Moscú confíe únicamente en comparaciónes a nivel matemático, específicamente en Peak Signal to Noise Ratio (PSNR) y Structural Similarity Index (SSIM). Unicamente el códec x264 ofrece opciones de ajuste las cuales producen enlaces optimizados para estas pruebas, el que aparentemente usaron en la Universidad Estatal de Moscú para su producción fue x264. Esta ventaja potencial permite a los investigadores incluir este testamento en sus conclusiones generales: “El líder en esta comparación es x264 – su diferencia de calidad (de acuerdo con la métrica SSIM) puede ser explicada por la opción especial de codificación (“Ajuste-SSIM”).”
El Red herring por otro lado, mi propia prueba, el cuál está completamente basado en comparaciones subjetivas de cuadro y reproducción, indica que x264 produce streams de mejor calidad que MainConcept, aunque la ventaja parece ser menor que en el reporte de la Universidad Estatal de Moscú. Específicamente, en la mayoría de las siete secuencias de mi prueba estándar, la calidad de los dos streams fué muy similar. Donde hubo una diferencia, sin embargo, x264 fue superior, como se muestra en la Figura 5, en la cuál el cuadro x264 claramente retiene más detalles en el área circulada.

101513-TuneUp-Figure-5-ORG

Figura 5 x264 denota ligeramente mayor calidad que MainConcept.
Sin embargo, la diferencia no es tan dramática como la de se muestra en x264-Apple de la figura 1. Por esta razón, mientras utilizo x264 cuando esté disponible en alguna herramienta de codificación, Yo no podría cambiar de herramienta de codificación si MainConcept estuviera disponible y x264 no.
En comparación, como se muestra en la Figura 6, nunca utilizo códecs H.264 acelerados por hardware tales como el Intel y MainConcept CUDA, desde que son claramente inferiores a las codificaciones independientes del software. Como una confirmación de mis hallazgos subjetivos, la Universidad Estatal de Moscú rankeó el códec Intel 82% por debajo de x264, con el MainConcept CUDA 170% debajo.

101514-TuneUp-Figure-6-ORG

Figura 6. Los códecs acelerados por hardware codifican más rápido pero ofrecen menor calidad.
Brevemente, esto códecs acelerados por hardware aprovechan los núcleos de codificación en CPU’s de Intel (QSV) o el poder de procesamiento general de los GPU’s de NVIDIA (CUDA), y el énfasis del diseño fue en velocidad, no en calidad. Si necesitas una codificación más veloz, estos códecs pueden proveer algo de valor.
Sin embargo, deberías renunciar a ellos en favor de códecs basados íntegramente en H.264 tales como el x264 o MainConcept.
¿Y que hay sobre otros productos que utilizan códecs H.264 de autor? Para la mayor parte, encontrarás estos en algunos productos de gama alta tales como el hardware y codificadores de nube ofrecidos por Elemental Technologies. En mi experiencia, los vendedores que usan codificadores H.264 de autor han invertido significativamente para para igualar la calidad del x264. Por esta razón, la calidad del códec es pocas veces un diferenciador significativo cuando se compara con herramientas de gama alta.
Optimiza tus codificaciones x264
Una característica popular del códec x264 es un gran número de opciones de configuración, aunque con opciones tales como “Factor de compresión de curva Quantizer” y “Usar referencias mezcladas por particiones 8×8”, es probable que muchos compresores en el campo puedan igualar estas opciones a cualquier tipo de codificación deseada.
Por fortuna, la mayoría de las herramientas de codificación que usan el códec x264 te permiten seleccionar ambos, el preset y el mecanismo de ajuste, con las opciones típicas mostradas en la Figura 7, una pantalla desde el Codificador x264 discutido anteriormente. En resumen, los presets, los cuales fueron creados por el equipo desarrollador x264, ajusta los parámetros de codificación x264 individuales de modo que intercambien calidad con tiempo de codificación. Cuando se trata de elegir un preset, las preguntas obvias son que tanta calidad y que tanto tiempo de codificación.

101515-TuneUp-Figure-7-ORG

Figura 7. X264 Presets y ajustes desde el codificacor x264

 

Permite indicar el tiempo de codificación primero. La tabla 3 muestra los tiempos de codificación con Sorenson Squeeze cuando produje mi archivo de prueba de 92-segundos a la tasa de datos mostrada usando los presets mostrados. Yo realicé esas pruebas en una HP Z820 con dos CPU’s 2.7 Ghz Intel Xeon E5-2697 v2, cada uno con 12 núcleos (24 con HTT habilitado). Así que esta es una computadora muy veloz, y el códec x264 es altamente optimizado para computadoras de múltiples núcleos, usando casi el 100% de los CPU’s disponibles en todas las codificaciones. Si estás usando un computador más lento, las veces incrementarán, así como las diferencias entre los intervalos

101516-TuneUp-Table-3-ORG

Tabla 3. Tiempos de codificación usando los perfiles x264 en estas tasas de datos.

 

Desde una estricta perspectiva de desempeño, hay una pequeña razón para elegir un preset menor a Medium, el cuál es generalmente el ajuste predeterminado, desde el desempeño se dispara a los ajustes más veloces, no es dramático como se compara la calidad?
Bien, en comparaciones, el único preset que ha mostrado artefactos obvios fue el Ultra Fast, el cuál mostró bloqueos en ambas tasas de datos (Figuroa 8). Al otro lado del spectro, las diferencias incluso entre los ajustes Placebo y Medium fueron mucho menores, y a veces los cuadros lucen visualmente idénticos. De hecho, hay una sorprendente carencia de codificación entre SuperFast y Placebo.

101517-TuneUp-Figure-8-ORG

Figura 8. Archivos codificados usando varios presets x264
Si ejecutas un almacenamiento enfocado en la calidad y no se ve limitado por el rendimiento en tus estaciones de codificación, puedes usar el preset Very Slow para incrementar así potencialmente la calidad, mientras duplicas el tiempo de codificación. En contraste, el ajuste Placebo puede tener un impacto mucho más dramático en el tiempo de codificación, y es poco probable que produzca mejor calidad que la opción Very Slow.
Del otro lado del espectro, si estás limitado por rendimiento, puedes intentar codificar usando la opción Super Fast y probarlo para ver si los archivos aparecen degradados comparados con los codificados mediante la opción Medium. Sin embargo, no esperes que el ahorro de tiempo sea significativo. Si estás limitado por rendimiento, puede que sea hora de considerar comprar una nueva estación de codificación.
Qué hay sobre el ajuste x264? Para tomas de propósito general, algunos expertos recomiendan usar la opción Film, aunque en mis pruebas de comparación usando archivos estándar, no he visto diferencia alguna. Por otro lado, si estás codificando tomas especializadas, intenta con la opción de ajuste específico, tal como Animación para tomas de animación. Touhou para un juego de computadora Japonés, Still Image para slideshows y Grain para tomas con mucho grano.
Qué si tu herramienta de codificación no utiliza el códec x264? Desafortunadamente, los códecs y las configuraciones utilizadas por estas herramientas varian tanto que cualquier tipo de aviso específico es imposible. Por fortuna, la mayoría de las herramientas de codificación incluyen presets diseñados para entregar el mejor equilibrio entre desempeño y calidad. Cuando un vendedor ofrece presets, yo elegiría el preset más cercano a la configuración deseada, asegúrate de que el perfil es apropiado, y ajusta la resolución y tasa de datos en My target settings.