Tema 5.1 - Formatos y entornos multimedia¶
Antes de reproducir nada hay que saber qué hay dentro de un fichero multimedia. En este apartado no hay app todavía: hay ficheros reales, medidas reales y conversiones reales hechas con ffmpeg en el aula.
1. Los entornos de desarrollo multimedia¶
Un entorno multimedia es el programa donde capturas, editas o conviertes contenido:
| Entorno | Para qué | Dónde se usa |
|---|---|---|
| Android Studio | captura y reproduce dentro de la app | desarrollo de la app |
ffmpeg / ffprobe |
convertir, recortar y mirar cualquier fichero | línea de comandos |
| GIMP / Krita | editar imagen | escritorio |
| Audacity | editar audio | escritorio |
| Kdenlive / DaVinci Resolve | editar vídeo | escritorio |
| ExoPlayer (Media3) | reproducir en la app | dentro del código |
ffmpeg es el entorno multimedia más importante para un programador: convierte prácticamente cualquier formato y ffprobe te dice qué hay dentro de un fichero.
2. Contenedor y códec: la caja y cómo se guarda¶
- El contenedor es la caja:
.mp4,.webm,.mkv. Dentro puede haber vídeo, audio y subtítulos. - El códec es cómo se comprime cada pista:
h264,vp9,aac,opus,mp3.
Un .mp4 no dice nada del códec por sí solo: puede llevar H.264 o H.265 dentro. Por eso hay que mirar el fichero, no la extensión.
Contenedor = caja (.mp4, .webm). Códec = compresión (h264, vp9, aac). Dos ficheros con la misma extensión pueden llevar códecs distintos.
3. Imagen: PNG, JPEG y WebP¶
| Formato | Compresión | Transparencia | Cuándo usarlo |
|---|---|---|---|
| PNG | sin pérdida | sí | capturas, iconos, zonas planas |
| JPEG | con pérdida | no | fotos |
| WebP | con o sin pérdida | sí | web y apps modernas |
Medido en el aula con la misma imagen de 640 × 360:
| Fichero | Tamaño | Códec |
|---|---|---|
imagen.png |
3.010 bytes | png |
imagen.jpg (calidad 2) |
13.742 bytes | mjpeg |
imagen.webp (calidad 80) |
2.558 bytes | webp |
Convertir no siempre es reducir: en una imagen de zonas planas, el PNG pesó 4,5 veces menos que el JPEG. El formato se elige por el contenido, no por la moda.
4. Audio: WAV, MP3, OGG y AAC¶
Lo que define un audio:
- Frecuencia de muestreo: 44.100 Hz es lo habitual (calidad CD).
- Canales: 1 (mono) o 2 (estéreo).
- Profundidad: 16 bits es lo normal.
- Bitrate: cuántos bits por segundo; a más bitrate, más calidad y más tamaño.
Medido con el mismo tono de 3 segundos:
| Fichero | Tamaño | Códec | Bitrate |
|---|---|---|---|
audio.wav |
264.644 bytes | pcm_s16le | 705.717 bps |
audio.mp3 (192k) |
73.395 bytes | mp3 | 193.769 bps |
audio.ogg (calidad 5) |
9.042 bytes | vorbis | 24.112 bps |
El WAV no comprime: guarda la onda tal cual. Pasar a OGG lo dejó en 29 veces menos sin dejar de ser audible.
El bitrate es la medida del compromiso calidad/tamaño: 192 kbps en MP3 es calidad alta; 64 kbps se nota.
5. Vídeo: MP4/H.264 y WebM/VP9¶
Un vídeo añade dos datos más: resolución (640 × 360) y fotogramas por segundo (30 fps).
| Fichero | Tamaño | Vídeo | Audio | Bitrate |
|---|---|---|---|---|
video.mp4 |
52.065 bytes | h264 | aac | 138.840 bps |
video.webm |
162.215 bytes | vp9 | opus | 428.856 bps |
Aquí está la lección incómoda: el WebM salió tres veces más grande. No es que VP9 sea peor códec: es que se codificó con -deadline realtime -cpu-used 5, pensado para ir rápido, no para comprimir bien.
Un códec mejor con malos ajustes pierde contra un códec peor bien ajustado. La conversión se mide, no se supone.
6. Mirar un fichero: ffprobe¶
ffprobe lee el fichero y dice qué contiene, sin reproducirlo:
ffprobe -v error -show_entries format=format_name,duration,bit_rate \
-show_entries stream=codec_name,width,height,sample_rate,channels \
-of default=noprint_wrappers=1 video.mp4
Salida real de los ficheros del aula:
imagen.png: codec_name=png width=640 height=360
imagen.jpg: codec_name=mjpeg width=640 height=360 bit_rate=2748400
imagen.webp: codec_name=webp width=640 height=360
audio.wav: codec_name=pcm_s16le sample_rate=44100 channels=1 bit_rate=705717
audio.mp3: codec_name=mp3 sample_rate=44100 channels=1 bit_rate=193769
audio.ogg: codec_name=vorbis sample_rate=44100 channels=1 bit_rate=24112
video.mp4: codec_name=h264 width=640 height=360 + aac 44100 1ch bit_rate=138840
video.webm: codec_name=vp9 width=640 height=360 + opus 48000 1ch bit_rate=428856
ffprobe es el primer comando que se lanza ante un fichero que "no se reproduce": dice el códec real, no el que promete la extensión.
7. Convertir un fichero: ffmpeg¶
Los cuatro comandos que se usaron, tal cual:
# imagen: PNG a JPEG con calidad 2 (menor número, más calidad)
ffmpeg -i imagen.png -q:v 2 imagen.jpg
# imagen: PNG a WebP con calidad 80
ffmpeg -i imagen.png -quality 80 imagen.webp
# audio: WAV a MP3 a 192 kbps
ffmpeg -i audio.wav -b:a 192k audio.mp3
# audio: WAV a OGG (Vorbis) con calidad 5
ffmpeg -i audio.wav -q:a 5 audio.ogg
# vídeo: MP4 a WebM con VP9
ffmpeg -i video.mp4 -c:v libvpx-vp9 -b:v 500k -c:a libopus video.webm
-q:v controla la calidad en imagen y vídeo; -b:a fija el bitrate de audio. Sin esos parámetros, ffmpeg usa sus valores por defecto y el resultado puede sorprender.
8. Lo que se puede usar en Android¶
Android no reproduce cualquier cosa: tiene una lista oficial de formatos soportados por versión. Antes de dar por bueno un MP4, se consulta esa lista.
| Tipo | Formatos seguros en Android |
|---|---|
| Imagen | JPEG, PNG, WebP |
| Audio | MP3, AAC, OGG/Vorbis, WAV (PCM) |
| Vídeo | H.264 en MP4, H.265, VP9 en WebM |
La lista de formatos soportados de Android es la referencia: si el fichero no está ahí, la app puede funcionar en el emulador y fallar en un móvil real.
9. Lo que tienes que llevarte de este apartado¶
- Contenedor es la caja; códec es la compresión. La extensión no basta para saber qué hay dentro.
- PNG para zonas planas, JPEG para fotos, WebP para las dos cosas con transparencia.
- WAV guarda sin comprimir; MP3, OGG y AAC comprimen con pérdida.
- El bitrate decide el tamaño: 192 kbps en audio es calidad alta.
ffprobemira yffmpegconvierte. Se mide el resultado antes de afirmar que mejora.
Bibliografía y documentación oficial¶
- Android — formatos multimedia soportados: developer.android.com/media/platform/supported-formats.
- Android — APIs de multimedia: developer.android.com/media.
- FFmpeg — documentación oficial: ffmpeg.org/documentation.html.
- FFmpeg —
ffprobe: ffmpeg.org/ffprobe.html. - MDN — guía de formatos de imagen: developer.mozilla.org — Image file types.
- MDN — contenedores multimedia: developer.mozilla.org — Media containers.
- Google — WebP: developers.google.com/speed/webp.
- Módulo 0489 — Real Decreto 405/2023 (BOE): BOE-A-2023-13221.