Conversão e processamento de arquivos de vídeo com o transcode

O transcode é o canivete suíço da manipulação de arquivos multimídia no Linux. Com sua arquitetura modular, ele oferece ao usuário muito mais do que a simples conversão entre formatos...
por Jörn Reder

O transcode [1] é um verdadeiro canivete suíço que converte arquivos de um formato de vídeo para outro. Também pode ser usado para outros tipos de manipulação de vídeo, como redimensionamento de quadros. Se você está esperando que uma ferramenta de conversão de vídeos tenha uma interface gráfica bonitinha, prepare-se
para se desapontar. O programa funciona apenas na linha de comando e é operado com uma porção de parâmetros em modo texto. Como a maioria das ferramentas que não possuem interface gráfica, a maior vantagem do transcode é sua flexibilidade e seu maior ponto fraco é a usabilidade. Os que preferem fazer tudo graficamente podem escolher numa lista um front-end que ofereça uma interface amigável para seus recursos especiais (ver tabela 1). Mas nenhum desses programas consegue abarcar plenamente o poder dessa venerável ferramenta. O transcode tem uma estrutura estritamente modular. As funções críticas residem em módulos externos que só são
chamados quando necessário. Há três tipos diferentes de módulo, que correspondem às três etapas do processo de conversão de arquivos quando feito por esse programa:


Os módulos de entrada (ver tabela 2) têm a função de decodifi car arquivos de vídeo e áudio e entregá-los ao transcode
“crus” sem qualquer pós-processamento ou formatação (raw format). Há diferentes módulos para codecs individuais de áudio e vídeo, assim como para captura de vídeo vindo das populares placas de TV. A etapa seguinte aplica módulos de filtro (ver tabela 3) aos dados brutos entregues pelos módulos de entrada. Os filtros não apenas modificam os dados de imagem e som existentes, como também podem adicionar ou remover quadros para alterar a sincronia entre o vídeo e o áudio. Na etapa final, o transcode passa os dados para um ou mais módulos de saída (ver tabela 4), que os codifi cam por meio de uma variedade de codecs de áudio e vídeo e criam o arquivo no formato desejado.


Conversões simples
O seguinte comando do transcode converte um arquivo MPEG1 ou MPEG2 para um arquivo AVI no formato MPEG4:

O transcode usa a biblioteca XviD nativa do Linux para esse trabalho. A biblioteca é veloz e confiável, e quando usada sabiamente pode superar em muito os codecs comerciais no tocante à qualidade. Este exemplo simples demonstra as duas opções mais importantes: -i e -o indicam os arquivos de entrada e saída, respectivamente; -y ajusta o filtro de exportação de vídeo para xvid4 e -w configura a taxa de bits (ou bitrate) do vídeo para 500 kbit/s. Como o transcode exporta áudio em MP3 a 128 kbit/s por padrão, precisamos apenas ajustar a taxa de bits da faixa de som para 48 kbit/s usando a opção -b. Finalmente, a opção -V diz ao transcode que use o espaço de cor YUV e não RGB. Isso acelera os cálculos internos em quase 30%. Porém, há alguns filtros que só funcionam no espaço de cor RGB. Se esse for o caso, o transcode emitirá uma mensagem de erro se você tentar estipular a opção -V.Adivinhando a taxa de bitsA taxa de bits do vídeo é o fator que decide a qualidade do produto final. Você precisa de diversos parâmetros, como a altura e a largura (em pixels) do quadro e o número de quadros por segundo para calcular o valor BPP (Bits Por Pixel). A fórmula é: Taxa de Bits x 1000 / (Altura x Largura x Quadros por segundo).Obviamente, a qualidade de um vídeo depende em grande parte da qualidade do material original (cenas rápidas/lentas, muito/pouco contraste etc.); mas você pode adotar como regra que um valor de BPP de cerca de 0,20 oferecerá uma qualidade aceitável e evitará a artificialidade.


Valores abaixo de 0,15 afetarão a qualidade da imagem visivelmente. O transcode, na verdade, ajusta o valor de BPP segundo as configurações que você selecionar (na linha V: bits/pixel). Se o valor for muito baixo, é melhor sair do transcode pressionando [Ctrl]+[C] e tentar novamente com um valor mais alto.Melhor prevenir do que remediarO transcode suporta a conversão em múltiplos passos para codecs MPEG4. Para conseguir uma melhor distribuição da taxa de bits ao longo de um vídeo, o programa primeiro analisa o material e cria um arquivo de log. O segundo passo analisa o arquivo de log e faz o trabalho de conversão. Você pode habilitar os passos múltiplos especificando a opção -R; é preciso especificar se esse é o primeiro ou o segundo passo. A listagem 1 traz um exemplo.

Uma vez que o primeiro passo só fará a análise do vídeo, a opção -y xvid4,null desabilita a função de exportação de áudio. Isso acelera o processo em mais de dez por cento.Análise versus tentativa e erro como a conversão adequada de vídeos depende de material-fonte de alta qualidade, o transcode oferece uma coleção de ferramentas para análise de arquivos de vídeo e exibição de suas características técnicas críticas. O comando tcprobe dá uma rápida visão geral (veja o exemplo no quadro “Resultados do tcprobe”).De acordo com o tcprobe, o arquivo fonte tem uma resolução de 320x240 pixels e uma taxa de quadros de 29.97 (comum a sistemas NTSC) quadros por segundo. Além disso, o arquivo tem uma faixa de áudio mono de 44.1 khz com uma taxa de amostragem de 16-bit (como indicado por -e 44100,16,1 – um arquivo estéreo mostraria
um 2 como último dígito). A faixa de áudio é codificada em MP2 – infelizmente isso não é óbvio; é preciso analisar o parâmetro -n (nesse caso -n 0x50) para descobri-lo. 0x55 significa codificação MP3 e 0x2000 significa áudio em AC3. A taxa de bits do áudio está configurada para 48 kbit/s. Como o transcode usa a codificação de 128 kbit/s por padrão, é boa política diminuir manualmente essa taxa para 48 kbit/s, uma vez que um valor mais alto não aumentará a qualidade de saída, mas certamente aumenta o tamanho do arquivo.Os valores entre colchetes nas informações mostradas pelo tcprobe indica as configurações padrão do transcode. O programa usará esses valores se você lhe passar dados brutos com valores de formatação que ele não reconheça.Pequeno, mas poderosoA capacidade de redimensionar imagens é outro recurso muito útil – ele permite criar um preview de um arquivo muito grande disponível para download. O transcode oferece para isso diversas funções; a mais simples usa a opção -Z e pede os valores de largura e altura. O comando a seguir reduz o tamanho da imagem à metade, para 160x120 pixels, sem usar o método de múltiplos passos:

O parâmetro fast manda o transcode usar um algoritmo interno de redimensionamento que pode afetar levemente a qualidade da imagem e que tem algumas restrições. Por exemplo, a largura e a altura da imagem têm de ser divisíveis por 8. Se não forem, o programa voltará ao método padrão. A opção -w 125 também é importante; ela reduz a taxa de bits do vídeo. Como o exemplo reduz a a largura e a altura, a imagem só ocupará um quarto do tamanho original; isso equivale a um quarto da taxa de bits.Advertência: Gravação da TVUsuários com gravadores de vídeo digitais – as chamados DVRs, ou Digital Video Recorders – rodando no Linux podem querer armazenar as gravações feitas a partir da TV em um formato de alta compressão como XviD ou MPEG4. O transcode também pode ajudar nisso; porém, precisa de uma ajudazinha do VDRsync [2]. Embora o transcode consiga lidar com um arquivo DVR diretamente, problemas com sincronização de áudio e vídeo são bastante comuns; o Vdrsync pode resolver esses problemas antes mesmo de você começar. O seguinte comando cria dois arquivos a partir de uma gravação DVR para permitir o armazenamento separado das faixas de áudio e de vídeo:

O nome do arquivo de saída pode variar. Neste exemplo, o script criou um arquivo de vídeo chamado e4.mpv e um arquivo de áudio chamado c0.mpa. Agora o transcode pode manipular a ambos.

 

Visão limitada. Se o material do filme estiver em formato Letterbox, você vai notar barras pretas no alto e embaixo da tela. Como a barra preta é um desperdício de espaço, provavelmente

você vai preferir que o transcode a elimine. Esse é um processo em duas etapas: primeiramente, o transcode precisa analisar o tamanho das barras e descobrir suas posições exatas. Para fazê-lo, ele usa o filtro detectclipping. A listagem 2 traz um exemplo.O que o transcode faz aqui, na verdade, é inspecionar cada quadro individualmente e mostrar os resultados na linha de comando. Quando o resultado parar de mudar, o transcode terá encontrado as

configurações corretas. Em nosso exemplo, o parâmetro -j 58,10,56,6 manda o programa remover 58 linhas do topo, 10 à esquerda, as últimas 56 e as 6 linhas à direita da imagem.Infelizmente, você não pode usar esses valores assim como estão, pois o tamanho final da imagem não seria divisível por 16 (exigência da maioria dos codificadores, e o XviD não é exceção). Algumas contas simples ajudarão. Para ficar mais simples ainda, vamos apenas ignorar os poucos pixels à direita e à esquerda e nos concentrar em cima e embaixo. Se removermos 56 linhas em vez de 58, estaremos
removendo um total de 112 linhas. 576 linhas num quadro PAL, menos 112, dá 464, que é divisível por 16: dá certinho.


Resta-nos portanto -j 56,0,56,0; podemos encurtar isso para: -j 56. O programa, por padrão, corta a imagem simetricamente.EntrelaçamentoEntrelaçamento é uma palavra comum em tecnologia de vídeo. Quando o vídeo está entrelaçado, as linhas pares e ímpares da imagem são exibidas alternadamente: em um quadro só as pares, no outro só as ímpares – o que é bem normal nas TVs. Quando você exibe uma imagem num monitor de PC, os resultados são ruins porque os objetos em movimento tendem
a criar “fantasmas” ou o chamado “efeito pente”. Para rebater esse problema, a maioria dos reprodutores ou conversores de vídeo usa uma função de desentrelaçamento.

O transcode usa o filtro 32detect (ver listagem 3) para detectar se o vídeo inclui quadros entrelaçados.O transcode mostra uma linha para cada quadro. Se houver quadros com interlaced = yes, é bom usar o filtro de desentrelaçamento. O lado ruim é que a codificação leva muito mais tempo neste caso. O transcode tem um filtro smartyuv, a versão com velocidade otimizada do filtro smart deinterlacer do VirtualDub para o espaço de cor YUV. O VirtualDub é um popular programa do Windows® que faz algo similar ao transcode. O filtro tem uma porção de opções que você pode explorar, mas os ajustes padrão funcionam bem na maioria dos casos.Mastigando númerosPara poupar ainda mais espaço, queremos não apenas remover as barras pretas


como também diminuir o tamanho da imagem. Vídeo no padrão PAL tem uma resolução original de 720x576 pixels, mas o tamanho da imagem é distorcido de modo amorfo quando ela é exibida numa tela de PC, já que a proporção é de 5:4, e não de 4:3 (usada nos monitores). A maior parte dos media players corrigirá isso automaticamente, mas o objetivo é produzir um arquivo AVI com a proporção amigável ao PC (e às TVs analógicas que representam a esmagadora maioria dos aparelhos no Brasil) de 4:3. A distorção é ainda maior com vídeo no formato 16:9. Claro que se podem aplicar os cálculos para 16:9 tão facilmente quanto para 5:4. As figuras 1 a 4 trazem um passo-a-passo.

A primeira coisa que precisamos fazer é corrigir a proporção. Precisamos expandir a imagem lateralmente por um fator de (4/3)/(5/4) ou (1.33/1.25= 1.06). A imagem cresce em 6% e agora tem 768 pixels de largura. O próximo passo é mandar o transcode remover as barras negras no topo e na parte debaixo da tela, que ocupam 56 pixels cada; o resultado é uma imagem com a altura de 464 pixels. Mandamos então o transcode reduzir a imagem de 768x464 pixels para uma largura de 640 pixels; é um fator de 1.2. A imagem resultante tem 640x386 pixels e, por isso, precisamos reduzir a altura para 384, o valor mais próximo divisível por 16. O fator de distorção introduzido é invisível para o olho humano. Algumas contas simples apontam o seguinte comando para converter uma gravação original de um DVR para um pequeno vídeo no formato XviD:

A opção -p adiciona a trilha de áudio (as trilhas de áudio e vídeo estão armazenados
em arquivos distintos) ao arquivo. A taxa de bits do vídeo é de 1650 bits por segundo, que combinada com a resolução selecionada dá um valor BPP de 0,267, o que é uma qualidade alta o suficiente para nossos fins.Flexível e poderosoEste artigo apenas roça a superfície do grande conjunto de recursos oferecidos pelo transcode. O programa vem também com uma coleção de práticas ferramentas de linha de comando, apresentadas na tabela 5. Consulte as listas de discussão do transcode [3]; elas são uma útil fonte de informações sobre o programa.