O seu site de Tecnologia
Digital aplicada à Música. Aqui
você encontra informações
técnicas relativas
à construção de
seqüências MIDI,
gravações de áudio, loops,
compactação de arquivos, manuais traduzidos para
o
português de softwares musicais consagrados, download de
softwares, plug-ins e utilitários para quem utiliza a
informática como ferramenta musical, além das
notícias mais atuais do que está acontecendo no
mundo da
música digital.
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:
Input/Decoding
(Entrada/Decodificação)
Modification/Filtering
(Modificação/Filtragem)
Output/Encoding
(Saída/Codificação)
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.
Assista
a
nossa Revista Eletrônica. A cada dia um novo artigo
é publicado
Assista
os previews de nossos cursos em vídeo. A grande maioria
deles
é constituída de capítulos
completos