Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Skript na spaní  (Přečteno 4062 krát)

premet

  • Host
Skript na spaní
« kdy: 04 Února 2010, 15:22:12 »
Zdravím,

Píšu si takovej menší skript na automatický pouštění seriálů na večer a pak následný vypnutí počítače, at to nemusím pořád si klikat a nastavovat, zkrátka sem línej  :).

Zasekl jsem se nad tím, jak ve VLC přehrát více souborů, když pustím např.
Kód: [Vybrat]
vlc foo1.avi foo2.avi foo3.avitak sice v playlistu jsou všechny, ale přehrává se ten první a ty 2 se přeskočí (jsou před ním, je to v obráceném pořadí), čili chci dosáhnout toho, aby se postupně přehrávali foo1.avi, foo2.avi, foo3.avi  :).

Pak pro případné zájemce můžu skript umístit i sem pro poznámky, chyby a podobně  :).
« Poslední změna: 04 Února 2010, 17:31:02 od Premet »

premet

  • Host
skript na spaní
« Odpověď #1 kdy: 04 Února 2010, 15:52:29 »
Divný, teď mi to funguje  ;D
« Poslední změna: 04 Února 2010, 17:31:19 od Premet »

premet

  • Host
Re: Skript na spaní
« Odpověď #2 kdy: 04 Února 2010, 17:24:58 »
Tak to sem dám, není to ješte dle mojich představ a má to nedostatky, ale mě to zatím asi bude stačit, ale pokud by mi to někdo pomohl vylepšit tak budu rád.

Jak to funguje :

Vyberete složku se seriálem, ze které se potom udělá playlist, buď seřazeně nebo pomíchaně. Poté se spustí VLC přes fullscreen a přehraje vám 3 kousky vašeho seriálu. Následně vymaže z playlistu počet dílů, které si tam nastavíte u proměnné SLEEP, já tam mám 1, protože u prvního hned usnu, pak následuje vypnutí počítače. Při následovném spuštění se pokračuje z vašeho playlistu, dokud nezkouknete celej seriál. Toť vše  :)

Nápady a rady uvítám  8)

Kód: [Vybrat]
#!/bin/bash

## Skript na postupné přehrávání celého seriálu a vypnutí počítače po přehrání určitého počtu dílů


## Vytvoření "playlistu"

make_playlist()
{

   if [ $2 -eq 0 ]; then

      find "$1" -type f | egrep -i ".avi$|.mpg$|.mpeg$|.mkv$|.wmv$|.mp4$" | shuf > playshut.txt

   else

      find "$1" -type f | egrep -i ".avi$|.mpg$|.mpeg$|.mkv$|.wmv$|.mp4$" | sort -u > playshut.txt

   fi

   if [ ! -s playshut.txt ]; then
   
       zenity --error --text "Nevybrali jste adresář obsahující video"
       choose
 
   fi

   sed -i 's/\(.*\)/"\1"/g' playshut.txt   

}


## Výběr adresáře a pořadí

choose()
{

if [ ! -e "playshut.txt" ] || [ ! -s "playshut.txt" ]; then
         
          while [ true ]; do
                zenity --info --text "Nemáte vybrán seriál nebo již seriál skončil! \nVyberte nový seriál"
                PLAYDIR="$(zenity --file-selection --directory)"
               
                if [ -d "$PLAYDIR" ]; then
                   break
                fi

                if [ "$PLAYDIR" = "" ]; then
                   exit 1
                fi
          done

                SHUFFLE=$(zenity --question --text "Chcete nahodné pořadí?"; echo $?)

          make_playlist "$PLAYDIR" $SHUFFLE

fi

}

## Spusť výběr

choose

## Upozornění na docházející díly

#case `wc -l playshut.txt | awk '{print $1}'` in
#    0 )
#      zenity --warning --text "Zbývá vám poslední 1 díl seriálu!"
#      ;;
#    1 )
#      zenity --warning --text "Zbývají vám poslední 2 díly seriálu!"
#      ;;
#    2 )
#      zenity --warning --text "Zbývají vám poslední 3 díly seriálu!"
#      ;;
#esac

## Spuštění VLC

TOTAL_COUNT=$((`wc -l playshut.txt | awk '{print $1}'`+1))

COUNT=3


if [ $TOTAL_COUNT -lt $COUNT ]; then

   COUNT=$TOTAL_COUNT

fi

PLAY=`sed "1,${COUNT}!d" playshut.txt | tr '\n' ' '`

bash -c "vlc $PLAY --play-and-exit --aspect-ratio 16:9 -f"


## Smazání určitého počtu dílů, podle toho za jak dlouho vytuhnete

SLEEP=3

while [ $SLEEP -ne 0 ]; do
   
    sed -i "${SLEEP}d" playshut.txt
    SLEEP=$(($SLEEP-1))   

done

## Vypnutí počítače

shutdown -h now

EDIT: V proměnné  $COUNT se dá nyní změnit počet přehrávaných dílů  :)
« Poslední změna: 06 Února 2010, 22:27:09 od Premet »

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Skript na spaní
« Odpověď #3 kdy: 04 Února 2010, 17:39:36 »
Předpokládám že to musíš spouštět celé pod rootem, kvůli shutdown...

premet

  • Host
Re: Skript na spaní
« Odpověď #4 kdy: 04 Února 2010, 17:45:24 »
Já jsem si povolil možnost spouštění /sbin/shutdown i pro uživatele  :)
Jinak je taky možnost si upravit pro to sudo, aby jsi nemusel zadávat heslo.

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Skript na spaní
« Odpověď #5 kdy: 04 Února 2010, 17:49:00 »
No vidiš, tuto možnost jsem opomenul :)

Kdyby tedy to mělo ale být použitelné i obecně, využil bych raději D-Bus pro vypínání.
« Poslední změna: 04 Února 2010, 18:12:32 od GdH »

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Skript na spaní
« Odpověď #6 kdy: 04 Února 2010, 20:00:40 »
Nemám teď na to čas, ale pár drobných poznámek:
egrep -i bude jistější
zenity --warning, že zbývá x dílů s nutností klikat mi přijde otravné, když stejně nemá člověk na výběr - použil bych notify-send, určitě lze doinstalovat i na Fedoře

premet

  • Host
Re: Skript na spaní
« Odpověď #7 kdy: 04 Února 2010, 20:10:18 »
Nemám teď na to čas, ale pár drobných poznámek:
egrep -i bude jistější
zenity --warning, že zbývá x dílů s nutností klikat mi přijde otravné, když stejně nemá člověk na výběr - použil bych notify-send, určitě lze doinstalovat i na Fedoře

Case sensitive mě nenapadlo, dobrá připomínka.
Ty zbývající díly asi dám pryč, ale rád bych vyřešil nějak tu možnost vybrat si, kolik dílů si pustit a pokud by bylo v playlistu míň dílů tak přehrát jen ty co zbývají, na to mrknu zítra  :).

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Skript na spaní
« Odpověď #8 kdy: 05 Února 2010, 00:42:55 »
No a když jsem se konečně dostal k pořádnému počítači, můžu ti poslat odkaz na skript, krerý obsahuje mé řešení stejného problému:
http://forum.ubuntu.cz/index.php/topic,39429.msg315285.html#msg315285
Pro lepší orientraci - už při výpisu souborů přes find, přidám ve funkci filter() každému řádku uvozovky a přidám escape znak před případné "`", lidi jsou prasata. (mimochodem, můžeš si všimnout, že jsem zbytečně použil regulární výrazy, místo toho, co jsem radil v tady, holt člověk se furt učí :) Než posílám seznam souborů aplikaci, odstraním pomocí tr konce řádků a nacpu to do jednoho řetězce.


premet

  • Host
Re: Skript na spaní
« Odpověď #9 kdy: 05 Února 2010, 15:13:10 »
K večeru na to mrknu, když tak to sem pak zase dám. Ješte nějak vykoumu to, když si ten seriál pouštíš během dne, aby se ti ty zkouknutý díly vymazaly z playlistu  :)

premet

  • Host
Re: Skript na spaní
« Odpověď #10 kdy: 06 Února 2010, 13:54:23 »
GdH:
Snažím se už asi hodinu a půl vykoumat, jak předat určitej počet dílů VLCčku, ale nechápu to.
Příklad: V playlistu mám tohle
Kód: [Vybrat]
/media/Data/Seriály/dr. House/dr. house/01 Pilotni dil.avi
/media/Data/Seriály/dr. House/dr. house/02 - Otazka rodicovstvi.avi
/media/Data/Seriály/dr. House/dr. house/03 - Occamova britva.avi
Když jednotlivý řádky dám do uvozovek, nebo před mezery dám \, VLC mi to z toho skriptu nechce vzít, přitom, když stejnej příkaz zadám do terminálu tak to jde.

Tenhle příkaz se spouštím v tom skriptu
Kód: [Vybrat]
vlc `sed '1!d' playshut.txt` --play-and-exit --aspect-ratio 16:9 -fa vyexpandovanej vypadá takhle
Kód: [Vybrat]
vlc "/media/Data/Seriály/dr. House/dr. house/01 Pilotni dil.avi" --play-and-exit --aspect-ratio 16:9 -fve skriptu mi to hodí tohle, jak kdyby to nevzalo ty uvozovky
Kód: [Vybrat]
VLC media player 1.0.4 Goldeneye
[0x1bd7098] main libvlc: Spouštím vlc s výchozím rozhraním. Použijte 'cvlc' pro spuštění bez rozhraní.
libdvdnav: Using dvdnav version 4.1.4
libdvdread: Encrypted DVD support unavailable.
libdvdread: Can't stat "/media/Data/Seriály/dr.
Adresář nebo soubor neexistuje
libdvdread: Could not open "/media/Data/Seriály/dr.
libdvdnav: vm: failed to open/read the DVD
[0x7f83c000a508] access_file access error: cannot open file "/media/Data/Seriály/dr. (Adresář nebo soubor neexistuje)
[0x7f83dc000c98] main input error: open of `"/media/Data/Seriály/dr.' failed: no suitable access module
libdvdnav: Using dvdnav version 4.1.4
libdvdread: Encrypted DVD support unavailable.
libdvdread: Can't stat House/dr.
Adresář nebo soubor neexistuje
libdvdread: Could not open House/dr.
libdvdnav: vm: failed to open/read the DVD
[0x7f83c00127a8] access_file access error: cannot open file House/dr. (Adresář nebo soubor neexistuje)
[0x7f83dc006658] main input error: open of `House/dr.' failed: no suitable access module
libdvdnav: Using dvdnav version 4.1.4
libdvdread: Encrypted DVD support unavailable.
libdvdread: Can't stat house/01
Adresář nebo soubor neexistuje
libdvdread: Could not open house/01
libdvdnav: vm: failed to open/read the DVD
[0x7f83c000c028] access_file access error: cannot open file house/01 (Adresář nebo soubor neexistuje)
[0x7f83dc007298] main input error: open of `house/01' failed: no suitable access module
libdvdnav: Using dvdnav version 4.1.4
libdvdread: Encrypted DVD support unavailable.
libdvdread: Can't stat Pilotni
Adresář nebo soubor neexistuje
libdvdread: Could not open Pilotni
libdvdnav: vm: failed to open/read the DVD
[0x7f83c0001448] access_file access error: cannot open file Pilotni (Adresář nebo soubor neexistuje)
[0x7f83dc006ea8] main input error: open of `Pilotni' failed: no suitable access module
libdvdnav: Using dvdnav version 4.1.4
libdvdread: Encrypted DVD support unavailable.
libdvdread: Can't stat dil.avi"
Adresář nebo soubor neexistuje
libdvdread: Could not open dil.avi"
libdvdnav: vm: failed to open/read the DVD
[0x7f83c000d7a8] access_file access error: cannot open file dil.avi" (Adresář nebo soubor neexistuje)
[0x7f83dc0079a8] main input error: open of `dil.avi"' failed: no suitable access module
[0x1cf3b28] main playlist: end of playlist, exiting

Když ten stejnej vyexpandovanej příkaz dám přímo do terminálu tak to funguje, asi mi něco uniká nebo nejsem tak moc Bashe znalej  :).

premet

  • Host
Re: Skript na spaní
« Odpověď #11 kdy: 06 Února 2010, 14:10:57 »
Takhle bych to pak používal v tom skriptu
Kód: [Vybrat]
## Spuštění VLC

COUNT=3
PLAY=`sed "1,${COUNT}!d" playshut.txt`

vlc $PLAY --play-and-exit --aspect-ratio 16:9 -f
z čehož vyjde
Kód: [Vybrat]
vlc "/media/Data/Seriály/dr. House/dr. house/01 Pilotni dil.avi"
"/media/Data/Seriály/dr. House/dr. house/02 - Otazka rodicovstvi.avi"
"/media/Data/Seriály/dr. House/dr. house/03 - Occamova britva.avi" --play-and-exit --aspect-ratio 16:9 -f
jenže to nefunguje  :-\

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Skript na spaní
« Odpověď #12 kdy: 06 Února 2010, 14:28:41 »
Jo, já si s tím taky lámal hlavu a nechápal to. Ale obešel jsem to, v tom mém odkazovaném skriptu máš řešení ;)

premet

  • Host
Re: Skript na spaní
« Odpověď #13 kdy: 06 Února 2010, 14:34:37 »
Stejně by mě zajímalo, proč to takhle nejde, jinak už to funguje díky  :).

EDIT: Aktuální skript je v dříve uvedeném příspěvku  :)
« Poslední změna: 06 Února 2010, 15:17:21 od Premet »

q66

Re: Skript na spaní
« Odpověď #14 kdy: 06 Února 2010, 21:57:05 »
nefunguje to, protože to neakceptuje newlines ;)
sw engineer @ samsung research UK, efl developer
octaforge developer (https://octaforge.org)
freebsd user

premet

  • Host
Re: Skript na spaní
« Odpověď #15 kdy: 06 Února 2010, 22:00:14 »
nefunguje to, protože to neakceptuje newlines ;)
Tím myslíš přesně co ?

premet

  • Host
Re: Skript na spaní
« Odpověď #16 kdy: 06 Února 2010, 22:09:46 »
A jo ten malej dareba má pravdu  ;D

EDIT: Opět změněno  8)
« Poslední změna: 06 Února 2010, 22:20:30 od Premet »

 

Provoz zaštiťuje spolek OpenAlt.