Transcodificación en el desarrollo móvil — qué es, principio de funcionamiento y casos de uso

Autor: IT Sectr Publicado: 2026-05-25 Tiempo de lectura: 10 min

Transcoding es el proceso de convertir un archivo multimedia digital de un formato de compresión a otro mediante una decodificación completa y una recodificación posterior. A diferencia de la transmuxing (cambio solo del contenedor), el transcoding modifica el códec, la tasa de bits, la resolución y otros parámetros del flujo comprimido. Según Apple AVFoundation documentation (2026), el transcoding se utiliza para adaptar el contenido a diferentes dispositivos y condiciones de red.

Puntos Clave

  • Transcoding es la decodificación completa del flujo de origen en PCM sin comprimir seguida de codificación en un nuevo formato
  • Transmuxing cambia solo el contenedor sin recodificar el flujo — esto no es transcoding
  • Razones principales del transcoding: cambio de códec, reducción de tasa de bits, cambio de resolución, adaptación a DRM
  • Herramientas: FFmpeg, AVFoundation (iOS), MediaCodec (Android), AWS Elemental MediaConvert
  • Transcoding en tiempo real en dispositivos móviles requiere aceleración de hardware del codificador

¿Qué es el Transcoding?

Transcoding es el proceso de convertir un archivo multimedia de un formato de compresión a otro mediante la decodificación completa del flujo de origen en un formato PCM intermedio sin comprimir y la posterior codificación con nuevos parámetros. Si el archivo de origen utiliza el códec H.264 con una tasa de bits de 10 Mbps y la salida necesita H.265 con una tasa de bits de 3 Mbps — eso es transcoding.

El transcoding se diferencia del simple reempaquetado (transmuxing), donde solo cambia el contenedor (por ejemplo, MP4 a MKV) mientras que el flujo de bits comprimido permanece sin cambios. El transcoding implica operaciones computacionalmente costosas: decodificación de cada fotograma, aplicación de filtros (escalado, corrección de color, recorte) y recodificación con nuevos parámetros. Esto hace que el transcoding sea una de las operaciones que más recursos consume al trabajar con multimedia.

El transcoding se utiliza en una amplia gama de tareas: adaptación de video a las limitaciones de ancho de banda, conversión a un formato con soporte de decodificación por hardware en el dispositivo de destino, creación de múltiples versiones para transmisión HLS/DASH, extracción de pistas de audio en un archivo separado. Los servicios OTT (Netflix, YouTube, Twitch) transcodifican cada archivo subido en docenas de variantes con diferentes tasas de bits, resoluciones y códecs para proporcionar transmisión adaptativa a millones de usuarios.

¿Cómo Funciona el Transcoding?

El proceso de transcoding consta de tres etapas principales: decodificación, procesamiento y codificación. Cada etapa puede realizarse en CPU o en bloques de GPU/hardware dependiendo de la disponibilidad y el rendimiento requerido.

Etapas del Transcoding

La primera etapa es la decodificación del flujo de origen. El archivo de origen se lee del contenedor (MP4, MOV, MKV), después de lo cual los paquetes de video comprimidos se envían al decodificador. La decodificación puede ser por hardware (si el códec es compatible) o por software a través de FFmpeg. La salida de la decodificación son fotogramas sin comprimir en formato YUV420 o BGRA — esta es la etapa donde el transcoding se diferencia del simple remultiplexado.

La segunda etapa es el filtrado y procesamiento. Los fotogramas decodificados pasan a través de una cadena de filtros: escalado a la resolución objetivo, cambio de la tasa de fotogramas, corrección de color, superposición de texto o gráficos. La cadena de filtros de FFmpeg se construye como un grafo donde cada filtro es un módulo de procesamiento separado. Por ejemplo, el filtro scale=1280:720 cambia la resolución, fps=30 cambia la tasa de fotogramas y yadif realiza el desentrelazado. Todas las operaciones se realizan sobre fotogramas sin comprimir, lo que hace que la segunda etapa sea la que más recursos consume.

La tercera etapa es la codificación en el formato de destino. Los fotogramas procesados se introducen en el codificador, que los comprime según el algoritmo del códec objetivo. El codificador puede ser por hardware (VideoToolbox en iOS, MediaCodec en Android) o por software (libx264, libx265). Parámetros de codificación: CRF (Constant Rate Factor) para calidad constante, tasa de bits para CBR/VBR, perfil y nivel para compatibilidad con los dispositivos de destino.

cpp
// Diagrama del pipeline de transcodificación con FFmpeg
AVFormatContext *inputCtx, *outputCtx;
AVCodecContext *decoderCtx, *encoderCtx;
AVFrame *frame = av_frame_alloc();
AVPacket packet;

while (av_read_frame(inputCtx, &packet) >= 0) {
    // 1. Decodificar
    avcodec_send_packet(decoderCtx, &packet);
    avcodec_receive_frame(decoderCtx, frame);
    
    // 2. Filtrar (escalado + cambio de fps)
    sws_scale(swsCtx, frame->data, frame->linesize,
              0, frame->height, scaledFrame->data,
              scaledFrame->linesize);
    
    // 3. Codificar
    avcodec_send_frame(encoderCtx, scaledFrame);
    avcodec_receive_packet(encoderCtx, &outPacket);
    av_interleaved_write_frame(outputCtx, &outPacket);
}

El pipeline anterior demuestra el ciclo clásico de transcoding. La función av_read_frame lee paquetes comprimidos del archivo de entrada, avcodec_send_packet los decodifica en fotogramas, sws_scale realiza el escalado y avcodec_send_frame codifica el fotograma procesado en el formato de salida. Este ciclo de tres etapas se repite para cada fotograma o grupo de fotogramas (GOP), dependiendo de la configuración del codificador.

Transcoding vs Transmuxing

La diferencia entre transcoding y transmuxing es uno de los puntos de confusión más comunes en la ingeniería multimedia. Comprender esta diferencia es fundamental para elegir la estrategia correcta de procesamiento multimedia.

ParámetroTranscodingTransmuxing
Qué cambiaCódec, tasa de bits, resoluciónContenedor, metadatos
Carga computacionalAlta (decodificación + codificación)Mínima (copia de paquetes)
CalidadPuede degradarse (pérdida de generación)Sin pérdidas
Tiempo de ejecuciónMinutos–horas para video largoSegundos–minutos
AplicaciónAdaptación de formato, compresiónCambio de contenedor por compatibilidad

Transmuxing es el reempaquetado de un flujo comprimido en un contenedor diferente sin decodificación y recodificación. Si el video ya está comprimido con el códec H.265 en un contenedor MP4 y necesita colocarse en un contenedor MOV o MKV — la transmuxing simplemente copia los paquetes de bits de un contenedor a otro. La calidad no se ve afectada, el tiempo de procesamiento es mínimo ya que no se requiere decodificación de fotogramas. FFmpeg realiza la transmuxing con el flag -codec copy.

Transcoding, por otro lado, decodifica y re-comprime completamente el flujo multimedia. Cada vez que un video pasa por transcoding, puede ocurrir una pérdida de generación (generation loss) — una ligera degradación de la calidad debido a la compresión con pérdidas repetida. Incluso con la misma tasa de bits, la tercera generación de transcoding suele ser peor que la primera. Es por esto que los profesionales recomiendan almacenar las copias maestras en formatos sin comprimir o mínimamente comprimidos (ProRes, DNxHR) y transcodificar solo las versiones finales para distribución.

Herramientas de Transcoding

La elección de la herramienta de transcoding depende de la plataforma, los requisitos de rendimiento y el caso de uso. Para el desarrollo móvil, están disponibles tanto las API nativas como las bibliotecas multiplataforma.

FFmpeg — Herramienta Universal

FFmpeg es el estándar de facto para transcoding en todas las plataformas. La línea de comandos de FFmpeg permite realizar prácticamente cualquier conversión: cambio de códec, ajuste de tasa de bits, recorte, concatenación, aplicación de filtros. Para aplicaciones móviles, FFmpeg se integra a través de las bibliotecas libavformat, libavcodec y libavfilter. Ejemplo de un comando típico de transcoding: ffmpeg -i input.mp4 -c:v libx265 -crf 23 -c:a aac -b:a 128k output.mp4.

API de Plataforma

En iOS, el transcoding se realiza a través de AVAssetWriter y AVAssetReader. AVAssetReader decodifica el archivo de origen leyendo fotogramas sin comprimir, y AVAssetWriter los codifica en el formato de destino. Este enfoque utiliza automáticamente los codificadores de hardware VideoToolbox, garantizando el máximo rendimiento. En Android, la funcionalidad similar está disponible a través de MediaCodec junto con MediaExtractor y MediaMuxer — MediaExtractor extrae paquetes comprimidos, MediaCodec decodifica y codifica, MediaMuxer escribe el resultado.

Servicios en la Nube

Para el transcoding del lado del servidor en entornos de producción, se utilizan servicios en la nube: AWS Elemental MediaConvert, Azure Media Services, Google Transcoder API. Estos servicios se escalan automáticamente bajo carga, admiten todos los formatos populares y pueden transcodificar un solo archivo de entrada en docenas de variantes de salida para transmisión adaptativa (HLS, DASH). Para aplicaciones móviles, el transcoding en la nube es la solución óptima ya que no carga el dispositivo del usuario y permite la preparación asíncrona de contenido.

Ejemplos de Código de Transcoding

Examinemos ejemplos prácticos de transcoding en plataformas móviles utilizando aceleración por hardware y configuración de parámetros clave de calidad.

Transcoding de H.264 a H.265 en iOS

swift
import AVFoundation

func transcodeVideo(sourceURL: URL, destURL: URL) {
    let asset = AVAsset(url: sourceURL)
    let preset = AVAssetExportPresetHEVCHighestQuality
    
    AVAssetExportSession(asset: asset, presetName: preset)?
        .exportAsynchronously {
            switch assetExportSession?.status {
            case .completed:
                print("Transcodificación finalizada")
            case .failed:
                print("Error: " + assetExportSession.error.localizedDescription)
            default:
                break
            }
        }
    
    // Transcodificación manual con AVAssetReader + AVAssetWriter
    let reader = try AVAssetReader(asset: asset)
    let writer = try AVAssetWriter(url: destURL,
        fileType: .mp4)
    
    let outputSettings: [String: Any] = [
        AVVideoCodecKey: AVVideoCodecType.hevc,
        AVVideoWidthKey: 1920,
        AVVideoHeightKey: 1080,
        AVVideoCompressionPropertiesKey: [
            AVVideoAverageBitRateKey: 4_000_000,
            AVVideoProfileLevelKey: AVVideoProfileLevelH265Main10
        ]
    ]
    
    let adaptor = AVAssetWriterInput(
        mediaType: .video,
        outputSettings: outputSettings
    )
    writer.add(adaptor)
}

El ejemplo muestra dos enfoques para el transcoding en iOS. AVAssetExportSession es una forma sencilla con ajustes preestablecidos de calidad (HEVCHighestQuality para H.265). El pipeline manual a través de AVAssetReader + AVAssetWriter proporciona control total sobre los parámetros: tasa de bits, perfil, nivel. El parámetro AVVideoProfileLevelH265Main10 habilita el perfil HDR Main10 con profundidad de color de 10 bits, lo cual es importante para el contenido HDR moderno.

Transcoding en Android con MediaCodec

kotlin
class Transcoder(private val context: Context) {
    
    fun transcodeToHevc(inputUri: Uri, outputFile: File) {
        val extractor = MediaExtractor()
        extractor.setDataSource(context, inputUri, null)
        
        val trackFormat = extractor.getTrackFormat(videoTrackIndex)
        val mime = trackFormat.getString(MediaFormat.KEY_MIME)
        
        val decoder = MediaCodec.createDecoderByType(mime!!)
        val encoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_HEVC)
        
        val outputFormat = MediaFormat.createVideoFormat(
            MediaFormat.MIMETYPE_VIDEO_HEVC, 1920, 1080
        ).apply {
            setInteger(MediaFormat.KEY_BIT_RATE, 4_000_000)
            setInteger(MediaFormat.KEY_FRAME_RATE, 30)
            setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
        }
        
        encoder.configure(outputFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
        encoder.start()
    }
}

El código de Android crea un pipeline de MediaExtractor — decodificador MediaCodec — codificador MediaCodec — MediaMuxer. MediaExtractor determina el tipo de códec del archivo de entrada y selecciona el decodificador correspondiente. El codificador se configura para H.265 (HEVC) con una tasa de bits de 4 Mbps y un intervalo de fotogramas clave de 2 segundos, lo cual es óptimo para transmisión. Importante: el codificador MediaCodec funciona de forma síncrona, por lo que para transcoding en tiempo real se debe implementar un bucle con manejo correcto de marcas de tiempo (PTS) para cada fotograma.

Optimización del Transcoding para Dispositivos Móviles

El transcoding en dispositivos móviles es una tarea que requiere una optimización cuidadosa debido a los recursos limitados de CPU, GPU y las restricciones térmicas. Varias estrategias ayudan a realizar el transcoding de manera eficiente.

Uso de Codificación por Hardware

El factor clave de rendimiento es el codificador por hardware. En iOS, VideoToolbox proporciona codificación por hardware de H.264 y H.265 a velocidades 5–10 veces más rápidas que libx264 por software. En Android, MediaCodec utiliza componentes OMX de hardware si están disponibles. Habilitar la codificación por hardware reduce el tiempo de transcoding de un video de 10 minutos de 30–40 minutos (software) a 3–5 minutos (hardware) en un dispositivo insignia.

Selección de Parámetros de Calidad

Para el transcoding móvil, el equilibrio entre calidad, tamaño y tiempo de procesamiento es crítico. Para H.265 en dispositivos móviles, se recomienda una tasa de bits de 4–8 Mbps para video 1080p a 30 FPS. El modo CRF (Constant Rate Factor) en libx265 permite establecer la calidad directamente, donde 23–28 proporciona buena calidad visual con un tamaño de archivo moderado. Para codificadores por hardware, use el modo CBR con una tasa de bits objetivo ya que CRF no es compatible con hardware.

Gestión Térmica

El transcoding continuo en un dispositivo móvil provoca un calentamiento significativo. Después de 5–7 minutos de codificación intensiva de video 4K, la temperatura del procesador puede alcanzar 50–55 grados, después de lo cual se activa el estrangulamiento térmico. La solución es transcodificar con pausas o reducir la tasa de fotogramas a 30 FPS. Si la aplicación requiere transcoding por lotes (por ejemplo, un editor de video), es mejor procesar en lotes de 2–3 minutos con intervalos de enfriamiento. Para escenarios de producción, lo óptimo es trasladar el transcoding al lado del servidor y utilizar servicios en la nube.

Preguntas Frecuentes

¿En qué se diferencia el transcoding de la codificación?

La codificación (encoding) es la compresión de datos sin comprimir en un códec de destino. El transcoding incluye tanto la decodificación como la codificación: primero decodifica un flujo comprimido existente, luego lo codifica de nuevo. La codificación simple toma datos sin comprimir como entrada (por ejemplo, de una cámara), mientras que el transcoding toma un archivo ya comprimido.

¿Qué códec elegir para transcoding en móviles?

Para máxima compatibilidad — H.264. Para mejor compresión — H.265 (HEVC). Si el dispositivo admite codificación por hardware H.265 (iPhone 8+, Android con Snapdragon 845+), proporciona la mitad del tamaño de archivo con la misma calidad. La codificación AV1 en dispositivos móviles sigue siendo demasiado lenta incluso con aceleración por hardware.

¿Qué es el “transcoding sin pérdidas”?

Estrictamente hablando, el transcoding sin pérdidas es imposible al cambiar entre códecs con pérdidas. Si ambos códecs tienen pérdidas, cada generación de transcoding degrada la calidad. El transcoding sin pérdidas solo es posible entre formatos sin pérdidas (FFV1, H.264 Lossless) o al cambiar de contenedor sin recodificar (transmuxing).

¿Se puede transcodificar video en tiempo real?

Sí, si se utilizan decodificador y codificador por hardware y la resolución de destino no supera 1080p. En dispositivos con VideoToolbox (iOS) o MediaCodec (Android), el transcoding en tiempo real de H.264→H.265 es posible con un retraso de 1–3 segundos. Para 4K en tiempo real, se requiere un SoC potente como Apple A17 Pro, Snapdragon 8 Gen 2 o superior.

¿Por qué la calidad del video empeoró después del transcoding?

El transcoding con pérdidas acumula artefactos de compresión. Si el archivo de origen ya estaba muy comprimido (tasa de bits de 2–3 Mbps para 1080p), la recompresión duplica las pérdidas. Se recomienda transcodificar solo desde copias maestras con alta tasa de bits (20+ Mbps) y usar CRF 18–23 para pérdidas mínimas.

Resumen

  • Transcoding es el ciclo completo de decodificación + codificación de medios para cambiar códec, tasa de bits o resolución
  • Transmuxing cambia solo el contenedor sin recodificar — esto no es transcoding
  • Transcoding por hardware en VideoToolbox y MediaCodec es 5–10 veces más rápido que por software
  • FFmpeg es una herramienta universal que admite cientos de códecs y filtros de procesamiento
  • Cada generación de transcoding con pérdidas degrada la calidad — use copias maestras
  • Parámetros óptimos para H.265 móvil: tasa de bits 4–8 Mbps, perfil Main10, GOP 2 segundos
  • Para producción use servicios de transcoding en la nube (AWS Elemental, Azure Media) — no cargan el dispositivo

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también