Criando seu próprio script de gravação

Por:
É 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:
index_html_3d5b3b29
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.

Comece instalando os pacotes necessários:

# apt-get install mencoder cron kdebase kdialog

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):

cd /usr/local/bin
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:

# Pré-carrega as libs do KDE, para melhorar o desempenho do kdialog
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.

# Gera o video em formato palm:
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:

# apt-get install tvtime

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X