Los archivos de vídeo tienen dos partes: el contenedor (formato de archivo) y el códec (la forma en que se representa el vídeo en el contenedor).
En general, el vídeo capturado en dispositivos de consumo ya está comprimido mediante algún algoritmo. Por ejemplo, las antiguas videocámaras DV utilizaban unos 14G para almacenar 1 hora de vídeo SD. La resolución era de 720 x 480 a 29,97 fotogramas por segundo (EE.UU.) y 16 bits por píxel (en realidad capturaban 24 bits por píxel, pero utilizaban el submuestreo de croma para reducir el número de bits); en bruto serían 720 x 480 x 29,97 x 2 x 60 x 60 bytes por hora, o sea, unos 75 G/hora. Para comprimir el vídeo utilizaban un método llamado transformada de coseno discreto entre fotogramas.
Incluso hoy en día, con la excepción de un par de cámaras de muy alta gama utilizadas por la industria cinematográfica, todas las cámaras utilizan algún tipo de compresión de vídeo. La más común es h.264 (un perfil específico de MPEG-4). Mi cámara 4K UHD graba a 100Mbps, mientras que la tasa de bits del vídeo de origen sin comprimir estaría cerca de los 4000Mbps.
Por lo tanto, creo que es seguro asumir que tienes vídeo comprimido de algún tipo y te gustaría hacerlo más pequeño.
Programas como ZIP utilizan la compresión de datos Lempel-Ziv-Welch que busca patrones de bits que se repiten en los datos y los sustituye por abreviaturas. Este método se denomina "compresión sin pérdidas" porque los datos que entran en el compresor son exactamente los que salen después de la descompresión. Esto funciona muy bien cuando los datos tienen muchas repeticiones (archivos de texto, por ejemplo), pero no funciona bien en datos que carecen de repeticiones (en la ciencia de la información, llamaríamos a esos datos "de alta entropía"). Los datos ya comprimidos tienen una entropía muy alta y no son aptos para este tipo de compresión. No se puede utilizar ZIP.
Las nuevas técnicas de compresión sin pérdidas utilizan un enfoque llamado Transformación Burrows-Wheeler para reorganizar los bits de un archivo de manera que puedan ser más repetitivos y luego utilizar la técnica de compresión utilizada en ZIP. Esto a veces puede ayudar a reducir un archivo de alta entropía como el vídeo comprimido, pero rara vez, y no por un margen sustancial.
Así que... La pregunta se convierte en, si no hay una manera sin pérdidas para comprimir mi vídeo, ¿hay una manera con pérdidas para hacerlo? Sí. Por "con pérdidas" se entiende que se desecha una cierta cantidad de información del vídeo en el proceso de recodificación. Esto puede disminuir la calidad en cierta medida, pero se puede ejercer un control sobre la cantidad que se tira y parar cuando se nota que reduce inaceptablemente la calidad del vídeo.
El códec de compresión de vídeo más soportado es h.264 (también llamado AVC), seguido de VP9 y el de mejor rendimiento (mejor compresión manteniendo la calidad) es h.265 (también llamado HEVC) - y habrá un VP10 para igualarlo. h.264 tiene una gran ventaja en que una gran cantidad de hardware de vídeo y tarjetas de vídeo tienen hardware incorporado para decodificar h.264, por lo que requiere muy pocos recursos para decodificar (y muchas cámaras tienen codificadores de hardware, por lo que es muy eficiente para codificar).
En un ordenador, puede transcodificar el vídeo en cualquier formato de vídeo a h.264 o h.265 con el software adecuado. También puedes decirle al codificador cuántos bits por segundo quieres usar y así especificar el tamaño del archivo de salida (esto es independiente de la resolución del vídeo). Si tienes un vídeo de 3 minutos de duración y 500 MB de tamaño, eso supone 22,2 Mbps (500 MB * 8 bits/byte / 180 segundos). Podrías decirle al codificador que utilice 10 Mbps, y el vídeo pasaría a tener 225 MB (una relación de compresión de 10:22,2). Dependiendo del vídeo, es posible que notes o no una diferencia de calidad (y si la notas, puede que la encuentres aceptable). Además, si reduces la resolución del vídeo, no necesitas un bitrate tan alto para representarlo (se necesitan menos bits para representar un fotograma de vídeo de 1280x720 que uno de 1920x1080).
Las herramientas canónicas para transcodificar vídeo son: FFmpeg, Adobe Media Encoder, Apple Compressor y Apple QuickTime 7 Pro (que ya tiene mucho tiempo). Todas ellas soportan múltiples formatos de entrada y salida. FFmpeg soporta la mayoría de los formatos, pero no tiene interfaz gráfica de usuario, por lo que hay docenas de herramientas de conversión de vídeo que utilizan FFmpeg para hacer su trabajo, pero proporcionan una bonita interfaz gráfica de usuario en la parte superior. Media Encoder es probablemente la herramienta más utilizada comercialmente. Compressor será utilizado sobre todo por los usuarios de FinalCut Pro X de Apple.
Cada una de estas herramientas permite especificar la resolución de salida del vídeo y el bitrate de salida (que establece el tamaño del archivo).
Here’s an example how you’d compress that hypothetical 500 MB video (big_22mbps_video.mp4) above to 225 MB video (smaller_10mbps_video.mp4) using FFmpeg:
- ffmpeg -i big_22mbps_video.mp4 -b:v 10M smaller_10mbps_video.mp4