mPlayRecTv - assista e grave a programação da TV com MPlayer
Publicado por Pedro Robson Leão 23/04/2005
[ Hits: 6.559 ]
Grave a programação da tv usando crontab/at e mplayer.
Após problemas com alguns aplicativos encontrei os parametros necessários para usar o mplayer e fazer minhas gravações.
Criei um script para fazer isto e conto com todos para aprimorar o script.
Agora com suporte a v4l e v4l2.
#!/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.
#20050423 ajust para v4l2.
#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:-v4l2};
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} [v4l/v4l2]";
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
#-- convert norm para minusculo
norm=$( echo ${norm} | tr A-Z a-z );
#-- Ajusta parametros para v4l2
if [ "${driver}" = "v4l2" ] ; then
#0 = PAL; 1 = NTSC; 2 = SECAM; 3 = PAL-Nc; 4 = PAL-M; 5 = PAL-N; 6 = NTSC-JP; 7 = PAL-60;
case ${norm} in
pal) norm=0;;
ntsc) norm=1;;
secam) norm=2;;
pal-nc|palnc) norm=3;;
pal-m|palm) norm=4;;
pal-n|paln) norm=5;;
ntsc-jp|paljp) norm=6;;
pal-60|pal60) norm=7;;
esac
normopc="normid";
else
normopc="norm";
fi
gparms="driver=${driver}:${normopc}=${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 ) >/dev/null; then
errMsg $command;
exit 1;
fi
#-- execute the mplayer our mencoder
start=$(date);
echo ${command};
${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 1 ] && sleep ${time} && kill ${cmdpid};
end=$(date);
#-- write log message
logger 0 "${msglog} pid:${cmdpid} start:${start} end:${end}";
exit 1;
Script de controle do Alfresco para RHEL / CentOS / Fedora
speedy.sh - Wget no popup do speedy home :-)
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
O que houve com slackware ??? (12)
Alterar conteúdo de dica [RESOLVIDO] (3)
Vou destruir sua infância:) (5)









