É bem simples gravar os programas utilizando o mencoder e é possível agendar a execução de comandos utilizando o cron. Com base nisso, fica fácil escrever um script que pergunte o horário e o nome de arquivo desejado, formule o comando de gravação e o execute no horário apropriado através do cron. O script não precisa ser feio, nem ser executado via linha de comando. É possível usar o kdialog (ou gdialog, ou Xdialog) para deixá-lo com uma cara amigável:
Para que o script funcione, você precisa ter instalado o mencoder e o kdialog. Ao usar o Ubuntu (ou outra distribuição que utilize o Gnome por padrão, sem KDE), você acaba precisando instalar um grande número de pacotes, mas nada impede que você modifique o script para utilizar o gdialog ou Xdialog.
Leia também:
Como gravar a tela do pc
Comece instalando os pacotes necessários:
Baixe o script no: https://www.hardware.com.br/linux/scripts/gravar-tv
Salve-o dentro da pasta “/usr/local/bin” e dê permissão de execução para o arquivo. Se preferir, use os comandos abaixo (como root):
wget https://www.hardware.com.br/linux/scripts/gravar-tv
chmod +x gravar-tv
Por causa dos comandos necessários para agendar a agravação usando o cron, o script deve ser executado como root, ou usando um usuário cadastrado no sudo (como o usuário padrão do Ubuntu, ou o usuário “kurumin”). Você pode alterar a configuração do sudo, cadastrando novos usuários editando o arquivo “/etc/sudoers”.
Desde que a placa de captura esteja configurada, o script vai funcionar diretamente, mas é sempre interessante entender como ele funciona de forma que você possa modificá-lo para atender as suas necessidades.
O script começa acertando o horário do sistema e executando o comando “kdeinit”, que carrega as bibliotecas básicas do KDE (caso ele não esteja ativo), de forma que as janelas do kdialog possam ser exibidas sem demora:
kdeinit &>/dev/null# Acerta o relógio do sistema
sudo ntpdate -u pool.ntp.org
Chegamos então a função de gravação, que pode ser repetida dentro do script, até que você termine de agendar os programas desejados. Veja que o início da função inclui algumas variáveis (como o padrão de vídeo usado), que podem ser alteradas caso necessário:
gravar(){
# Canal a gravar (o canal 3 é usado pela NET, mudar caso diferente)
var1=”3″
# Tempo de duração da gravação
var2=`kdialog –title “Gravar-TV” –inputbox
“Duração da gravação (00:01:00 = 1 minuto)” “01:05:00″`
# Aborta ao clicar no ‘cancelar’
if [ “$?” = “1” ]; then exit 2; fi
# Esta função abre uma janela do gerenciador de arquivos, permitindo
# escolher onde salvar o video:
var3=`kdialog –getsavefilename :label1 “*.avi *.mpg *.wmf |Arquivos de vídeo”`
# Padrão de video: 0 = PAL; 1 = NTSC; 2 = SECAM; 3 = PAL-N
# 4 = PAL-M; 5 = PAL-N; 6 = NTSC-JP; 7 = PAL-60
var4=”4″
# Padrão de sintonia: us-bcast (TV aberta) ou us-cable (TV a cabo)
var5=”us-cable”
Neste ponto são definidos os parâmetros de gravação, incluindo a resolução e o bitrate do vídeo. Usar 1200 de bitrate resulta em arquivos de boa qualidade, mas que ainda são relativamente pequenos. Reduzir este valor, permite gerar arquivos menores, que ocupem menos espaço no HD, mas em compensação de mais baixa qualidade.
# Parâmetros do vídeo (resolução, bitrate do video e bitrate do som):
var7=’width=640:height=480′
var8=”1200″
var9=”32000″
Neste ponto o script pergunta se você quer agendar a gravação, ou se quer fazer uma “gravação avulsa”, que é iniciada imediatamente. Cada uma das duas opções é representada por uma seção separada dentro do script:
# Opção para agendar a gravação
agendados=`cat /etc/crontab | grep /tmp`
kdialog –yesno “Gostaria de agendar a gravação?
(Responda não para gravar agora)
Os programas atualmente agendados são:
$agendados”
resp=”$?”
Esta é a função mais simples, usada pela opção da gravação avulsa
if [ “$resp” = “1” ]; then
# Inicia a gravação imediatamente
# A opção –passivepopup mostra um aviso que some depois do tempo
# especificado (neste caso depois de 6 segundos), ou quando o aviso é clicado.
kdialog –title “Gravando” –passivepopup “Gravando o canal $var1
por: $var2 horas
no arquivo: $var3
Feche a janela de terminal para abortar” 6 &
# Aqui vai o comando de gravação, montado usando todas as
# informações coletadas acima:
echo “mencoder tv:// -tv driver=v4l2:input=0:normid=$var4:channel=$var1:chanlist=$var5:$var7:device=/dev/video0:adevice=/dev/dsp:audiorate=$var9:forceaudio:forcechan=2:buffersize=64 -quiet -oac mp3lame -lameopts preset=medium -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$var8:keyint=132 -vop pp=lb -endpos $var2 -o $var3 ”
sudo mencoder tv:// -tv driver=v4l2:input=0:normid=$var4:channel=$var1:chanlist=$var5:$var7:device=/dev/video0:adevice=/dev/dsp:audiorate=$var9:forceaudio:forcechan=2:buffersize=64 -quiet -oac mp3lame -lameopts preset=medium -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$var8:keyint=132 -vop pp=lb -endpos $var2 -o $var3
sleep 1
# Depois do comando de gravação, ou seja, depois que a gravação termina, é mostrada mais uma janela de texto:
kdialog –title “Gravar-TV” –passivepopup “Ok!
A gravação terminou.” 5 &
E esta é a mais complexa, onde o script pergunta a data e horário e agenda a gravação usando o cron.
else
# Esta é a função que agenda a gravação usando o cron
# Começa descobrindo a data e horário atual:
minutos=`date +%M`
hora=`date +%H`
dia=`date +%d`
mes=`date +%m`
dow=`date +%u`
# Esta é a janela que pergunta o horário da gravação:
horario=`kdialog –title “Gravar-TV” –inputbox
“Horário para início da gravação:” “$hora:$minutos”`
minutos=`echo $horario | cut -f 2 -d “:”`
hora=`echo $horario | cut -f 1 -d “:”`
# Agora pergunta a data, permitindo agendar gravações para os dias seguintes:
data=`kdialog –title “Gravar-TV” –inputbox “Data da gravação:” “$dia/$mes”`
mes=`echo $data | cut -f 2 -d “/”`
dia=`echo $data | cut -f 1 -d “/”`
# O script de gravação é executado no dia e hora marcada usando o cron.
# Depois de terminada a gravação, ele se
# “autodestroi”, apagando o arquivo e removendo a linha inserida no /etc/crontab.
TMP=`mktemp /tmp/arq.XXXX`
TMMP=`echo $TMP | sed -e ‘s,/,\/,g’`
echo “mencoder tv:// -tv driver=v4l2:input=0:normid=$var4:channel=$var1:chanlist=$var5:$var7:device=/dev/video0:adevice=/dev/dsp:audiorate=$var9:forceaudio:forcechan=2:buffersize=64 -quiet -oac mp3lame -lameopts preset=medium -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$var8:keyint=132 -vop pp=lb -endpos $var2 -o $var3 ” > $TMP
echo “sed -i -e “/$TMMP/D” /etc/crontab” >> $TMP
echo “/etc/init.d/cron restart” >> $TMP
echo “rm -f $TMP” >> $TMP
chmod +x $TMP
sudo chmod 666 /etc/crontab
echo “$minutos $hora $dia $mes * root $TMP” >> /etc/crontab
sudo chmod 644 /etc/crontab
sudo /etc/init.d/cron restart
fi
}
# Faz com que o script pergunte se quer gravar outro programa até responder ‘nao’:
while [ 1 = 1 ]; do
gravar
kdialog –yesno “Gravar outro?”
if [ “$?” = “1” ]; then exit 2; fi
done
exit 0
Esta é a função que uso no meu script para que ele automaticamente converta o arquivo, gerando um arquivo com resolução reduzida, que posso assistir no palm usando o tcpmp. Para usá-la, você colocaria os comandos antes do “exit 0”, que finaliza o script.
pasta=`echo $var3 | cut -c 1-10`
arquivo=`echo $var3 | cut -c 11-`
rm frameno.avi
mencoder -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=400 -vop scale=320:240 -o $pasta”palm-“$arquivo “$var3”
kdialog –title “Gravar-TV” –passivepopup “Ok!
Video para o palm gerado.” 5 &
Para simplesmente assistir TV, sem gravar, a melhor opção é o TVtime. Ele pode ser instalado diretamente via apt-get:
Deixe seu comentário