Lo que cabe en un MOV y no cabe en un MP4
MOV y MP4 son parientes mucho más cercanos de lo que sugiere su fama. El MP4 está estandarizado como
ISO base media file format, y ese estándar salió directamente del QuickTime File Format de Apple a
finales de los años noventa. Los dos archivos son árboles de cajas anidadas, los dos ponen una caja
moov a cargo de describir las pistas y los dos pueden llevar el mismo vídeo H.264 y el mismo audio
AAC. Ese origen compartido es la razón de que renombrar un .mov a .mp4 parezca funcionar de vez en
cuando.
El problema está en el “de vez en cuando”. QuickTime dejó abierta una puerta bastante más ancha. Un
MOV puede transportar ProRes, Apple Animation con canal alfa de verdad, Motion JPEG, audio PCM sin
comprimir, pistas de código de tiempo y listas de edición que el MP4 o bien prohíbe, o bien ningún
reproductor normal espera encontrarse ahí. Una grabación de pantalla hecha por macOS lleva audio PCM
de forma rutinaria; un clip exportado desde Final Cut suele ser ProRes. Renombra cualquiera de los
dos y tendrás algo con extensión .mp4 que ningún decodificador de MP4 va a tocar.
Ese es el razonamiento detrás de convertir en lugar de reempaquetar. El conversor de MKV a MP4 hermano intenta primero una copia de flujo sin pérdida y solo recodifica cuando esa copia falla, algo que le va bien al MKV porque los códecs de dentro suelen ser ya legales en MP4. Esta herramienta recodifica siempre, sin excepción, porque con MOV las probabilidades de toparse con algo que un reempaquetado no sabe resolver son altas, y porque el motivo más habitual para convertir no tiene que ver con el contenedor.
Casi siempre el culpable de que no se reproduzca es HEVC
Desde iOS 11, un iPhone configurado en “Alta eficiencia” graba en HEVC, también llamado H.265, dentro de esa envoltura MOV. El HEVC hace bien su trabajo: aproximadamente la mitad de bitrate que el H.264 para una calidad comparable, que es como un teléfono consigue meter vídeo 4K en un almacenamiento razonable. También está sujeto a patentes de una forma que el H.264 no, así que su compatibilidad flaquea justo en los sitios donde la necesitas. Windows te pide una extensión de códec, los Android antiguos se niegan, y un buen número de smart TVs, proyectores, equipos de coche y formularios de subida solo entienden H.264.
Nada de lo que hagas con el contenedor arregla eso. Mete HEVC dentro de un MP4 y seguirá siendo HEVC,
y el PC con Windows seguirá encogiéndose de hombros. Lo que resuelve el problema de verdad es
convertir el flujo de vídeo a H.264, y por eso aquí ocurre siempre, sea cual sea el códec de entrada.
H.264 dentro de MP4 con audio AAC sigue siendo la combinación de mayor compatibilidad que existe, y
el +faststart va activado para que la caja moov se reescriba al principio del archivo y la
reproducción pueda empezar antes de que termine la descarga.
CRF 18, 23 y 28
El selector de calidad se traduce en un único argumento de libx264, el factor de tasa constante. Alta calidad pone CRF 18, Equilibrada pone 23 y Archivo más pequeño pone 28. No se mueve nada más entre las tres opciones.
El CRF es un objetivo de calidad, no un objetivo de bitrate, así que el codificador gasta los bits que cada escena necesite y un plano fijo de alguien hablando acaba muchísimo más pequeño que la misma duración de cámara en mano. Unos pocos puntos de CRF cambian el tamaño de salida de forma sustancial, que es lo que hace que estas tres opciones estén realmente separadas y no sean tres matices de lo mismo. Equilibrada es el valor por defecto del propio libx264 y es la elección correcta casi siempre. Tira de Alta calidad cuando el archivo vaya a servir de fuente para editar después, porque los artefactos de compresión se acumulan cada vez que un metraje se vuelve a codificar.
El codificador trabaja con el preajuste fast en los tres casos. Un preajuste más lento encontraría
un archivo algo más pequeño con el mismo CRF, pero preajustes como slow o veryslow sencillamente
no son prácticos aquí, por un motivo que merece su propia sección. El audio se recodifica a AAC a 128
kbps siempre, lo que supone un ahorro enorme en una grabación de pantalla que llegó como PCM y un
intercambio justo en el audio de cámara.
Un solo núcleo, dentro de una pestaña
El motor es FFmpeg compilado a WebAssembly, y es la compilación de un solo hilo a propósito. El núcleo multihilo exige las cabeceras COOP y COEP, y esas cabeceras rompen los iframes de anuncios que pagan este sitio, así que la versión con hilos queda descartada de forma permanente. En la práctica eso significa que hay un núcleo haciendo un trabajo que el FFmpeg de tu escritorio repartiría entre todos. Un clip corto en 1080p termina rápido; una grabación larga en 4K lleva su tiempo de verdad, y no pasa nada por dejar la pestaña de fondo mientras trabaja.
La contrapartida es la que importa cuando el metraje es personal. Tu vídeo no se sube nunca, así que no hay plan gratuito de 100 MB, ni cola de espera, ni una copia de tus clips familiares reposando en el almacenamiento temporal de alguien. El núcleo se descarga una sola vez desde un CDN en la primera conversión, y a partir de ahí se encarga la caché de tu navegador.
Pasos, y cómo leer el resultado
- Suelta un archivo
.mov: una grabación de iPhone, una captura de pantalla de QuickTime, una edición exportada. - Deja la calidad en Equilibrada salvo que se dé alguno de los casos de arriba.
- Convierte y descarga. La salida conserva el nombre original con la extensión
.mp4.
Hay dos cosas que a veces parecen un fallo y no lo son. Si el vídeo se reproduce de lado, la rotación venía anotada como metadato del contenedor, y Rotar vídeo la fija de forma explícita. Y si un metraje HDR de un iPhone reciente se ve plano o más oscuro de lo esperado, eso es el mapeado de tonos que falta: no se aplica ninguna conversión de HDR a SDR, así que la fuente de gama amplia se interpreta como vídeo corriente. Guarda el original para todo aquello en lo que eso importe, y convierte una copia para compartir.