Este documento tem por finalidade ser um guia completo para criação de filmes com vídeo em MPEG-4 e audio em OGG Vorvis, explorando os parâmetros dos codificadores, para assim obter filmes da mais alta qualidade. Isso envolve um pouco de matemática e principalmente paciência. Este documento aborda a questão de uma maneira mais técnica. Se você procura uma maneira simples de codificar filmes, este documento não foi feito para você, procure então nas referências por dvd::rip:.
Será utilizado como exemplo, a codificação de um filme gravado em um DVD para que caiba em um único CD, abordando assim, as diversas etapas para a codificação do audio e do vídeo.
Apesar deste artigo estar focado para Linux, muitos dos conceitos aqui apresentados se aplicam a outros sistemas também. Portanto, não importa se você pretende codificar filmes no Windows, as ferramentas mudam, os conceitos e passos continuam os mesmos.
A última versão deste documento pode ser encontrada em: (http://orbita.starmedia.com/~neofpo/)
Histórico de versões:
Este documento é distribuido com o intúito de ser útil as pessoas. Permissão para reprodução e cópias é garantida para fins apenas não comerciais, com a única e exclusiva exigência de que o autor e a fonte sejam mencionados. Para quaisquer outra forma de utilização, por favor entre em contato com o autor.
Conheça as tecnologias de compressão de audio e vídeo que iremos utilizar.
Dentre os diversos codecs de vídeo existentes, o que possibilita uma das melhores compresões, é o MPEG-4. O formato foi desenvolvido a partir do Microsoft MPEG-4 (DivX 3) e possui uma capacidade de compressão muito superior ao original.
Há uma confusão comum com o nome MPEG-4. Esse nome se refere a um padrão de tecnologia de compressão de vídeo, o que significa que existem diversos softwares que a utilizam. Alguns exemplos são DivX (www.divx.com), XviD (www.xvid.org), FFmpeg (ffmpeg.sf.net). Portanto, quando usualmente se fala em um filme "DivX", estamos na verdade se referindo a um filme em MPEG-4, que pode ou não ter sido codificado usando DivX.
Em testes comparativos, o FFmpeg se mostra mais rápido e atinge melhores resultados que o DivX e Xvid. Usaremos neste documento portanto, o FFmpeg.
O MP3 é tido como o padrão atual para compressão de áudio e distribuição de músicas pela internet. Porém já existem tecnologias melhores. Em www.xiph.org, você encontra o OGG Vorbis, que tem uma capacidade de compressão muito superior ao MP3.
A taxas de bit iguais, o Vorbis consegue atingir uma melhor qualidade que o MP3, principalmente com taxas de bit baixas. Um MP3 a 64kbps e 44.1kHz parece estar a amostrado a 22.05kHz, o formato tende a filtrar as altas frequências e prodizir aberrações cromáticas, quando se diminui demais a taxa de bits. Por outro lado, o OGG Vorbis a baixas taxas de bit não serve de filtro para altas frequências, e consegue excelentes resultados, que não soam ruim ao ouvido humano. Podemos conseguir um audio de boa qualidade, em estéreo, usando Vorbis a apenas 64kbps.
O trivial é usar o formato AVI (Audio-Vídeo Interleaved) para armazenar o filme. AVI é um formato antigo e muito popular. No lugar dele, vamos optar por utilizar o OGG (ou OGM - OGG Media Stream), desenvolvido por www.xiph.org. Esse formato permite o armazenamento de diversas trilhas de audio/vídeo e até legenda, tudo em um único arquivo. O formato ainda não é muito popular, mas players mais modernos, incluindo alguns de Windows (VPlayer - www.vplayer.albion.top.pl e RadLight - www.radlight.net, aceitam o formato e decodificam o audio em OGG Vorbis. O famoso Windows Media Player também é capaz de reproduzir arquivos OGM, com a instalação de novos codecs. Os melhores player para Linux aceitam o formato normalmente.
Pode-se também utilizr o formato Matroska, que é o novo padrão para filmes, muito mais poderoso que o OGG, porém mais recente e não tão popular.
Segue uma lista das ferramentas que iremos utilizar. Não aparecerão detalhes sobre como instalar ou configurar, cabe ao leitor procurar saber como proceder. Procure na sua distribuição, as mais modernas já vem com pacotes da maioria destes programas. Para quem usa Debian, algumas das ferramentas estão disponíveis em marillat.free.fr.
Esta é a nossa principal ferramenta e pode ser encontrada em www.mplayerhq.hu. O MPlayer é um player versátil, capaz de reproduzir filmes em diversos formatos e suporta todos os codecs modernos, possui diversos drivers de saída de vídeo, e audio, incluindo drivers específicos para certas placas de vídeo, o que possibilita que se aproveite ao máximo o potencial da sua máquina. Junto com o MPlayer vem o MEncoder, que a partir de qualquer filme que seja legível pelo MPlayer, pode recodificá-lo usando inúmeros codecs, incluindo MPEG-4 e MP3.
E não se esqueça: leia a documentação! O MPlayer possui uma documentação muito completa em sua árvore de fontes (DOCS/documentation.html
).
Em www.xiph.org o pacote vorbis-tools pode ser encontrado. Ele contém ferramentas que permitem a compressão do audio no formato OGG Vorbis. Usualmente, as distribuições costumam vir com este pacote. Mas atenção: pegue a versão 1.0 final no mínimo. Se você tem uma versão anterior, atualize. As antigas irão funcionar, porém não contém inúmeras melhorias no algoritmo de compressão, e não irão comprimir com qualidade tão boa quanto a 1.0.
Pegue este pacote de ferramentas em www.bunkus.org/videotools/ogmtools/. Com ele será possível unir o audio em OGG Vorbis e o vídeo no formato MPEG-4 em um arquivo no formato OGG (OGM).
O transcode (www.theorie.physik.uni-goettingen.de/~ostreich/transcode/) é uma compilação de ferramentas multimídia, para diversas aplicações e formatos. No nosso caso, algumas das suas ferramentas serão usadas para extrair as legendas do DVD.
Como o nome sugere, podemos extrair as legendas de um DVD com ele: subtitleripper.sourceforge.net. Iremos precisar do script pgm2txt
. Procure por ele no pacote com as fontes do programa. O pacote para Debian o disponibiliza em /usr/share/doc/subtitleripper/examples/pgm2txt.gz
.
Programa para reconhecimento de caracteres; uso em conjunto com os dois últimos acima para extrair as legendas: jocr.sf.net. Pegue uma versão recente do GOCR, algumas das funções que serão utilizadas aparecem apenas em versões mais recentes (>=0.3.7).
Codificar um DVD para caber em um único CD é uma tarefa que exige diversos passos e um pouco de paciência. O método é o seguinte:
No nosso exemplo, codificaremos o título 1 de um DVD. Não esqueça de selecionar a trilha de audio correta. Liste as trilhas disponíveis com:
$ mplayer dvd://1 -frames 0 -vc none -v 2>/dev/null | \ grep -e \\[open\\]Você deverá encontrar algo como:
[open] audio stream: 0 audio format: ac3 (5.1) language: en aid: 128 [open] audio stream: 1 audio format: ac3 (stereo) language: en aid: 129 [open] number of audio channels on disk: 2. [open] subtitle ( sid ): 0 language: en [open] subtitle ( sid ): 1 language: es [open] subtitle ( sid ): 2 language: pt [open] number of subtitles on disk: 3Para selecionar o inglês, use
-aid 128
ou -alang en
.
Iremos agora usar o MPlayer para decodificar o audio do DVD, e enviá-lo em formato descomprimido através de um FIFO para o oggenc codificá-lo em OGG Vorbis. Então:
$ mkfifo fifo $ mplayer dvd://1 -aid 128 -ao pcm -aofile fifo -vc dummy -vo nullAgora, em outro terminal, rode no mesmo diretório:
$ oggenc -q -1 --resample 44100 -o audio.ogg fifoA opção
-q
seleciona a qualidade do audio (-1<=q<=10). Usamos aqui -1, que para filmes, com diálogos na maior parte do tempo, está muito bom. Para músicas, é comum usar 3 ou 4. Pense que quanto melhor a qualidade do audio, pior será a qualidade do vídeo.
Se preferir você pode especificar a taxa de bits alvo com -b 64
por exemplo, no lugar de -q
. Porém, é mais interessante manter uma qualidade constante com -q
do que uma taxa de bits constante com -b
.
O --resample
é recomendado, pois os DVDs costumam vir com a taxa de amostragem 48kHz, o que armazena frequências acima do que a maioria das pessoas pode escutar, por isso 44100Hz é recomendado, armazenado assim frequências de no máximo 22050Hz.
Após alguns minutos, teremos o arquivo audio.ogg
contendo a trilha de audio do título 1 do DVD. Vejamos agora o comprimento do filme com:
$ ogginfo audio.oggEncontre uma linha contendo o comprimento:
Playback length: 121m:19sAnote o comprimento do filme (
Playback Length
), converta para segundos e guarde o valor. No caso: 1279 segundos. Anote também o tamanho do arquivo audio.ogg
. No exemplo: 47463888 bytes. Esses dados serão usados no cálculo da taxa de bits do vídeo.
Você pode ouvir o que acabou de codificar com:
$ ogg123 audio.ogg.
A codificação do vídeo exige um cuidado especial. Inúmeros parâmetros tem de ser configurados para garantir uma boa qualidade.
Temos que:
Já temos o audio pronto, podemos calcular então a taxa de bits do vídeo com a seguinte formula:
[ ( tam_cd * 1024 * 1024 ) - tam_audio ] * 8 vbitrate = -------------------------------------------- comp_filme * 1000 * 1.0115Onde:
Variável | Significado |
---|---|
vbitrate |
taxa de bits do vídeo em Kilo Bits por segundo |
tam_cd |
tamanho do CD em Mega Bytes |
tam_audio |
tamanho do arquivo audio.ogg em Bytes |
comp_filme |
comprimento do filme em segundos |
O valor 1.0115
é um parâmetro de correção, usado para descontar o espaço usado pelo encapsulamento das trilhas de audio e vídeo pelo formato OGG. No exemplo, para um CD de 700M chegamos a 746 kbit/s.
Em geral, redimensionar o tamanho do vídeo é uma boa idéia. Se codificarmos o vídeo com o tamanho nativo do DVD, iremos ter 3 problemas:
1.78
, em geral tem o vídeo de tamanho 720x480
, mas ele guarda a informação do aspecto correto, o que obriga o seu redimensionamento para 854x480
no momento da reprodução. Essa informação do aspecto correto pode ser armazenada em umm trilha de vídeo em MPEG-4, mas apenas alguns poucos reprodutores irão utilizar este parâmetro.
Vamos descobrir o tamanho e o aspecto real do filme com:
$ mplayer dvd://1 -frames 0 -identify 2> /dev/null | grep "\<ID_VIDEO"Esse comando, se nao houver erros, deverá mostrar os dados sobre a trilha de vídeo:
ID_FILENAME=dvd://1 ID_VIDEO_FORMAT=0x10000002 ID_VIDEO_BITRATE=9800000 ID_VIDEO_WIDTH=720 ID_VIDEO_HEIGHT=480 ID_VIDEO_FPS=29,970 ID_VIDEO_ASPECT=1,7778Note que o tamanho do vídeo é
720/480=1.5
, que é diferente do aspecto correto, 1.7778
. Para corrigir isso, o filme deve ser expandido para (1.7778/1.5*720)/480
, ou seja, 854/480
. Isso significa que, após recortarmos as tarjas pretas, o tamanho do filme deve ser corrigido dessa maneira.
O MPlayer, possui um filtro que detecta automaticamente a região a ser recortada. Rode:
$ mplayer dvd://1 -vf cropdetectObserve no console, você deverá encontrar linhas como esta:
crop area: X: 0..719 Y: 60..414 (-vf crop=720:354:0:60)% 3,4% 0 0 0%Procure avançar até um momento do filme no qual a imagem esteja bem clara, para que a detecção funcione melhor. Os parâmetros entre parênteses, identificam a região a ser recortada. Teste a seleção com:
$ mplayer dvd://1 -vf crop=720:354:0:60Você deverá estar agora assistindo o vídeo sem as tarjas pretas.
Note que essa área delimitada com o filme (720/354
) ainda é a área antes da correção para o aspecto correto. O tamnaho correto seria: (1.7778/1.5*720)/354 = 854/354
. Então, o aspecto real do filme é 854/354
, ou aproximadamente 2.35/1
. Esse aspecto que deverá ser levado em conta na ora de diminuir o tamanho do filme, e não o 1.7778
.
Agora com o valor correto do aspecto do filme, podemos redimensionar o filme, e escolher um bom tamanho. É difícil encontrar um bom tamanho. Muito pequeno, irá acabar disperdiçando bits, e o arquivo final ficará menor que o desejado, e muito grande (como o tamanho original) irá com certeza diminuir demasiadamente a qualidade, deixando apenas blocos visíveis.
Para ajudar nesta decisão, podemos avaliar a qualidade do vídeo através da taxa de bits por pixel. A seguinte fórmula dá este valor:
vbitrate * 1000 bpp = ---------------------- largura * altura * qpsOnde:
Variável | Significado |
---|---|
bpp | bits por pixel |
vbitrate | taxa de bits do vídeo |
largura | largura final do filme |
altura | altura final do filme |
qps | quadros por segundo final |
Esse número, indica o quanto de informação que será destinada, medianamente, para cada pixel do filme. Logicamente, quanto maior, melhor a qualidade. Em geral, o seguinte vale:
bpp | Recomendação |
---|---|
< 0.10 | não use! você vai ver apenas os blocos... |
< 0.15 | vai ficar ruim |
< 0.20 | os blocos poderão ser notados, mas vai ficar bom |
< 0.25 | vai ficar muito bom! |
> 0.25 | não vai melhorar muito visualmente |
> 0.30 | não use, tente uma resolução maior ou aumente o qps |
Note que esses valores não são regra. Isso depende muito de cada filme. Filmes com muita riquesa de detalhes e com cenas com muito movimento, poderão necessitar de um bpp de 0.30 para ficar bom, enquanto um filme com pouca riquesa de detalhes e pouco movimento pode precisar de apenas 0.20. Use esses valores como base para uma primeira codificação, se o resultado não for bom, tente aumentar o bpp para melhorar a qualidade. No próximo tópico, você encontra uma análise mais matemática e precisa de como escolher um bom tamanho para redimensionar.
Podemos aumentar o bpp fazendo:
30000/1001=29.97qps
. No nosso caso, usar um qps de 24000/1001=23.98qps
é muito recomendado. Isso melhorará em 25% o bpp, a uma diminuição no qps pouco perceptível. A perda de qualidade devido a diminuição do qps depende muito de como o DVD foi feito. DVDs que são na verdade filmes VHS NTSC em convertidos para formato digital, são originalmente 24000/1001=23.976qps
e ao convertê-lo para o DVD, são adicionados quadros duplicados para atingir os 29.97qps
. Num caso como este, não há perda de qualidade ao se diminuir o qps, mas se o filme tiver sido produzido a 29.97qps
, você estará jogando informação fora. Essa é uma questão de tentativa e erro. Não há como dizer previamente se irá ficar um bom ou mau resultado sem testar. Há casos em que filmes originalmente a 29.97qps
convertidos para 23.976qps
ficam aceitáveis e há casos que ficam muito ruins de se assistir (a imagem parece estar "quadro a quadro"). As vezes o ganho na qualidade da imagem compensa a perda no qps. Está a seu cargo decidir.
Diminua a área do filme, de maneira a ajustar o bpp de acordo com o seu gosto. O programa seguinte escrito em C o ajudará a fazer escolher o tamanho. Compile ele com:
$ gcc programa.c -o programa -lmInício do programa:
#include <stdio.h> #include <math.h> double aprox(double valor) { if(valor-((double)(int)valor)>0.4) return(((double)(int)valor)+1.0); else return ((double)(int)valor); } int main () { double vbitrate, qps, largura, altura, bpp, largura_f, altura_f; printf("Entre a taxa de bits do vídeo (kbit/s): "); scanf("%lf", &vbitrate); printf("Entre o número de quadros por segundo: "); scanf("%lf", &qps); printf("Entre o aspecto do filme (largura:altura): "); scanf("%lf:%lf", &largura, &altura); printf("\nTamanhos recomendados:\nbpp\tlargura\taltura\n"); for(largura_f=160; bpp >= 0.3; largura_f=largura_f+16) { bpp=(vbitrate*1000)/(largura_f*(largura_f/(largura/altura))*qps); } do { printf("%.3lf\t%.0lf\t%.0lf\n",bpp, largura_f, largura_f/(largura/altura)); largura_f=largura_f+16; bpp=(vbitrate*1000)/(largura_f*(largura_f/(largura/altura))*qps); } while(bpp >= 0.1); }Fim do programa.
No exemplo, obtemos:
Entre a taxa de bits do vídeo (kbit/s): 746 Entre o número de quadros por segundo: 23.976 Entre o aspecto do filme (largura:altura): 854:354 Tamanhos recomendados: bpp largura altura 2.423 176 73 2.036 192 80 1.735 208 86 1.496 224 93 1.303 240 99 1.145 256 106 1.015 272 113 0.905 288 119 0.812 304 126 0.733 320 133 0.665 336 139 0.606 352 146 0.554 368 153 0.509 384 159 0.469 400 166 0.434 416 172 0.402 432 179 0.374 448 186 0.349 464 192 0.326 480 199 0.305 496 206 0.286 512 212 0.269 528 219 0.254 544 225 0.239 560 232 0.226 576 239 0.214 592 245 0.203 608 252 0.193 624 259 0.183 640 265 0.174 656 272 0.166 672 279 0.159 688 285 0.151 704 292 0.145 720 298 0.139 736 305 0.133 752 312 0.127 768 318 0.122 784 325 0.117 800 332 0.113 816 338 0.108 832 345 0.104 848 352 0.101 864 358Portanto uma boa resolução é
528/219
.
Seria interessante saber o quanto o codec necessita de bits por pixel para um quantizador definido (ver glossário), antes de codificarmos o filme. Dessa maneira, poderíamos escolher um quantizador alvo, 4 por exemplo, e diminuir o tamanho do filme tal que o quantizador médio após a codificação fique próximo do valor programado, não correndo o risco de escolher um tamanho grande demais, e qualidade fique no quantizador 7 por exemplo, e nem pequeno demais com quantizador 2.
Fazendo uma análise estatística do quantizador, podemos chegar a uma relação matemática do tipo:
bpp(area)para um quantizador constante.
Esta relação nos dará os bits por pixel requeridos para uma determinada área do filme, para um quantizador alvo. Observe o gráfico abaixo:
O gráfico foi obtido a partir de diversas codificações de um mesmo vídeo, a quantizadores fixos. Para cada quantizador, o filme foi codificado em diversas resoluções (áreas), e calculado o respectivo bits por pixel. O vídeo usado foi um capítulo de um filme de ação, rico em detalhes e muito movimento. Filmes com menos detalhes e movimentos, certamente necessitam de menos bits.Cada curva do gráfico, representa a relação de necessidade de bits por pixel para um quantizador fixo, partindo de 2 na curva mais acima até 11 na curva mais abaixo. Note que, para um mesmo quantizador, conforme a área do vídeo cresce, a necessidade de bits por pixel decai. Podemos aproximar essa curva por:
bpp=B*area^MOnde
B
e M
são parâmetros específicos para cada quantizador:
quantizador | B | M |
---|---|---|
2 | 27.5122 | -0.294557 |
3 | 23.9859 | -0.325085 |
4 | 21.7040 | -0.341064 |
5 | 17.0644 | -0.345729 |
6 | 14.4820 | -0.347710 |
7 | 10.8990 | -0.341110 |
8 | 8.87612 | -0.335452 |
9 | 6.50144 | -0.322110 |
10 | 5.20340 | -0.312703 |
11 | 3.87393 | -0.298032 |
Então, partindo de:
vbitrate * 1000 bpp = --------------- area * qps bpp=B*area^Mjuntamos, obtendo a relação:
vbitrate * 1000 --------------- = B*area^M area * qpse finalmente:
area=(vbitrate * 1000 / (qps*B))^(1/(M+1))Que nos dá uma área ideal para redimensionarmos, dados quadros por segundo e taxa de bits do vídeo constantes, para um determinado quantizador alvo.
No nosso exemplo, vamos definir como quantizador alvo 4, que será suficiente para garantir uma excelente qualidade de imagem:
area=(746*1000/(23.976*21.7040))^(1/(-0.341064+1)) area=61685Como o aspecto do filme é
854/354
, podemos achar as dimensões ideais:
aspecto = largura / altura largura = aspecto * altura area = largura * altura area = aspecto * altura^2 altura = (area/aspecto)^0.5No nosso exemplo:
altura = (61685/(854/354))^0.5 altura=160E para a largura:
largura = aspecto * alturaNo exemplo:
largura = (854/354) * 160 largura=386Finalmente chegamos a conclusão de que um bom tamanho para se redimensionar é
386:160
. Isso garantirá que o quantizador médio fique próximo de 4. Note que este tamanho é muito pequeno. Isso fará o filme ter uma alta qualidade, porém, em uma visualização em tela cheia, ficará embassado. Às vezes é preferível que o filme perca um pouco a qualidade, e ganhe definição, para uma visualização em tela cheia. Isso depende do gosto e experiência de quem está fazendo a codificação.
Fazendo as contas com quantizador 5, chegamos a 482:200
, que é um valor mais razoável. Como boa parte do algorítmo de compressão trabalha com partes de 8 pixels, é interessante arredondar o valor para da largura para um múltiplo de 8: 480:199
. Podemos arredontar o valor da altura para um múltiplo de 8 também: 480:200
. Haverá um erro pequeno no aspecto, mas será imperceptível.
O valor estimado usando apenas os bits por pixel foi de 528:219
, 20% maior em área, que é muito próximo do valor para quantizador 6, 556:231
.
Note mais uma vez que os parâmetros B
e M
da fórmula acima, foram encontrados para um filme em específico, um filme com bastante movimento e cores. Use esses valores como base apenas. Eles não são regra, e podem variar consideravelmente de filme para filme. De maneira geral, tente usar o método acima, com quantizador alvo 4, 5, ou 6. Valores de quantizadores maiores não irão dar bons resultados provavelmente; valores menores irão resultar em filmes demaseadamente pequenos.
Então, temos que no momento da codificação, deveremos usar:
-vf crop=720:354:0:60,scale=528:219 -ofps 24000/1001Isso irá recortar as tarjas pretas, redimensionar para um tamanho menor e diminuirá o qps para um valor razoável.
Caso queira adicionar legendas diretamente sobre o filme, passe a opção -sid
ou -slang
para o MEncoder.
$ mplayer dvd://1 -frames 0 -vc none -v 2>/dev/null | \ grep -e \\[open\\] [open] audio stream: 0 audio format: ac3 (5.1) language: en aid: 128 [open] audio stream: 1 audio format: ac3 (stereo) language: en aid: 129 [open] number of audio channels on disk: 2. [open] subtitle ( sid ): 0 language: en [open] subtitle ( sid ): 1 language: es [open] subtitle ( sid ): 2 language: pt [open] number of subtitles on disk: 3No exemplo iremos utilizar legendas em portugês, então
-sid 2
ou -slang pt
.
Com todos os dados que temos, podemos agora codificar o vídeo (não esqueça de substituir os parâmetros pelos que você encontrar):
$ rm divx2pass.log $ mencoder dvd://1 \ -nosound \ -sid 2 \ -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=1:v4mv:vpass=1:vbitrate=746 \ -ofps 24000/1001 \ -vf pp=hb/vb/dr/ci,crop=720:354:0:60,scale=528:219,denoise3d \ -o /dev/null && \ mencoder dvd://1 \ -nosound \ -sid 2 \ -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=1:v4mv:vpass=2:vbitrate=746 \ -ofps 24000/1001 \ -vf pp=hb/vb/dr/ci,crop=720:354:0:60,scale=528:219,denoise3d \ -o video.aviEssa é a etapa mais demorada. Após algumas horas, o vídeo estará pronto em
video.avi
. Note que o MEncoder é chamado duas vezes, mudando apenas o parâmetro vpass=1/2
. Desse modo, na primeira vez, é criado um arquivo de log descrevendo como é o filme ao longo do tempo, aonde precisa de maior taxa de bits, aonde precisa de menos. Na segunda vez, o filme é codificado levando esses dados em conta, gerando um arquivo de qualidade constante, e não taxa de bits constante. Se você estiver com pressa, pode-se suprimir o parâmetro vpass
, e chamar o mencoder apenas uma vez, e conseguir uma codificação mais rápida, ao custo de uma qualidade mais baixa.
Os outros parâmetros, são o seguinte:
Quando se faz a codificação em 2 etapas, o arquivo divx2pass.log
armazena inúmeras informações sobre o filme, dentre elas o quantizador médio por quadro (ver glossário). Estas informações podem ser analisadas e ajudar a decidir se o tamanho de filme escolhido está grande ou pequeno.
Para isso, faça o passo 1 da codificação, para obter o divx2pass.log
. Utilize o Shell Script seguinte para ver como foi a distribuição dos quantizadores:
Início:
!/bin/sh cat | cut -d: -f 5 | cut -d, -f1 | cut -d, -f1 | { read quant lines=0 sum=0 while [ -n "$quant" ] do total[$quant]=$[total[$quant]+1] sum=$[$sum+$quant] lines=$[$lines+1] echo -en "Linhas processadas: $lines\r" read quant done echo echo echo Quantizador médio: $[$sum/$lines] echo max=0 for (( i=1 ; i < 32 ; i=$[$i+1] )) do if [ -n "${total[$i]}" ] then if [ ${total[$i]} -gt $max ] then max=${total[$i]} fi fi done cols=$[`tput cols`-8] for (( i=1 ; i < 32 ; i=$[$i+1] )) do if [ -z "${total[$i]}" ] then total[$i]=0 fi echo -en "$i\t" for (( j=1 ; j <= $[${total[$i]}*$cols/$max] ; j=$[$j+1] )) do echo -n = done echo done }Fim.
No exemplo obtive:
$ countquant.sh < divx2pass.log Linhas processadas: 174530 Quantizador médio: 3 1 2 ============================================= 3 ====================================== 4 ========================= 5 ================ 6 ========= 7 ====== 8 ==== 9 == 10 == 11 = 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31No exemplo, vemos que o filme ficou com uma qualidade muito boa, já que o quantizador médio foi 3 e não temos uso de quantizadores maiores que 11. Podemos, se preferir, aumentar o tamanho do filme, e mesmo assim conseguir uma qualidade boa.
Dependendo do filme, a distribuição pode ser mais disforme, com um quantizador médio alto, o que significa que você escolheu um tamanho muito grande para o filme, e deveria diminuir o tamanho do filme para ganahr mais qualidade.
Caso o objetivo seja gerar um filme com qualidade constante, e não programado para ter um tamanho específico, pode-se codificá-lo em função do quantizador (ver glossário). Um exemplo de codificação com uso de quantizador, a qualidade constante seria:
$ mencoder dvd://1 \ -nosound \ -sid 2 \ -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=1:v4mv:vqscale=4:vbitrate=746 \ -ofps 24000/1001 \ -vf pp=hb/vb/dr/ci,crop=720:354:0:60,scale=528:219,denoise3d \ -o video.aviOnde o parâmetro
vqscale
indica o quantizador utilizado. Quantizador em 1, gerará um arquivo muito maior, e com pouca diferença de qualidade; 2, qualidade excelente, muito próximo do original; 3, muitos poucos blocos visíveis; 4, poucos blocos visíveis (recomendado na maioria dos casos); 5, alguns blocos visíveis; 6 e maiores, muitos blocos visíveis e baixa qualidade.
Seria interessante ter as separadas do filme, como no DVD. Extrair as legendas do DVD é complicado e nem sempre dá bons resultados. O problema é que as legendas do DVD são uma camada de imagem que fica por cima do filme, não é texto puro. Extrair as legendas para texto puro envolve ou digitação manual, ou uso de um software OCR. A solução seguinte, faz uso do GOCR. Ele apenas é eficiente se a separação entre as letras for boa, caso contrário, será um árduo trabalho de digitação nos lugares onde o GOCR não conseguir "ler". Como descrito na página do manual do ogmmerge, segue:
# mkdir /mnt/dvd # mount /dev/dvd /mnt/dvd $ tccat -i /mnt/dvd/ -T 1 -L | \ tcextract -x ps1 -t vob -a 0x22 | \ subtitle2pgm -P -o meufilmeA opção
-T
do tccat
diz para extrair a legenda do título 1 (veja mais informações em sua página do manual). O parâmetro 0x22
do tcextract
, é um número hexa-decimal que indica a legenda a ser usada. Seu valor é calculado adicionando-se o número que se passa ao -sid
do MEncoder a 0x20
. No nosso caso, sid=2, logo 0x20+2=0x22
.
$ pgm2txt meufilmeEste script irá automatizar o processo de OCR para você. Se quiser ver o que está sendo lido, use a opção -v. Por padrão o
xv
é chamado para mostrar as imagens, sugiro que se edite o script e mude a linha IMAGE_VIWER=xv
para IMAGE_VIWER=xli
.
Se o resultado não for satisfatório, utilize a opção -d
, com ela será criada uma nova base de dados exclusiva para o filme, e a cada letra nova, o GOCR irá pedir que você a digite. Na próxima ocorrência, ele já fará a leitura correta. Caso o GOCR leia mais de uma letra de cada vez, você deverá digitar o correto entre aspas.
$ ispell -d ibrazilian *txt
$ srttool -s -w -i meufilme.srtx -o legenda.srt
O audio e o vídeo podem agora ser unidos em um único arquivo, no formato de sua escolha.
Unindo o audio, vídeo e a legenda em um único arquivo OGG (OGM):
$ ogmmerge audio.ogg video.avi legenda.srt -o meufilme.ogmPronto! O arquivo
meufilme.ogm
contém o seu filme incluindo as legendas! Para assistir:
$ mplayer meufilme.ogm
Se preferir, pode dividir o filme em quantos CDs quiser. Para isso, basta que se calcule a taxa de bits do vídeo para atingir o máximo de espaço disponível na soma dos CDs e depois dividir o arquivo final em partes do tamnho de cada CD:
$ ogmsplit -o cd.ogm -s 700 filme.ogmOnde o
filme.ogm
, maior que 700M, será dividido em arquivos cd-000001.ogm
, cd-000002.ogm
, e assim por diante, cada um com 700M ou menos.
Se preferir, use o novo formato Matroska para armazenar o filme. Use o utilitário mkvmerge GUI que vem no pacote MKVToolNix
, disponível em www.matroska.org para unir audio, vídeo e legenda em um único arquivo. Consulte a documentação do programa se tiver dúvidas, o programa é auto explicativo.
Um excelente player, com suporte a inúmeros formatos de vídeo e audio, inclusive suporte a menu de DVD: xinehq.de.
Um pequeno programa de edição de vídeo para Linux, suporta diversos formatos e possui muitos filtros: fixounet.free.fr/avidemux/.
Ambiente completo para edição de audio e vídeo, muito poderoso: heroinewarrior.com.
Editor de vídeo não linear para Linux. Suporta captura de vídeo, e inúmeros formatos: www.schirmacher.de/arne/kino/.
Projeto que inclui um player, ferramentas para capturar vídeo e codificar AVI em diversos formatos: avifile.sf.net.
Visualizador de TV para Linux, com suporte a captura de vídeo: zapping.sf.net.
Programa gráfico simples de usar que usa o transcode dentre outras ferramentas, para copiar DVDs: www.exit1.org/dvdrip/.
DVD Player com suporte a menus: www.dtek.chalmers.se/groups/dvd/.
$ comando1 | comando2
, pode-se fazer com um fifo com $ comando1 > fifo
e $ comando2 < fifo
.