mPlayRecTv - assiste e grave a programação da TV com MPlayer

Publicado por Pedro Robson Leão 05/04/2005

[ Hits: 5.306 ]

Download mPlayRecTv




Grave a programação da tv com o uso do cron/at e mplayer.
Passei por varias opções vcr, http://www.stack.nl/~brama/vcr/, mplayerTv, http://www.mplayertv.tk/. Mas foi no site http://www.anandtech.com/guides/viewfaq.aspx?i=154 que encontrei os parametros necessários para usar o mplayer para fazer minhas gravações.
Criei então um script para fazer isto e conto com a comunidade para aprimorar este script.
Mandem suas dicas, criticas e melhorias.

  



Esconder código-fonte

#!/usr/bin/bash

#name       : mPlayRecTv
#born       : 01-April-2005 (it is not lie)
#author     : Pedro Robson Leão (pedro.leao@ig.com.br)
#description: A simple interface to play and rec tv with mplayer.
#change log :
#20050401 ** first version.

#mencoder -tv driver=v4l:norm=palm:channel=3:chanlist=us-cable:width=320:height=240:input=0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900      -oac mp3lame -lameopts cbr:br=64 -o output.avi tv://
#mplayer  -tv driver=v4l:norm=palm:channel=3:chanlist=us-cable:width=352:height=240:input=0 -vo sdl tv://

#-- default Parameters
driver=${driver:-v4l};
norm=${norm:-palm};
channel=${channel:-3};
channelist=${channelist:-us-cable};
width=${width:-320};
height=${height:-240};
ovc=${ovc:-lavc -lavcopts};
vcodec=${vcodec:-mpeg4};
vbitrate=${vbitrate:-900};
oac=${oac:-mp3lame -lameopts};
cbr=${cbr:-br=64};
input=${input:-Television};
output=${output:-output.avi};
vo=${vo:-sdl};
log=${log:-/dev/null};
time=;
play=1;
myname=$0;

#-- convert hour and minuts to seconds
function convTime() {
   value=${1};
   value=${value//:/};
   min=$((value%100));
   hour=$((value/100))
   min=$((min*60));
   hour=$((hour*3600));
   sec=$((hour+min));
   echo $sec;
}

#-- error message
function errMsg() {
   echo "Use: ${myname} [options ...]";
   echo;
   echo "Default options:";
   echo "--driver=${driver}";
   echo "--norm=${norm} [palm/paln/pal/ntsc]";
   echo "--channel=${channel}";
   echo "--channelist=${channelist}";
   echo "--width=${width}";
   echo "--height=${height}";
   echo "--ovc=${ovc}";
   echo "--vcodec=${vcodec}";
   echo "--vbitrate=${vbitrate}";
   echo "--oac=${oac}";
   echo "--cbr=${cbr}";
   echo "--input=${input} [Television/Composite1/S-Video]";
   echo "--output=${output}";
   echo "--vo=${vo}";
   echo "--log=${log}";
   echo;
   echo;

   case $1 in
      pid)   echo "ERROR IN PLAY/REC : To debug errors to play/rec use --log option and see log to many informations.";;
      input) echo "INVALID INPUT     : Use --input with [Television/Composite1/S-Video]";;
      mplayer|mencoder) echo "CAN'T FOUND PROGRAM ${1}";
   esac
   
}

#-- Change input parameters to getopts format
set -- ${*//--driver/-d};
set -- ${*//--norm/-n};
set -- ${*//--channel/-c};
set -- ${*//--channelist/-l};
set -- ${*//--width/-W};
set -- ${*//--heigth/-H};
set -- ${*//--ovc/-V};
set -- ${*//--vcodec/-C};
set -- ${*//--vbitrate/-b};
set -- ${*//--oac/-A};
set -- ${*//--cbr/-R};
set -- ${*//--input/-i};
set -- ${*//--output/-o};
set -- ${*//--vo/-O};
set -- ${*//--play/-p};
set -- ${*//--rec/-r};
set -- ${*//--log/-L};
set -- ${*//--time/-T};
set -- ${*//--help/-h};

#- get parameters
while getopts d:n:c:l:W:H:V:C:b:A:R:i:o:O:prhL:T: value 2>/dev/null ; do
   case $value in
      d) driver="${OPTARG}";;
      n) norm="${OPTARG}";;
      c) channel="${OPTARG}";;
      l) channelist="${OPTARG}";;
      w) width="${OPTARG}";;
      H) heigth="${OPTARG}";;
      V) ovc="${OPTARG}";;
      C) vcodec="${OPTARG}";;
      b) vbitrate="${OPTARG}";;
      A) oac="${OPTARG}";;
      R) cbr="${OPTARG}";;
      i) input="${OPTARG}";;
      o) output="${OPTARG}";;
      O) vo="${OPTARG}";;
      L) log="${OPTARG}";;
      T) time="${OPTARG}";;
      p) play=1;;
      r) play=;;
      h) errMsg help; exit 0;;
      *) errMsg help; exit 0;;
   esac
done 

#-- convert input parms
case ${input} in
   Television) input=0;;
   Composite1) input=1;;
   S-Video)    input=2;;
   *)               errMsg input; exit 0;;
esac

gparms="driver=${driver}:norm=${norm}:channel=${channel}:chanlist=${channelist}:width=${width}:height=${height}:input=${input}";

if [ ! -z ${play} ] ; then
   command="mplayer  -tv ${gparms} -vo ${vo} tv://";
   msglog="${0} play channel ${channel} ";
else
   command="mencoder -tv ${gparms} -ovc ${ovc} vcodec=${vcodec}:vbitrate=${vbitrate} -oac ${oac} cbr:${cbr} -o ${output} tv://";
   msglog="${0} rec channel ${channel} ";
fi

#-- verify command
if  ! which $( echo $command | cut -d" " -f1 ) ; then
   errMsg $command;
   exit 1;
fi

#-- execute the mplayer our mencoder
start=$(date);
${command} >${log} 2>&1 &
cmdpid=${!};

#-- in error case no has pid
[ -z "${cmdpid}" ] && errMsg pid && exit 0;

#-- get time to reproduction
time=$( convTime ${time} );

#-- if time reproduction, kill proccess after time
[ ${time} -ge 0 ] && sleep ${time} && kill ${cmdpid};
end=$(date);

#-- write log message
logger 0 "${msglog} pid:${cmdpid} start:${start} end:${end}";

exit 1;

Scripts recomendados

Inserção de máquinas no banco de dados para controle interno

Plugin do Nagios em Shell Script

Linkswitch (The POG)

Converter arquivos .tif para .pdf

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGANDO MSG ANTIGAS EM TODAS AS PASTAS DE UM USUÁRIO


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts