O sistema operacional Linux oferece melhor qualidade na gravação de TV que o Windows. Basta se estudar um pouco para dominar os segredos de ajustes por linha de comando dos programas de gravação.
No ambiente Windows, os melhores programas para se gravar TV são o VirtualDub e o VirtualVCR com os codecs FFdshow. Para se conseguir boa qualidade no vídeo gravado da TV é necessário se fazer o desentrelaçamento dos dois campos que formam a imagem de TV. São poucos os codecs que oferecem este recurso com boa qualidade. Nos programas baratos que acompanham as placas de TV, o desentrelaçamento é feito por interpolação das linhas dos dois campos. Isto provoca o “borramento” vertical das imagens, como se a câmera estivesse míope, fora de foco.
Os melhores filtros para desentrelaçamento corrigem as diferenças de campos de imagem apenas quando isto é necessário, em áreas que estão em movimento, como olhos e bocas das pessoas, ou objetos em movimentos horizontais. No FFdshow, uso o filtro Yet Another Deinterlacer ou ToMosComp, que me deram melhores resultados.
Quanto à compressão, uso mpeg4 com qualidade 90 no FFdshow, que grava com Variable Bit Rate (VBR). Isso gera imagens com média de 2200 kbps. No entanto, o VirtualDub provoca dessincronia entre vídeo e áudio, quando usa VBR. Para sincronia entre som e imagem, preciso usar Constant Bit Rate (CBR), o que gera imagens de pior qualidade e arquivos grandes. Já o VirtualVCR gera alguma dessincronia em VBR, mas não muito.
Em Linux, pesquisei bastante e fiz testes de gravação que resultaram em vídeos com qualidade e compressão bem melhores que em Windows.
Primeiro tentei o streamer, com uma linha de comandos bem simples:
streamer -t 2:00:00 -s 720x480 -r 29.97 -o tv.avi -f mjpeg -j 70 -F stereo
Este comando grava vídeo em formato mjpeg, que é bom para edição, pois grava sempre quadros inteiros e facilita a edição em qualquer ponto. No entanto, não desentrelaça e a compressão não é boa: o arquivo resultante fica em torno de 60 MB por minuto. Teria de ser pós-processado mais tarde.
Além disso, o streamer usa a arquitetura de som OSS, que está sendo abandonada no Linux em favor da arquitetura ALSA.
Depois, pesquisei o mencoder. Para facilitar o estudo do enorme manual do mencoder em formato “man page”, usei um comando para gerar PDF:
man -t `man -w mencoder` | ps2pdf - mencoder.pdf
A grande vantagem do mencoder é a enorme quantidade de filtros e codecs disponíveis. Através de testes, descobri que a seguinte linha de comandos gera os melhores resultados de vídeo gravado pela placa de TV. O arquivo resultante fica com boa qualidade visual, com sincronia entre áudio e vídeo e com 10 MB por minuto, em média.
mencoder \ tv:///2 \ -o ~/tv-$$.avi \ -oac mp3lame \ -lameopts cbr:preset=192 \ -ovc lavc \ -lavcopts vcodec=mpeg4\ :vbitrate=1500\ :autoaspect\ :keyint=120:sc_threshold=-50000:vb_strategy=2 \ −ffourcc divx \ -vf dsize=4/3 \ -vf-add kerndeint=10:0:0:1:1 \ -tv norm=PAL-M\ :driver=v4l2\ :alsa\ :adevice=hw.0,0\ :width=744\ :height=480\ :fps=29.97\ :outfmt=i420\ :brightness=10\ :contrast=-20\ :amode=1\ :buffersize=300
A explicação de cada parâmetro é a seguinte:
- tv:///2
- Escolhe a entrada S-Video (ID 2 no Video for Linux – v4l2).
- -o
- Arquivos de saída. Os dois $$ juntam o número do processo ao nome do arquivo, para gerar arquivos de nomes diferentes cada vez que o script roda.
- −ffourcc divx
- Força as quatro letras identificadoras do tipo de codec. Uso divx para compatibilidade com DVDs players que tocam AVI DivX.
- -oac
- Output audio codec mp3lame.
- -lameopt
- Opções do codec de áudio mp3 Lame: modo constant bit rate (para facilitar a edição, mais tarde), pré-configuração de qualidade de áudio a 192 kbps.
- -ovc
- Outuput video codec: biblioteca lavc.
- -lavcopts
- Opções lavc: codec mpeg4, variable bit rate de 1200 kbps, proporção automaticamente detectada. keyint=120 insere quadros inteiros (I-frames) a cada 120 quadros. sc_threshold=-50000 ajusta o sensor de mudança de cena para inserir quadros inteiros, o que facilita a edição futura na mudança de cena. vb_strategy=2 otimiza a colocação de B-frames.
- -vf dsize=4/3
- Video filter para proporção de TV normal ( 4:3). Repare que mais adiante eu seto a largura de captura para o máximo que o v4l2 permite para esta placa de captura, que é 744×480 (descobri com o programa v4l-info). Esta opção dsize não causa demora no processamento e permite que o vídeo seja apresentado em 640×480 em vez de 744×480. Ou seja: não é um vídeo “square pixel”. Faço isto para capturar na melhor resolução possível e apresentar na proporção correta de TV. Mas o padrão mpeg4 é a largura de 720 pixels.
- -vf-add
- Adiciona mais um filtro, no caso, desentrelaçamento kerneldeint com “afiamento” da imagem. Isto é importante para manter a qualidade do vídeo sem o “efeito pente” típico da tecnologia de entrelaçamento de campos do quadro de TV. Este filtro só corrige as linhas onde há efeito pente, deixando as outras linhas intactas e preservando a resolução vertical original da imagem.
- -tv
- Opções de captura. Norma PAL-M, driver v4l2 (Vídeo for Linux 2), som pela arquitetura ALSA, canal line in (hw:0,0), largura de 744 pixels (embora seja apresentado na proporção 4:3 ou 640×480), altura de 480 pixels, 29,97 quadros por segundo, formato de cor i420, ajustes de brilho e contraste adequados à minha placa de captura PixelView PlayTV Pro. Finalmente, 200 MB de buffer de vídeo, para a captura não perder frames.
Juntei estes comandos num arquivo shell e coloquei na barra do Gnome. Para iniciar a gravação, basta um clic no ícone do programa.
Estes comandos podem ser colocados no cron (agendador de tarefas do Linux) para programar gravações. O programa gnome-scheduler ajuda bastante a programar o cron. Neste caso, é bom colocar mais alguns parâmetros para limitar o tempo de gravação:
-endpos 02:10:00 \
E mais uma linha, depois desta enorme linha de comandos, para avisar sobre fim da gravação (Ubuntu), já que, como cron job, a gravação roda invisível:
notify-send -i /usr/share/icons/gnome-colors-common/scalable/apps/smplayer.svg "FIM DE GRAVAÇÃO" "Terminou a gravação do satélite"
Windows
Com o mencoder para Windows, depois de muitas tentativas, consegui fazer funcionar com a seguinte linha de comando:
mencoder tv:///1 ^ -tv driver=dshow^ :device=0:input=5^ :adevice=4:audioid=1^ :norm=PAL-M^ :fps=29.97^ :outfmt=rgb24^ :width=744:height=480^ :brightness=10:contrast=-20^ :buffersize=200 ^ -vf dsize=4/3 ^ -vf-add flip ^ -vf-add kerndeint=10:0:0:1:1 ^ -ovc lavc ^ -lavcopts vcodec=mpeg4:vbitrate=3000:autoaspect ^ -ffourcc XVID ^ -oac mp3lame ^ -lameopts fast:preset=medium ^ -o .\tv-svideo-record (%DATE%-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%).avi
Ao copiar os parâmetros acima, cuidado com os espaços. Eu adicionei “^” para poder quebrar as linhas.
Bonus track: o arquivo de vídeo é gravado com a data e hora adicionadas ao nome graças a truques do DOS.
O mencoder só gravou bem da placa de TV com codec lavc, sem dúvida uma biblioteca de excelente qualidade. O driver deve ser dshow, um driver experimental, e o espaço de cor, rgb24. A maior dificuldade, que resolvi por tentativa e erro, foi configurar os números dos dispositivos de áudio e vídeo. Os números variam de acordo com os dispositivos em cada PC e também num mesmo PC, quando se conecta e desconecta uma webcamera.
O vbitrate de 3000 dá uma ótima qualidade gerando 20MB de arquivo por minuto. Para 11MB por minuto, eu uso vbitrate=1400, resultando em qualidade razoável.
No entanto, o mencoder para Windows não sincroniza o som com o vídeo e é instável. Embora só ocupe 20% do processamento de um Intel Dual-Core de 2,5GHz, qualquer processo que interrompa a gravação provoca a perda sequencial de frames, arruinando a gravação dali por diante.
Conclusão
Depois de se aprender os ajustes necessários na captura de vídeo, fazer estas tarefas por linha de comando é bem mais fácil do que se usar programas proprietários com interface gráfica.
Olá José,
Segui seu tutorial e o mencoder chegou a gravar, porem só grava uma tela azul.
Estou utilizando o mencoder para gravar no canal a/v, pois na verdade quero gravar alguns filmes de familia que tenho em vhs.
No Mplayer ele mostra direitinho a transmissão, mas no momento que faço que faço a gravação fica tela azul no video.
Estou usando uma placa da iEi modelo ivc-200, segui alguns tutoriais para configurar esta placa corretamente, os parametros que estou utilizando são: card=102 tunner=-1.
Podiria me ajudar com está duvida?
Obrigado
Rafael
Olá, Rafael!
Como não conheço esta placa, não tenho como ajudá-lo. O jeito é você continuar a hackeá-la com parâmetroso diferentes. Tente mudar o padrão de cor (RGB, YUYV etc). Descubra com quais padrões ela trabalha com o comando “v4l-info”.
Oi José,
Segui o seu conselho e instalei o v4l, peguei as informações necessarias, porem ainda não consegui gravar, no mplayer ela mostra o canal direitinho, com este tutorial instalei a placa e os drivers estão corretos http://mstr.ueuo.com/bttv/instalar.php?id=bttv&c=102&i=a, eu consegui gravar no xawtv, porem gostaria de gravar no mencoder, o video está funcionando corretamente no mplayer e os videos que estou gravando não tem som mesmo, só preciso gravar imagens no canal 0 da placa, a placa usa tanto o RGB como o YUYV. Caso queira posso mandar os arquivos de configuração.
Meu email é rafael@cortex.com.br
Obrigado
Olá, Rafael!
Gravar no xawtv é uma excelente notícia! A placa está funcionando OK! Mas, realmente, gravar no mencoder é melhor. Agora, você só terá que estudar o manual do mencoder (man mencoder) e experimentar as diversas opções que ele tem.
Ola Mauro, o tutoria caiu como uma luva, tava louco pra fazer gravações mas não conseguia, cheguei a usar o xawtv mas não serviu, pelas instruções esse tutorial usa o mencoder do MPlayer, vi que tem no KMplayer uma interface GUI com o sintonizador de tv e tambem opção pra gravar clicando no botão de gravar so não consegui fazer funcionar, vc saberia como fazer? outra coisa no caso de iniciar uma gravação usando os comandos do tuto, depois que desejar parar a gravação qual e o comando a ser dado pra parar no terminal?
Olá, Ricaardo!
Não conheço o Kmplayer, por isso não posso ajudá-lo nisto. Mas, para parar o mencoder no terminal, use o CTRL+C umas duas ou três vezes.
Amigo, não tem jeito de eu fazer minha placa de captura, que é igual a sua, funcionar…tou já desistindo…humpf…
Olá, Mauro!
Ela funciona com Windows? Qual seu sistema operacional?
Tutorialzinho para configurar PixelView PlayTV Pro no Ubuntu:
1. Chame o terminal (Menu “Aplicativos > Acessórios >Terminal”
2. Edite o arquivo de carga de módulos (“drivers”, no dialeto Windows):
2.1. sudo gedit /etc/modules (“sudo” pedirá a senha para editar como root)
2.2. Escreva na última linha”bttv”, grave e feche o arquivo
3. Crie o arquivo de parâmetros de módulos:
2.1. sudo touch /etc/modprobe.d/bttv.conf
4. Edite o arquivo:
4.1. sudo gedit /etc/modprobe.d/bttv.conf
5. Cole as linhas:
# i2c
alias char-major-89 i2c-devb
options i2c-algo-bit bit_test=1
# bttv
alias char-major-81 bttv
# TV Card Prolink PlayTV Pro
options bttv card=37 tuner=2 radio=1 adc_crush=0 combfilter=1 full_luma_range=0 gbuffers=32
6. Carregue o módulo (ou reinicie o PC):
6.1. sudo modprobe bttv
Isto deve resolver. Se não der certo, Verifique os arquivos de logs para achar mensagens de erro:
Menu “Sistema > Administração > Visualizador de arquivos de log > syslog”
Sucesso!
Excelente tutorial, parabéns.
Grande abraço,
Guilherme Rodrigues Machado
Curitiba, PR
Valeu, Guilherme!
Me entusiasmei e melhorei um pouco.