Manual de conversión de XX formato a H264 (en contenedor mp4 o mkv) usando MeGUI Este manual lo hice con la idea de que sea una guía básica para el encodeo en este fabuloso codec el H264, en este caso en el contenedor mp4 o mkv, el uso de estos ya queda su gusto, usen el que más les agrade. Esta guía se basará en el cotenedor mp4, y porque este, porque a mí parecer es el contenedor más estandarizado en la actualidad. Todos ya sabrán a que nos referimos cuando hablamos de h264, y pues para el que no sabe, lea este artículo en wikipedia: http://es.wikipedia.org/wiki/AVC, por lo que nos queda definir que es MeGUI; MeGUI es la interfaz gráfica del codec x264 que incluye todas las opciones avanzadas del codec y permite crear videos en H264 multiplexados en mp4 y mkv, no sólo esto, también puede encodear en XVID, crear scripts avs (archivos de aviynth), generador de proyectos .d2v (esto para ripeo de DVD) y muchas otras cosas, lo que lo convierte en una herramienta muy completa. Para esta guía se requerirá un conocimiento básico del avisynth y tenerlo instalado en la pc. Si no lo tienes instalado, puedes descargarlo de de aquí, bájense el archivo ejecutable e instálenlo. ¿Dónde consigo el MeGUI? Pues en su página oficial : http://www.x264.nl./ (Vayan al apartado gui y seleccionen un mirror para su descarga). Para que corra correctamente se tiene que tener instalado previamente Microsoft .NET Runtime 2.0 Una vez instalado el MeGUI tendrán una ventana como esta: En Options-->settings (o apretando crtl+s) tendremos una ventana como esta:
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Manual de conversión de XX formato a H264 (en contenedor mp4 o mkv) usando MeGUI
Este manual lo hice con la idea de que sea una guía básica para el encodeo en este fabuloso codec el
H264, en este caso en el contenedor mp4 o mkv, el uso de estos ya queda su gusto, usen el que más les
agrade.
Esta guía se basará en el cotenedor mp4, y porque este, porque a mí parecer es el contenedor más
estandarizado en la actualidad.
Todos ya sabrán a que nos referimos cuando hablamos de h264, y pues para el que no sabe, lea este
artículo en wikipedia: http://es.wikipedia.org/wiki/AVC, por lo que nos queda definir que es MeGUI; MeGUI
es la interfaz gráfica del codec x264 que incluye todas las opciones avanzadas del codec y permite crear
videos en H264 multiplexados en mp4 y mkv, no sólo esto, también puede encodear en XVID, crear
scripts avs (archivos de aviynth), generador de proyectos .d2v (esto para ripeo de DVD) y muchas otras
cosas, lo que lo convierte en una herramienta muy completa.
Para esta guía se requerirá un conocimiento básico del avisynth y tenerlo instalado en la pc. Si no lo
tienes instalado, puedes descargarlo de de aquí, bájense el archivo ejecutable e instálenlo.
¿Dónde consigo el MeGUI?
Pues en su página oficial : http://www.x264.nl./ (Vayan al apartado gui y seleccionen un mirror para su
descarga).
Para que corra correctamente se tiene que tener instalado previamente Microsoft .NET Runtime 2.0
Una vez instalado el MeGUI tendrán una ventana como esta:
En Options-->settings (o apretando crtl+s) tendremos una ventana como esta:
VBV Buffer Size: Esta opción permite limitar el tamaño máximo del Video Buffer utilizado para la
reproducción posterior del vídeo. El Video Buffer Verifier se puede explicar como la memoria de vídeo que
utiliza el decoder para almacenar los datos que a continuación se van a reproducir. Si el tamaño es muy
grande el tiempo de comienzo de la reproducción se alargará (hasta llenar la memoria de video), si el
tamaño es pequeño la reproducción puede no ser fluída debido a que se almacenan pocos datos previos
para ser mostrados.
En algunos casos esta opción se utiliza para vídeos que van a ser reproducidos en dispositivos de baja
potencia. En todo caso se recomienda no rellenar la casilla, lo que es lo mismo que utilizar el valor por
defecto 0 que establece el tamaño del Buffer de vídeo automáticamente.
VBV Maximum Bitrate: Aquí se especifica el Bitrate máximo que se puede alojar en el Buffer de vídeo.
Se recomienda no rellenar la casillo (el valor por defecto 0 regula automáticamente el bitrate).
VBV Initial Buffer: En esta casilla se puede determinar el nivel de llenado del Buffer de vídeo previo al
comienzo de una reproducción. Los niveles bajos pueden provocar una calidad inicial de vídeo reducida,
los niveles altos una calidad inicial alta de forma artificial. Se recomienda dejar el valor 0,9 por defecto.
Bitrate Variance: La variación de bitrate (medida en porcentaje) es uno de los parámetros que determina
la facilidad con la que el códec se puede adaptar a los cambios de escena desviándose del bitrate
promedio pedido.
Un valor bajo limita la adaptibilidad del códec pero aumenta la precisión a la hora de ajustarse al tamaño
final. También facilita una reproducción más fluída.
Un valor alto permite que el códec se adapte mejor a los distintos tipos de escena que encuentre
empleando el bitrate necesario en cada ocasión pero haciendo muy difícil que se ajuste al tamaño final
estipulado.
En los extremos podemos decir que un valor del 0% hace que se produzca una codificación CBR (Bitrate
Constante) y que el valor 100% deja total libertad de bitrate al códec produciendo una codificación CQ
(Constant Quantizer).
Se recomienda utilizar el valor 1,0 y no superar en todo caso el 4,0.
Quantizer Compression: La Quantizer Curve Compression es otro de los parámetros que regula la
adaptibilidad del códec. En este caso se ajusta los cambios en calidad final que se pueden producir
cuando se alcanza el bitrate promedio pedido.
Los valores bajos ofrecen una calidad constante pero limitan la adaptibilidad del códec para ahorrar bits
en escenas donde los detalles no son tan necesarios e invertirlos donde se necesitan.
Los valores altos puede mejorar la calidad general del vídeo al aprovechar mejor los bits de zonas de
"ahorro" en zonas más importantes pero pudiendo producir unos cambios de calidad demasiado grandes
lo que al final deteriora la calidad en los cambios de escena.
El valor 0 determina una calidad constante mientras que el valor 1,0 hace casi imprevisible el cambio de
calidad entre escenas. El valor 0,6 es de uso recomendado.
Temp. Blur of est. Frame complexity: Este parámetro reduce las fluctuaciones en el quantizer
empleado antes de la curva de compresión.
Temp. Blur of Quant after CC: Este parámetro reduce las fluctuaciones en el quantizer empleado
después de la curva de compresión.
M.E. (Motion Estimation)
Chroma M.E.: Activando la casilla se tomará en cuanta los datos de color dentro de las estimaciones de
movimiento con lo que aumentaremos la calidad. Recomendado su activación.
M.E. Range: En esta casilla se limita el máximo rango empleado para los vectores en la Estimación de
Movimiento acotando el seguimiento de la evolución de los macrobloques en cualquier cambio en la
escena; pudiendo ampliar el valor hasta 64 y siendo el mínimo 4. El valor por defecto (16) es suficiente y
no se recomienda aumentar por encima de 32 ya que la velocidad se resiente sobremanera. El valor de
32 es un buen valor cuando se tiene videos con cambios bruscos de moviento.
Scene Change Sensitivity: Este valor controla la detección de cambios de escena en el vídeo
modificando la "agresividad" con la que se van a insertar I-frames extras al comienzo de cada cambio de
escena. A mayor valor mayor presencia de I-frames puede darse (lo que puede mejorar la calidad en esos
cambios y de forma general aunque también puede disparar el tamaño final del vídeo). El valor por
defecto (40) es más que suficiente.
M.E. Algorithm: La Estimación del Movimiento puede utilizar cuatro algoritmos distintos dependiendo de
su grado de complejidad, siendo Diamond Search el más rápido empleando un radio de valor 1 sobre los
píxeles; el segundo método, Hexagonal Search, es el empleado por defecto, utiliza para el análisis un
radio de valor 2 y ofrece buenos resultados a una velocidad media; el tercer método, Uneven Multi-
Hexagon Search ofrece una mayor calidad pero la velocidad se resiente; por último el método. Exhaustive
Search ofrece el análisis más complejo pero la velocidad es extremádamente lenta.
Por lo tanto la recomendación es usar el algoritmo por defecto o a lo sumo el tercero de ellos.
Subpixel Refinement: Esta sección controla la precisión de la estimación de movimiento (similar al
Motion Search Precision de XviD).
Se recomienda el empleo del valor 6 - RD on I/P frames que ofrece una calidad excelente (emplea Rate
Distortion Optimized un método de estimación de movimiento mejorado) aunque vuelve la codificación
más lenta. Sin embargo el valor por defecto (5) puede resultar suficiente. En últimas versiones han salido
2 valores más, el valor 8 - RD refinement on I/P frames y el valor 9 - RD refinement on all frames. Esto es
lo que dijo Dark_Shikari, uno de los desarroladores del x264:
Code: commit c89bc900a3bf0d4c4c728ad378703970b4f14e18 r996 Author: Jason Garrett-Glaser <[email protected]> Date: Tue Sep 30 18:34:56 2008 -0700 Rework subme system, add RD refinement in B-frames The new system is as follows: subme6 is RD in I/P frames, subme7 is RD in all frames, subme8 is RD refinement in I/P frames, and subme9 is RD refinement in all frames. subme6 == old subme6, subme7 == old subme6+brdo, subme8 == old subme7+brdo, subme9 == no equivalent --b-rdo has, accordingly, been removed. --bime has also been removed, and instead enabled automatically at subme >= 5. RD refinement in B-frames (subme9) includes both qpel-RD and an RD version of bime.
En una de las últimas versiones del codec ya es posible usar un décimo modo, pero eso sólo se logra con
linea de comandos. Habrá que esperar a alguna versión de MeGUI que pueda utilizar esta opción.
Este parámetro se puede identificar en la linea de comandos como: --subme.
Misc
Keyframe interval: Aquí se indica la máxima distancia que debe existir entre dos IDR-Frames, o lo que
es lo mismo el tamaño máximo de cada GOP (Group of Pictures). El tamaño de los GOP’s se calcula
dinámicamente durante la codificación.
Al adelantar o atrasar la reproducción de un vídeo se produce un desplazamiento entre los distintos
GOP’s lo que permite acelerar la búsqueda del nuevo punto de reproducción.
En principio los frames encargados de marcar cambios de escenas y puntos de búsqueda son los I-
Frames pero puede darse el caso de que un I-Frame se encuentre "en medio" de un GOP por lo que no
puede ser localizado al efectuar búsquedas. Esto es debido a la posibilidad de que cada frame puede
usar como referencia múltiples frames anteriores.
Para remediar esto se situan los llamados IDR-Frames al inicio de cada GOP. Un IDR-Frame no hará
refeferencia a frames anteriores pero los frames posteriores sí podrán referirse a él como a un I-Frame
normal.
Establecer un tamaño máximo previene una reducción en la capacidad de búsqueda que se daría en
GOP’s demasiado grandes.
Min. GOP Size: Aquí se indica la mínima distancia entre dos IDR-Frames, o lo que es lo mismo el tamaño
mínimo de cada GOP (Group of Pictures).
Establecer un tamaño mínimo ayuda a mejorar la compresibilidad en escenas complejas (movimiento,
etc) ya que si los GOP’s son demasiado pequeños puede producirse un "exceso" de IDR-Frames que
dispararía el tamaño final del vídeo.
Los valores máximo/mínimo para el tamaño del GOP 250/25 son los más adecuados en la mayoría de
codificaciones pero en vídeos NTSC a 29,97fps se deberían emplear distancias 300/30 entre los IDR-
Frames.
Quant Options
Trellis: En esta casilla podemos añadir a los cálculos del códec una función matemática basada en el
análisis de la distorsión. Mediante el uso de coeficientes se introduce una pequeña pérdida inicial de
calidad que se compensa con una mayor compresión, lo que a su vez termina por facilitar el uso de
quants más bajos que ofrecen una calidad mayor.
El uso de esa función es muy recomendable aunque la velocidad de codificación baje.
En la versión VfW del códec al activar esta casilla se introduce el uso de la función de análisis en las
decisiones sobre macrobloques (en MeGUI el valor 1 - Final MB), sin embargo si usamos la interfaz
MeGui más el ejecutable por línea de comandos podríamos habilitar el uso de Trellis para absolútamente
todas las decisiones (valor 2 - Always), aunque la velocidad de codificación disminuye mucho.
Se recomienda utilizar el valor 1 - Final MB que consigue un buen aumento de calidad sin perjudicar
demasiado la velocidad.
No Fast P-Skip: La detección rápida de saltos permite aumentar la velocidad de codificación, sin
embargo puede producir bloques en zonas de color sólido /(paredes, etc) o ligeras gradaciones en zonas
de cielo o con poca luminosidad. Activando esta opción evitamos estos problemas aunque la codificación
será más lenta. Se recomienda activar.
CABAC: Esta opción se refiere a la activación de un tipo de codificación entrópica avanzada que se
adapta al contexto sacando más provecho de redundancias, etc. Desactivada esta opción se utiliza el
método CAVLC que aunque consume menos recursos resulta más limitado. Activar esta opción es muy
recomendable.
Number of Reference Frames: Esta opción con valores que oscilan entre 0 y 16 implica la cantidad de
frames previos a los que pueden hacer referencia los P-frames y B-frames de manera que la estimación
de movimiento sea mucho más precisa y se ahorre información en repeticiones de movimientos, etc.
Los valores más empleados se situan entre 3 y 5 y hay que advertir que cuantos más frames sean
utilizados como referencia los procesos de codificación y reproducción consumirán más recursos al ser
procesos de ida y vuelta.
Si se está codificando animé, es recomendable utilizar varios frames, ya que abundan las escenas con
repeticiones, con 9 sería suficiente, pero también se podría utilizar 16 frames, siendo este último el más
recomendable.
Ahora, si lo que se quiere es codificar una película usar más de 5 frames es una perdida de tiempo ya
que comparada con el poco provecho que se puede obtener de cara a la calidad (es difícil que en una
película abunden las escenas con repeticiones de movimientos a lo largo de 16 frames).
Mixed: Al activar esta casilla permitimos que cada partición 8x8 y 16x8 dentro de un macrobloque elijan
independientemente su frame de referencia. Con la casilla desactivada cada macrobloque sólo puede
elegir un frame de referencia. Uso Recomendado. Necesitamos al menos utilizar dos B-Frames para
activar las referencias "mixtas".
La activación de las distintas estimaciones de movimientos reducen la velocidad de codificación pero
permiten al códec ser mucho más preciso a la hora de detectar variaciones en el vídeo. El uso de todas
las casillas es Muy Recomendable y da lugar al uso del llamado High Profile del códec.
Quantizers
Minimun Quantizer: Esta casilla establece el quantizer mínimo que se empleará siendo el valor por
defecto (10) una buena elección. Valores menores permitirán utilizar quantizers de mayor calidad pero
menor compresibilidad lo que si bien en ciertas escenas puede beneficiar también puede perjudicar la
calidad global y originar archivos de tamaño excesivo.
Maximum Quantizer: Esta casilla marca el quantizer límite más alto que el códec puede utilizar. El valor
por defecto (51) es reálmente el valor de quant más alto que existe en x264, los más compresibles pero
que menor calidad ofrecen. Para cualquier película este valor puede ser el adecuado pero si tienes entre
manos un vídeo corto, o muy compresible, siempre puedes limitar ese valor para intentar conseguir una
calidad mayor (por ejemplo se puede probar con un valor de 40).
Maximum Quantizer Delta: El valor que se define en esta casilla limita el "salto" de quantizer que puede
darse entre dos escenas distintas de manera que se evita que un salto muy grande cree grandes
diferencias visuales de calidad entre ambas escenas. Por supuesto el valor por defecto (4) ofrece
resultados satisfactorios.
Credits Quantizer: Esta casilla está pensada para codificación a distinto quantizer de las zonas de
introducción y créditos con el fin de mejorar la compresibilidad. Se puede decir que es la forma de MeGUI
de ahorrar tiempo en la configuración de zonas de distinta compresibilidad.
Factor between I and P frama Quants: Esta opción indica el factor de relación entre un I-Frame y un P-
Frame. Con el valor por defecto indicamos que un I-Frame es 1,40 veces un P-Frame.
En definitiva definimos cuanto bitrate "extra" puede ser atribuido a un keyframe (IDR-Frame). Ya que los
P-Frames y B-frames hacen referencia a los I-Frames todos se beneficiarán de ese aumento, sin
embargo si el extra atribuido es excesivo el tamaño final del vídeo crecerá demasiado.
Factor between P and B frama Quants: En este caso indicamos el factor de relación entre un P-Frame y
un B-Frame. Con el valor por defecto especificamos que un P-Frame tendrá 1,30 veces el "tamaño" de un
B-Frame.
De esta forma se indica cuanto bitrate menos se puede llegar a ahorrar en un B-frame respecto al P-
frame anterior al que se hace referencia. Un valor alto puede volver el vídeo más compresible pero la
calidad de las B-frames puede salir perjudicada dañando la calidad final.
La relación de tamaño entre frames permite si está bien ajustada ahorrar y emplear en los momentos
necesarios los bits requeridos, a la vez que impide que se noten saltos de calidad si la diferencia entre el
tamaño de los frames es excesiva.
Chroma QP Offset: En este parámetro que puede tomar valores de -12 hasta 12 se ajusta la
compensación de calidad entre color y luminosidad. Ya que el ojo humano es más sensible a los cambios
de luminosidad que de color es posible conseguir una mayor compresión ahorrando datos de color sin
llegar a percibirlo. Sin embargo se recomienda dejar el valor por defecto 0 que establece un equilibrio
entre color y luminosidad.
Macroblock options:
Adaptive DCT: La activación de esta casilla modifica el tipo de transformaciones que se aplica en los
particiones 8x8 dentro de los macrobloques. Su activación es necesaria para poder usar la intra-
estimación 8x8 (I8x8).
I4x4: Permite efectuar intra-estimaciones de "movimiento" en particiones de ese tamaño dentro de los
macrobloques cuando no hay variación a lo largo de distintos frames.
I8x8: Permite efectuar intra-estimaciones de "movimiento" en particiones de ese tamaño dentro de los
macrobloques cuando no hay variación a lo largo de distintos frames. Para poder usar esta casilla es
necesario marcar la casilla Adaptive DCT.
P4x4: Permite efectuar estimaciones de movimiento en particiones de ese tamaño dentro de los
macrobloques de las P-Frames. Para poder activar esta casilla es obligatorio marcar la estimación de
movimiento en particiones más grandes para las P-Frames (P8x8).
P8x8: Permite efectuar estimaciones de movimiento en particiones de tamaño 8x16, 16x8 y 8x8 dentro de
los macrobloques de las P-Frames. Su uso es obligatorio si queremos activar la estimación de
movimiento en particiones aún más pequeñas para las P-Frames (4x8, 8x4, 4x4).
B8x8 Permite efectuar estimaciones de movimiento en particiones de tamaño 8x16, 16x8 y 8x8 dentro de
los macrobloques de las B-Frames.
B-Frames
De la misma forma que en XviD, el códec x264 puede hacer uso de las B-Frames, es decir, frames
bidireccionales que no sólo toman como referencia los frames anteriores sino que intentan predecir el
frame siguiente. Las Bi-directional Predictive Frames son áltamente compresibles ya que sólo almacenan
los datos que cambian desde el frame anterior o que difieren del frame posterior. Las B-Frames tienen
generálmente menos calidad que las I-Frames/P-Frames pero ayudan a aumentar la calidad general del
vídeo ahorrando bits donde no son reálmente necesarios para destinarlos a zonas más conflictivas. Uso
de B-Frames es recomendable, ya que aumenta la compresibilidad del encode.
Adaptative B-Frames:
Al marcar esta casilla permites un uso adaptativo de las B-Frames. Dependiendo de la necesidad de su
aplicación el número de B-Frames consecutivas puede ser reducido impidiendo que se deteriore la
calidad del vídeo comprimido.
El valor 0 (mode 0) indica que no se van a utilizar B-frames.
El valor 1 (mode 1) permite utilizar un B-Frame al estilo de los usados durante mucho tiempo en DivX
usando una predicción temporal o espacial.
El valor 2 (mode 2) ya permite usar esos B-Frames como frames de referencia a parte de poder activar
métodos avanzados de predicción.
x264 permite usar un máximo de 5 B-Frames y se recomienda un valor de 3 que combinado con el uso
adaptativo nunca perjudicará la calidad del vídeo.
B-Pyramid: La activación de esta opción permite usar las B-Frames como frames de referencia para
otras B-Frames. Esto permite aumentar la efectividad de la compresión cuando aparecen dos o más B-
Frames consecutívamente. Las versiones de FFDShow a partir de Marzo del 2005 corrigen ciertos fallos
que se daban al decodificar vídeos que tenían esta opción (también llamada B-Frames Piramidales)
activada.
RDO for B-Frames: Rate Distortion Optimized significa una mejora en la estimación de movimiento que
se aplicará a las B-Frames, si marcamos esta casilla, con lo que la calidad de las mismas mejoraría.
Por supuesto es recomendable su utilización pero hay que tener en cuenta que la velocidad de
codificación se resiente. Esta opción ha sido quitada en las últimas versiones del codec.
Weighted B-Prediction: Esta opción de activación recomendada permite que las B-Frames tengan en
cuenta los datos de "brillo" del vídeo (cuyas variaciones son captadas por el ojo humano con mayor
facilidad que las variaciones de color).
De esta forma se mejora la calidad de las B-Frames en los efectos de desvanecimiento, gradaciones, etc
(por ejemplo la representación del cielo).
Bidirectional M.E.: Con esta opción activada se añade un nivel de búsqueda adicional para los vectores
de avance y retroceso en la codificación de una B-Frame. Esta opción ha sido quitada en las últimas
versiones del codec.
B-Frame Mode: Esta opción modifica el comportamiento de los vectores de movimiento de las B-
Frames.
El modo Temporal es el aconsejado pues trabaja en el sentido clásico bidireccional de los B-Frames
tomando como referencia las particiones dentro de los frames anteriores y posteriores consiguiendo un
nivel de calidad más estable.
El método Spatial permite trabajar a los vectores de movimiento de las B-Frames "dentro" del propio
frame tomando como referencia las particiones vecinas ofreciendo un aumento de calidad en los test
PSNR; sin embargo de momento ofrece una calidad global inferior.
Parece que su punto fuerte sería su aplicación en codificaciones de anime donde la presencia de colores
planos "crea" una repetición en píxeles anexos.
El método Auto es el propio códec el que elige automáticamente en que momento utilizar los modos
Temporal-Spatial. Se recomienda su uso remarcando que en codificaciones a dos o más pasadas es
cuando se consigue más efectividad.
B-Frame Bias: Esta opción cuyos valores van de -100 a 100 permite controlar la frecuencia de uso de las
B-Frames. El valor por defecto 0 es recomendable. Con valores superiores la aparición de B-Frames sería
más probable aumentando la compresibilidad pero pudiendo perjudicar la calidad global del vídeo.
Valores menores disminuirían la compresibilidad con lo que algunas ventajas de "ahorro" de bits se
perderían, aumentando el riesgo de oversized y sobre todo de aparición de macrobloques.
En ningún caso aplicar un valor positivo significa que se pueda utilizar un número mayor de B-Frames al
especificado en la casilla Max Consecutive sino que sólo se aumenta la probabilidad de que se utilicen el
máximo de B-Frames consecutívamente.
Preset: En esta ventana desplegable podemos selecionar.
Después de todo el rollo mandado, en el cual se indicó las mejores configuraciones para el codec (eto es
discutible, ya que uno con la practica encontrará “valores mejores” que se adapten al tipo de encode que
realicen).
Luego le damos “ok” y en ventana principal de MeGUI, en la parte de video, cliquamos en Equeue y nos
dirigimos a la pestaña del mismo nombre y nos encontraremos nuestro encoding pendiente; simplemente
le damos “Start”, este proceso demora, así que nos preparamos un té y a esperar (no se olviden de
cambiar el nombre a archivo final de antes del encodeo, ya que anteriormente encodeamos el audio que
tiene el mismo nombre del avs creado,o si no, simplemente a la salida del video, en ves de mp4, le damos
RAWAVC, con esto ya no hay necesidad de cambiar el nombre.
Una vez encodeado el video, vamos a tener los tracks de audio y video separados y ahora para ponerlos
en el contenedor, nos vamos a tool->muxer->mp4muxer y nos aparecerá una ventanilla como ésta:
En video Input seleccionamos en stream de video y donde dice audio1, seleccionamos el audio creado,
luego le damos a Queue y por último no vamos a la pestaña Queue en la pantalla principal de MeGUI y le