Transcodificação no desenvolvimento móvel — o que é, princípio de funcionamento e cenários de uso

Autor: IT Sectr Publicado: 2026-05-25 Tempo de leitura: 10 min

Transcoding é o processo de converter um arquivo de mídia digital de um formato de compressão para outro com decodificação completa e re-codificação. Ao contrário da transmuxação (alteração apenas do contêiner), a transcodificação altera o codec, a taxa de bits, a resolução e outros parâmetros do fluxo comprimido. De acordo com Apple AVFoundation documentation (2026), a transcodificação é usada para adaptar o conteúdo a diferentes dispositivos e condições de rede.

Pontos Principais

  • Transcodificação é a decodificação completa do fluxo de origem em PCM não compactado seguida de codificação em um novo formato
  • Transmuxação altera apenas o contêiner sem recodificar o fluxo — isso não é transcodificação
  • Principais razões para transcodificação: troca de codec, redução de taxa de bits, alteração de resolução, adaptação a DRM
  • Ferramentas: FFmpeg, AVFoundation (iOS), MediaCodec (Android), AWS Elemental MediaConvert
  • Transcodificação em tempo real em dispositivos móveis requer aceleração de hardware do codificador

O que é Transcodificação?

Transcodificação é o processo de converter um arquivo de mídia de um formato de compressão para outro, decodificando completamente o fluxo de origem em um formato PCM intermediário não compactado e codificando com novos parâmetros. Se o arquivo de origem usa o codec H.264 com taxa de bits de 10 Mbps e a saída precisa de H.265 com taxa de bits de 3 Mbps — isso é transcodificação.

A transcodificação difere do simples reempacotamento (transmuxação), onde apenas o contêiner muda (por exemplo, MP4 para MKV) enquanto o fluxo de bits comprimido permanece inalterado. A transcodificação envolve operações computacionalmente caras: decodificação de cada quadro, aplicação de filtros (redimensionamento, correção de cor, corte) e re-codificação com novos parâmetros. Isso torna a transcodificação uma das operações que mais consomem recursos ao trabalhar com mídia.

A transcodificação é usada em uma ampla gama de tarefas: adaptação de vídeo às limitações de largura de banda, conversão para um formato com suporte de decodificação por hardware no dispositivo de destino, criação de múltiplas versões para streaming HLS/DASH, extração de trilhas de áudio em um arquivo separado. Serviços OTT (Netflix, YouTube, Twitch) transcodificam cada arquivo enviado em dezenas de variantes com diferentes taxas de bits, resoluções e codecs para fornecer streaming adaptativo a milhões de usuários.

Como Funciona a Transcodificação?

O processo de transcodificação consiste em três etapas principais: decodificação, processamento e codificação. Cada etapa pode ser executada na CPU ou em blocos de GPU/hardware, dependendo da disponibilidade e do desempenho necessário.

Etapas da Transcodificação

A primeira etapa é a decodificação do fluxo de origem. O arquivo de origem é lido do contêiner (MP4, MOV, MKV), após o que os pacotes de vídeo comprimidos são enviados ao decodificador. A decodificação pode ser por hardware (se o codec for compatível) ou por software via FFmpeg. A saída da decodificação são quadros não compactados no formato YUV420 ou BGRA — este é o estágio em que a transcodificação difere da simples remultiplexação.

A segunda etapa é a filtragem e o processamento. Os quadros decodificados passam por uma cadeia de filtros: redimensionamento para a resolução alvo, alteração da taxa de quadros, correção de cor, sobreposição de texto ou gráficos. A cadeia de filtros do FFmpeg é construída como um grafo onde cada filtro é um módulo de processamento separado. Por exemplo, o filtro scale=1280:720 altera a resolução, fps=30 altera a taxa de quadros e yadif realiza a desentrelaçamento. Todas as operações são realizadas em quadros não compactados, tornando a segunda etapa a que mais consome recursos.

A terceira etapa é a codificação no formato de destino. Os quadros processados são alimentados no codificador, que os comprime de acordo com o algoritmo do codec alvo. O codificador pode ser por hardware (VideoToolbox no iOS, MediaCodec no Android) ou por software (libx264, libx265). Parâmetros de codificação: CRF (Constant Rate Factor) para qualidade constante, taxa de bits para CBR/VBR, perfil e nível para compatibilidade com dispositivos de destino.

cpp
// Diagrama do pipeline de transcodificação no 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 (redimensionar + alterar 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);
}

O pipeline acima demonstra o ciclo clássico de transcodificação. A função av_read_frame lê pacotes comprimidos do arquivo de entrada, avcodec_send_packet os decodifica em quadros, sws_scale realiza o redimensionamento e avcodec_send_frame codifica o quadro processado no formato de saída. Este ciclo de três estágios se repete para cada quadro ou grupo de quadros (GOP), dependendo das configurações do codificador.

Transcodificação vs Transmuxação

A diferença entre transcodificação e transmuxação é um dos pontos mais comuns de confusão na engenharia de mídia. Entender essa diferença é fundamental para escolher a estratégia correta de processamento de mídia.

ParâmetroTranscodificaçãoTransmuxação
O que mudaCodec, taxa de bits, resoluçãoContêiner, metadados
Carga computacionalAlta (decodificação + codificação)Mínima (cópia de pacotes)
QualidadePode degradar (perda de geração)Sem perdas
Tempo de execuçãoMinutos–horas para vídeo longoSegundos–minutos
AplicaçãoAdaptação de formato, compressãoAlteração de contêiner para compatibilidade

Transmuxação é o reempacotamento de um fluxo comprimido em um contêiner diferente sem decodificação e re-codificação. Se o vídeo já está comprimido com o codec H.265 em um contêiner MP4 e precisa ser colocado em um contêiner MOV ou MKV — a transmuxação simplesmente copia os pacotes de bits de um contêiner para outro. A qualidade não é afetada, o tempo de processamento é mínimo, pois não é necessária decodificação de quadros. O FFmpeg realiza transmuxação com a flag -codec copy.

Transcodificação, por outro lado, decodifica e recomprime completamente o fluxo de mídia. Cada vez que um vídeo passa por transcodificação, pode ocorrer perda de geração (generation loss) — uma leve degradação da qualidade devido à compressão com perdas repetida. Mesmo com a mesma taxa de bits, a terceira geração de transcodificação geralmente é pior que a primeira. É por isso que os profissionais recomendam armazenar cópias mestre em formatos não compactados ou minimamente compactados (ProRes, DNxHR) e transcodificar apenas as versões finais para distribuição.

Ferramentas de Transcodificação

A escolha da ferramenta de transcodificação depende da plataforma, dos requisitos de desempenho e do caso de uso. Para o desenvolvimento móvel, tanto APIs nativas quanto bibliotecas multiplataforma estão disponíveis.

FFmpeg — Ferramenta Universal

FFmpeg é o padrão de fato para transcodificação em todas as plataformas. A linha de comando do FFmpeg permite realizar praticamente qualquer conversão: troca de codec, ajuste de taxa de bits, corte, concatenação, aplicação de filtros. Para aplicativos móveis, o FFmpeg é integrado através das bibliotecas libavformat, libavcodec e libavfilter. Exemplo de um comando típico de transcodificação: ffmpeg -i input.mp4 -c:v libx265 -crf 23 -c:a aac -b:a 128k output.mp4.

APIs de Plataforma

No iOS, a transcodificação é realizada através de AVAssetWriter e AVAssetReader. AVAssetReader decodifica o arquivo de origem lendo quadros não compactados, e AVAssetWriter os codifica no formato de destino. Esta abordagem usa automaticamente os codificadores de hardware VideoToolbox, garantindo desempenho máximo. No Android, funcionalidade similar está disponível através de MediaCodec em conjunto com MediaExtractor e MediaMuxer — MediaExtractor extrai pacotes comprimidos, MediaCodec decodifica e codifica, MediaMuxer escreve o resultado.

Serviços em Nuvem

Para transcodificação do lado do servidor em ambientes de produção, são usados serviços em nuvem: AWS Elemental MediaConvert, Azure Media Services, Google Transcoder API. Esses serviços escalam automaticamente sob carga, suportam todos os formatos populares e podem transcodificar um único arquivo de entrada em dezenas de variantes de saída para streaming adaptativo (HLS, DASH). Para aplicativos móveis, a transcodificação em nuvem é a solução ideal, pois não sobrecarrega o dispositivo do usuário e permite a preparação assíncrona de conteúdo.

Exemplos de Código de Transcodificação

Vamos examinar exemplos práticos de transcodificação em plataformas móveis usando aceleração de hardware e configuração de parâmetros-chave de qualidade.

Transcodificação de H.264 para H.265 no 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("Transcodificação concluída")
            case .failed:
                print("Erro: " + assetExportSession.error.localizedDescription)
            default:
                break
            }
        }
    
    // Transcodificação manual com 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)
}

O exemplo mostra duas abordagens para transcodificação no iOS. AVAssetExportSession é uma maneira simples com predefinições de qualidade (HEVCHighestQuality para H.265). O pipeline manual via AVAssetReader + AVAssetWriter fornece controle total sobre os parâmetros: taxa de bits, perfil, nível. O parâmetro AVVideoProfileLevelH265Main10 ativa o perfil HDR Main10 com profundidade de cor de 10 bits, o que é importante para conteúdo HDR moderno.

Transcodificação no Android com 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()
    }
}

O código Android cria um pipeline de MediaExtractor — decodificador MediaCodec — codificador MediaCodec — MediaMuxer. MediaExtractor determina o tipo de codec do arquivo de entrada e seleciona o decodificador correspondente. O codificador é configurado para H.265 (HEVC) com taxa de bits de 4 Mbps e intervalo de quadros-chave de 2 segundos, o que é ideal para streaming. Importante: o codificador MediaCodec funciona de forma síncrona, portanto, para transcodificação em tempo real, é necessário implementar um loop com manipulação correta de timestamps (PTS) para cada quadro.

Otimização da Transcodificação para Dispositivos Móveis

A transcodificação em dispositivos móveis é uma tarefa que requer otimização cuidadosa devido aos recursos limitados de CPU, GPU e restrições térmicas. Várias estratégias ajudam a realizar a transcodificação de forma eficiente.

Uso de Codificação por Hardware

O principal fator de desempenho é o codificador por hardware. No iOS, o VideoToolbox fornece codificação por hardware H.264 e H.265 a velocidades 5–10 vezes mais rápidas que o libx264 por software. No Android, o MediaCodec usa componentes OMX de hardware se disponíveis. Ativar a codificação por hardware reduz o tempo de transcodificação de um vídeo de 10 minutos de 30–40 minutos (software) para 3–5 minutos (hardware) em um dispositivo flagship.

Escolha de Parâmetros de Qualidade

Para transcodificação móvel, o equilíbrio entre qualidade, tamanho e tempo de processamento é crítico. Para H.265 em dispositivos móveis, recomenda-se uma taxa de bits de 4–8 Mbps para vídeo 1080p a 30 FPS. O modo CRF (Constant Rate Factor) no libx265 permite definir a qualidade diretamente, onde 23–28 fornece boa qualidade visual com tamanho de arquivo moderado. Para codificadores por hardware, use o modo CBR com uma taxa de bits alvo, pois o CRF não é compatível com hardware.

Gerenciamento Térmico

A transcodificação contínua em um dispositivo móvel causa aquecimento significativo. Após 5–7 minutos de codificação intensiva de vídeo 4K, a temperatura do processador pode atingir 50–55 graus, após o que o throttling é ativado. A solução é transcodificar com pausas ou reduzir a taxa de quadros para 30 FPS. Se o aplicativo exigir transcodificação em lote (por exemplo, um editor de vídeo), é melhor processar em lotes de 2–3 minutos com intervalos de resfriamento. Para cenários de produção, o ideal é transferir a transcodificação para o lado do servidor e usar serviços em nuvem.

Perguntas Frequentes

Como a transcodificação difere da codificação?

Codificação (encoding) é a compressão de dados brutos não compactados em um codec alvo. A transcodificação inclui tanto a decodificação quanto a codificação: primeiro decodifica um fluxo compactado existente, depois o codifica novamente. A codificação simples recebe dados não compactados como entrada (por exemplo, de uma câmera), enquanto a transcodificação recebe um arquivo já compactado.

Qual codec escolher para transcodificação em dispositivos móveis?

Para máxima compatibilidade — H.264. Para melhor compressão — H.265 (HEVC). Se o dispositivo suportar codificação por hardware H.265 (iPhone 8+, Android com Snapdragon 845+), ele fornece metade do tamanho do arquivo com a mesma qualidade. A codificação AV1 em dispositivos móveis ainda é muito lenta, mesmo com aceleração de hardware.

O que é “transcodificação sem perdas”?

Estritamente falando, a transcodificação sem perdas é impossível ao alternar entre codecs com perdas. Se ambos os codecs têm perdas, cada geração de transcodificação degrada a qualidade. A transcodificação sem perdas só é possível entre formatos sem perdas (FFV1, H.264 Lossless) ou ao alterar contêineres sem recodificar (transmuxação).

É possível transcodificar vídeo em tempo real?

Sim, se forem usados decodificador e codificador por hardware e a resolução alvo não exceder 1080p. Em dispositivos com VideoToolbox (iOS) ou MediaCodec (Android), a transcodificação em tempo real H.264→H.265 é possível com um atraso de 1–3 segundos. Para 4K em tempo real, é necessário um SoC potente como Apple A17 Pro, Snapdragon 8 Gen 2 ou superior.

Por que a qualidade do vídeo piorou após a transcodificação?

A transcodificação com perdas acumula artefatos de compressão. Se o arquivo de origem já estava fortemente comprimido (taxa de bits de 2–3 Mbps para 1080p), a recompressão dobra as perdas. Recomenda-se transcodificar apenas a partir de cópias mestre com alta taxa de bits (20+ Mbps) e usar CRF 18–23 para perdas mínimas.

Resumo

  • Transcodificação é o ciclo completo de decodificação + codificação de mídia para alterar codec, taxa de bits ou resolução
  • Transmuxação altera apenas o contêiner sem recodificar — isso não é transcodificação
  • Transcodificação por hardware no VideoToolbox e MediaCodec é 5–10 vezes mais rápida que por software
  • FFmpeg é uma ferramenta universal que suporta centenas de codecs e filtros de processamento
  • Cada geração de transcodificação com perdas degrada a qualidade — use cópias mestre
  • Parâmetros ideais para H.265 móvel: taxa de bits 4–8 Mbps, perfil Main10, GOP 2 segundos
  • Para produção use serviços de transcodificação em nuvem (AWS Elemental, Azure Media) — eles não sobrecarregam o dispositivo

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também