Cualquier cosa que desee representar en una computadora, necesita encontrar una forma de convertirla en números. Este proceso de conversión a veces es completamente fiel, lo que significa que puede recuperar el objeto original con precisión de los números, o puede ser una aproximación. En el último caso, la representación digital de su objeto original está incompleta de alguna manera, y el truco es hacerlo lo suficientemente cerca en las áreas que importan , es decir, lo suficientemente cerca como para que, en circunstancias normales, apenas podamos notar la diferencia, o De ningún modo.
Texto
Los archivos de texto son un ejemplo simple de un objeto que generalmente se puede representar fielmente. Un archivo de texto es solo una secuencia de letras en algún idioma y otros caracteres (espacios, signos de puntuación, quizás algunos caracteres especiales). El primer orden del día es acordar, de una vez por todas, una representación numérica para esos caracteres: qué número usamos para representar ‘A’, qué representa ‘j’, cuál es el número para el espacio ”, etc.
Uno de los esquemas más comunes se llama ASCII. Esta es solo una tabla simple que enumera 256 caracteres más o menos útiles, incluido el alfabeto inglés, los dígitos 0-9, símbolos como ‘@’ o ‘=’ y así sucesivamente. La mayoría de los archivos de texto en realidad utilizan mucho menos de 256 símbolos diferentes, y ASCII se usa principalmente para los valores entre 0 y 127.
- ¿Cuáles son los mejores juegos para una PC que no requieren una tarjeta gráfica?
- ¿Qué monitor es mejor para mi PC?
- ¿Realmente necesitas un procesador de gama alta para tu PC?
- ¿Cómo organizo los archivos de diseño en una PC correctamente, por fecha o por proyecto?
- ¿Por qué la gente dice que las Mac son mejores que las PC?
Por ejemplo, en ASCII, ‘A’ es 65, ‘B’ es 66, ‘C’ es 67 y así sucesivamente. Las letras minúsculas comienzan en ‘a’ (97) y terminan en ‘z’ (122). Los dígitos del 0 al 9 abarcan los números del 48 al 57. El espacio es 32. Un salto de línea
me gusta
estas
en realidad está representado por dos símbolos en ASCII, uno llamado “avance de línea” o LF (10) y uno llamado “retorno de carro” CR (13). Este es un traspaso de los viejos sistemas de máquinas de escribir y es una molestia bien conocida cuando se trata de archivos de texto; algunos sistemas insisten en tener un combo CR / LF en cualquier salto de línea, otros no, y sobreviene la hilaridad.
De todos modos, si tiene un archivo de texto y desea codificarlo en datos binarios, primero lo escanea de principio a fin, convirtiendo cada carácter en su código ASCII. Ahora tienes una secuencia de números; cada uno de esos números no toma más de 3 dígitos decimales para escribir (como 122), y si lo escribe en la base 2 en lugar de la base 10 (que es lo que significa “binario”) necesita como máximo 8 dígitos (llamados “bits” ) Por lo tanto, cada carácter en un archivo de texto requiere 8 bits. A los informáticos les gusta la uniformidad, por lo que todos los números se representan utilizando los 8 bits, incluso aquellos que podrían escribirse con menos. Por ejemplo, CR es 13, que en binario es 1101 (ocho más cuatro más (omita la columna de dos, entonces cero) más uno), pero cuando almacenamos un archivo de texto, almacenamos este carácter como 00001101. Esto es como lo habíamos usado 013 en lugar de 13 para la representación decimal. La ventaja es que no necesita tener ningún tipo de separador entre los números: cada 8 bits es un número, y luego viene el siguiente.
Un breve texto como ‘Quora’ se convierte en la secuencia 81, 117, 111, 114, 97 que en binario es 0101000101110101011011110111001001100001. Así que aquí hay una codificación binaria de un pequeño archivo de texto.
Por supuesto, una vez que amplíe el alcance de los “archivos de texto” para cubrir cosas con una mayor variedad de caracteres, tamaños de letras, tablas y demás, necesitará esquemas de representación más elaborados. Detengámonos aquí por ahora y pasemos a objetos más emocionantes.
Imágenes
Las imágenes comienzan como objetos físicos en nuestro mundo físico: patrones de color y luz que golpean nuestras retinas. El primer orden del día es capturar esos patrones de alguna manera, que es lo que hacen las cámaras. Las cámaras “analógicas” más antiguas capturan la luz y la imprimen en varios tipos de película; Las cámaras “digitales” más nuevas emplean convertidores A / D en el cuerpo de la cámara para transformar la señal de color de la vida real en números.
La forma en que esto sucede es, más o menos, esto. Imagine que su campo de visión se divide en una cuadrícula fina de pequeños cuadrados.
Cada pequeño cuadrado en la cuadrícula tiene un color que es más o menos uniforme en todo el cuadrado. Cuanto más pequeños son los cuadrados, más preciso es esto. Si los cuadrados son grandes, es posible que vea un cambio de oscuro a claro o de rojo a rojo más claro dentro de un cuadrado , por lo que si alguien le pregunta “¿cuál es el color en ese cuadrado”, sería muy difícil dar un definitivo responder. Pero si la cuadrícula es muy fina, la mayoría de las veces un cuadrado estará lo suficientemente cerca como para tener un solo color; de hecho, si reemplaza la imagen real con una en la que cada cuadrado tiene exactamente ese color , una persona no podrá notar la diferencia.
Esta manzana no es realmente una manzana: es solo una matriz de 256 filas y 256 columnas de pequeños cuadrados, y cada cuadrado tiene un color específico y uniforme. ¿Puedes ver los cuadrados pequeños? En realidad no, pero si hubiéramos usado una grilla mucho más gruesa, habríamos obtenido algo como esto:
Esto se parece mucho menos a una manzana y mucho más a una serie de cuadrados. Llamamos a esos cuadrados “píxeles”, por “elementos de imagen”.
Okay. Así que ahora tenemos muchos píxeles y cada píxel tiene un color. Necesitamos representar cada píxel como un número (o unos pocos números), y luego podemos almacenar esos números como bits tal como lo hicimos antes.
Hay varias formas de hacerlo. Una forma común usa un esquema de color que se basa en Rojo, Verde y Azul, y mide la cantidad de cada uno en cada cuadrado (esto se hace con filtros de color, después de lo cual la intensidad de la luz se captura con un sensor). Cada color se mide en una escala de 0 a 255, digamos (que es de 8 bits), por lo que obtienes 24 bits en total por cada píxel. Una vez que haya hecho esto, tiene una matriz de números de 24 bits en lugar de una matriz de cuadrados. Organiza esos números en secuencia, agrega información adicional para explicar cómo está estructurado el archivo (por ejemplo, cuántas filas y cuántas columnas tiene), y eso es todo.
El proceso de convertir la imagen original en números puede verse como una secuencia de “muestreo” o “hacer algo discreto”. (“Discreto” significa que tiene un número definido de valores posibles, en lugar de un continuo de infinitos). Dividimos la imagen tanto horizontal como verticalmente en tiras y píxeles, y luego dividimos el “espacio de color” en un número finito de valores posibles. Este proceso de muestreo es lo que está detrás de la mayoría de los esquemas de conversión de analógico a digital.
En la práctica, la mayoría de los formatos de archivo de imagen emplean un paso adicional llamado compresión . La razón es esta: la imagen de manzana relativamente pequeña con la que comenzamos tiene 256 x 256 = 65,536 píxeles. Cada píxel de este tipo necesita 24 bits, por lo que solo esta manzana requeriría 1.572.864 bits. Eso es bastante, si piensa en la cantidad de fotos que tiene en su computadora o cuenta de Facebook. Por lo tanto, nos corresponde encontrar formas de usar menos bits por imagen, y esto se logra mediante la compresión. Los archivos JPEG, GIF y PNG utilizan varios esquemas de compresión. Esa es otra lata de gusanos que deberíamos guardar para una respuesta por separado.
Audio y musica
Nuestra percepción de audio se basa en detectar cambios en la presión del aire dentro de nuestros oídos. Tenemos dos oídos, así que escuchamos cosas en “estéreo”; El problema principal aquí es cómo representar lo que escuchamos en un oído (un archivo “mono”) y luego podemos cuidar nuestros dos oídos simplemente usando dos de estas representaciones.
Una señal de audio (en un oído) es, por lo tanto, simplemente “presión de aire en función del tiempo”. Un micrófono convierte esas presiones cambiantes en una señal eléctrica analógica, y ahora necesitamos convertir esas señales analógicas en, como siempre, una secuencia de números. Necesitamos, nuevamente, probar.
Una buena forma de visualizar el proceso es así:
Tenemos una señal que varía continuamente (presión de tiempo o corriente eléctrica), representada aquí como un gráfico con el tiempo que fluye hacia la derecha y la magnitud aumenta. Ahora dividimos el tiempo en una secuencia finita pero densa de puntos de muestra, y en cada punto tomamos una lectura de la magnitud y almacenamos su valor, aproximadamente, como un número.
La rapidez con la que tomamos muestras se llama frecuencia de muestreo. Una frecuencia de muestreo típica para las señales de audio es de 48,000 muestras por segundo (44,100 era el estándar para los CD de audio). ¿Por qué 48,000 y no 100 o 1,000,000? Bueno, los humanos escuchan frecuencias de sonido de hasta 20 kHz, que es cuando la presión del aire vibra 20,000 veces por segundo (la mayoría de las personas son menos sensibles, pero es bueno estar a salvo). Resulta que si desea atrapar algo que sube y baja X veces por segundo, es mejor que lo muestree a 2X veces por segundo. Esto es algo intuitivo: si solo muestreara a X veces por segundo, siempre captaría la señal en su punto máximo o mínimo y ni siquiera notaría que está oscilando. Matemáticamente esto se conoce como el teorema de Nyquist-Shannon.
Entonces, tomamos muestras 48,000 veces por segundo. El rango vertical de magnitudes se muestrea en 256 niveles (8 bits) o 65536 niveles (16 bits) o, más exactamente, alrededor de 16 millones de niveles (24 bits). Para cada punto de muestra ahora tenemos un número, y toda la señal de audio no es más que una secuencia de números. Tome dos secuencias para una señal estéreo (o más para una señal espacial, como a veces hacemos en los sistemas de cine en casa), conviértalas en binario, agregue metadatos para delinear la estructura del archivo y listo.
Una vez más, la compresión se usa a menudo para hacer que los archivos sean más manejables: los archivos mp3, por ejemplo, usan un esquema de compresión común.
Vídeo
La pista de audio de una película o clip de YouTube es un archivo de audio, que hemos cubierto, así que concentrémonos en la parte de “imagen en movimiento” (estoy suprimiendo por ahora el problema complicado de sincronizar el video con el audio. Confía en mí , es complicado. Google “drop frame” o “29.97” para los detalles sangrientos).
A estas alturas ya ha aprendido el muestreo, por lo que puede adivinar lo que sucederá después: un video es solo una imagen con una dimensión de tiempo adicional. En el mundo físico, el tiempo es continuo, pero para el beneficio de nuestra computadora necesitamos muestrear el tiempo, al igual que lo hicimos con el audio.
Entonces tomamos nuestras imágenes en movimiento tal como se ven a través de la cámara de video, y las tomamos de vez en cuando. ¿Con que frecuencia? Resulta que a este respecto, nuestros ojos son mucho menos delicados que nuestros oídos. Capturar una imagen fija 20-30 veces por segundo y luego reproducirla al mismo ritmo produce una ilusión bastante convincente de movimiento continuo. Esto fue conocido por los primeros cineastas, aunque para ahorrar desorden a veces optaron por velocidades aún más lentas (los hermanos Lumière lograron 16 cuadros por segundo).
Los formatos de video modernos y populares capturan imágenes a 24 fps o 30 fps (fps = cuadros por segundo). Su HDTV funciona a 50 o 60 fps, que es un poco más del mínimo necesario, pero ayuda a crear imágenes aún más fluidas y nítidas (nota al margen: el hecho de que existen múltiples estándares para la velocidad de cuadros, incluyendo 24 fps, 25 fps, 29.97 fps, 30 fps , 60 fps y otros es otra fuente de problemas graves: volver a muestrear uno de estos en otro es un desastre terrible).
Por lo tanto, los conceptos básicos son simples: captura muchas imágenes a una velocidad suficientemente alta, convierte cada imagen en números como se mencionó anteriormente, agrega los metadatos necesarios y tienes tu archivo de video.
Los archivos de video brindan la oportunidad de discutir otro matiz genial: el formato de archivo puede dejar espacio para que el codificador tome decisiones inteligentes. Así es como funciona con archivos de video.
¿Recuerdas cómo dijimos que los archivos de imagen pueden necesitar ser comprimidos? Obviamente, el video nos proporciona una amplia motivación para comprimir aún más diligentemente. Hagamos los cálculos para una definición estándar, película de 90 minutos:
- 90 minutos
- 60 segundos por minuto
- 30 cuadros por segundo
- 480 filas por imagen
- 640 píxeles por fila
- 3 bytes (24 bits) por píxel
Sin comprimir, esto ocuparía 150 gigabytes (GB) de espacio en disco, y eso es solo def estándar; vaya a HD y verá 8 veces eso (filas dobles, columnas dobles y fps dobles). No va a volar más de un terabyte por película, y ni siquiera consideramos la parte de audio.
Ya hemos mencionado que las imágenes individuales se pueden comprimir, pero para el video podemos (y necesitamos) hacerlo mejor. Debe quedar claro que la mayoría de los cuadros en un video son muy similares a los que aparecieron justo antes. De vez en cuando habrá un “corte” donde el cuadro cambia completamente, pero la mayoría de las veces, lo que ves frente a ti es muy similar a lo que ves 1/30 de segundo después.
¿Cómo podemos utilizar esto? Un enfoque que describiré más o menos (esta respuesta es lo suficientemente larga) es buscar bloques dentro del cuadro N + 1 que sean casi idénticos a los del cuadro N, solo se movieron un poco (piense en un disparo panorámico o una imagen fija). Habitación con algunas personas caminando). Luego, el cuadro N se almacena en su totalidad, pero el cuadro N + 1 almacena solo las ubicaciones de los bloques, los desplazamientos verticales y horizontales de cada bloque y los cambios en el bloque, que son en su mayoría ceros. Los fragmentos de dígitos que en su mayoría son 0 se pueden comprimir de manera eficiente, por lo que el cuadro N + 1 ocupará mucho menos espacio de lo que hubiera sido de otra manera.
Lo que esto significa es que el formato de archivo necesita especificar cómo se organizan esos bloques, cómo se almacenan los turnos, etc., pero no dice nada sobre cómo comprimir realmente. Un codificador de video tonto simplemente no puede usar esta función en absoluto, o usarla solo en raras ocasiones, y eso produce un archivo de video perfectamente válido, aunque sea muy grande. Un codificador más inteligente trabajaría duro para optimizar la división en bloques, la coincidencia correcta del siguiente bloque y el bloque anterior, y las diferencias, y crearía un archivo mucho más pequeño que podría abrirse con el mismo decodificador de video y se vería casi exactamente lo mismo.
(esta imagen demuestra cómo el algoritmo de búsqueda de bloques de H.265, también conocido como High Efficiency Video Coding, es más flexible que el de H.264, lo que lo hace significativamente más efectivo para lograr una alta calidad de imagen con un ancho de banda bajo).
Esos son los elementos básicos: por supuesto, hay muchas variaciones, muchos detalles que he omitido y muchos otros tipos de información que aprendimos a digitalizar de manera efectiva. Estoy dejando espacio para preguntas futuras (o pasadas).