Strona 1 z 1

Skrypt do nagrywania telewizji

: 26 lutego 2011, 23:21
autor: makówka
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:
  1. Wybór programu i długości nagrania, nazwy nagranego pliku oraz pytanie o wyłączenie komputera po nagrywaniu.
  2. Czas rozpoczęcia nagrywania.
  3. Właściwy skrypt, który nagrywa programy telewizyjne.
Każdy skrypt wywołuje kolejny, dlatego wystarczy uruchomić tylko pierwszy.
  1. 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
    
  2. 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
    
  3. 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
    
Konfiguracja cpulimit:
  • Instalujemy cpulimit.
  • Do pliku sudoers dodajemy linijkę:

    Kod: Zaznacz cały

    nazwa_użytkownika  ALL = NOPASSWD: /usr/bin/cpulimit
Może komuś przyda się taki zestaw, umożliwia nagrywanie programów telewizyjnych bez skomplikowanych programów typu mythtv. Za wszelkie sugestie i poprawki będę wdzięczny.

: 27 lutego 2011, 00:00
autor: DaVidoSS
Nie zauważywszy piszesz na forum: Pomoc. Do takich poradników służy forum: Opisy FAQ HOWTo.
Poza tym bardzo ciekawa propozycja..

: 27 lutego 2011, 00:25
autor: makówka
Oj, nie zauważyłem, że istnieje taka część forum. Na przyszłość będę wiedział. Może uda się przenieść temat?