Skrypt do nagrywania telewizji
: 26 lutego 2011, 23:21
Utworzyłem skrypt w bashu do nagrywania programów z analogowej karty telewizyjnej. Program działa w oparciu o programy tvtime i ffmpeg, z wykorzystaniem polecenia at (planowanie nagrywania). U mnie karta telewizyjna działa z serwerem dźwięku pulseaudio, stąd w skryptach polecenia odnoszące się do tego systemu dźwięku. Aby program ffmpeg nie zawiesił komputera, wykorzystałem program cpulimit (konfiguracja na końcu postu). Całość składa się z trzech skryptów:
- Wybór programu i długości nagrania, nazwy nagranego pliku oraz pytanie o wyłączenie komputera po nagrywaniu.
- Czas rozpoczęcia nagrywania.
- Właściwy skrypt, który nagrywa programy telewizyjne.
Kod: Zaznacz cały
/usr/local/bin/rec
Kod: Zaznacz cały
#!/bin/bash CHAN=`dialog --stdout --inputbox "Jaki kanał wybrać?" 10 30` TIME=`dialog --stdout --inputbox "Podaj czas nagrywania: [00:00:00]" 10 30` NAME=`dialog --stdout --inputbox "Nagranie zostanie zapisane na pulpicie. Jaką nazwę mu nadać?" 10 30` SDOWN=`dialog --stdout --inputbox "Wyłączyć komputer po nagrywaniu? [tak/nie]" 10 30` echo $CHAN > /tmp/chan.tmp echo $TIME > /tmp/time.tmp echo $SDOWN > /tmp/sdown.tmp echo $NAME > /tmp/name.tmp /usr/local/bin/tvat
Kod: Zaznacz cały
/usr/local/bin/tvat
Kod: Zaznacz cały
#!/bin/bash START=`dialog --stdout --inputbox "Kiedy rozpocząć nagrywanie? [HH:MM]" 10 30` DATE=`dialog --stdout --inputbox "Nagrywać dzisiaj czy jutro (po 24tej)? [today | tomorrow]" 10 30` at $START $DATE -f /usr/local/bin/tvrec
Kod: Zaznacz cały
/usr/local/bin/tvrec
Kod: Zaznacz cały
#!/bin/bash CHAN=`cat /tmp/chan.tmp` TIME=`cat /tmp/time.tmp` NAME=`cat /tmp/name.tmp` SDOWN=`cat /tmp/sdown.tmp` MOD=`pactl list | grep -B 1 "Nazwa: module-loopback" | grep Modu | sed 's/[^0-9]//g'` timeout 5 /usr/bin/tvtime -X :0 -n PAL -f europe -c $CHAN -x /dev/mixer :p cm pactl unload-module $MOD pactl load-module module-loopback ffmpeg -y -f alsa -i hw:1,0 -acodec mp2 -ab 64k -ar 44100 -f video4linux2 -s 800x600 -r 25 -qscale 5 -i /dev/video0 -sws_flags bicubic -ss 00:00:03 -t $TIME -f avi ~/Desktop/$NAME.avi > /home/szymek/Desktop/tvrec.log 2>&1 PID=`ps -A | grep -i ffmpeg | awk '{print $1}'` sudo cpulimit -p $PID -l 40 case $SDOWN in tak) killall Eterm; rm /tmp/chan.tmp; rm /tmp/time.tmp; rm /tmp/sdown.tmp; rm /tmp/name.tmp; sudo /sbin/shutdown -h now;; nie) killall Eterm; rm /tmp/chan.tmp; rm /tmp/time.tmp; rm /tmp/sdown.tmp; rm /tmp/name.tmp; exit 0;; esac
- Instalujemy cpulimit.
- Do pliku sudoers dodajemy linijkę:
Kod: Zaznacz cały
nazwa_użytkownika ALL = NOPASSWD: /usr/bin/cpulimit