Portál AbcLinuxu, 1. května 2025 17:30

Užitečné skripty 2: pouštíme večerníček

1.3.2007 22:12 | Přečteno: 1748× | Linux | Výběrový blog

Dnes bude téme zase multimediální. Někdy se stane, že se máte soubor (nebo i víc), ve kterém je víc dílů jednoho seriálu. Pokud si chcete pouštět jen jednotlivé díly a ne celý soubor naráz, je docela otrava hledat začátek konkrétního dílu. Dnešní skript dává možné řešení.

Abstrakt

Představme si, že máme seriál s pohádkami uložený v několika souborech, v každém souboru je víc dílů. Když chceme dětem pustit pohádku musíme vědět, který soubor vlastně otevřít a potom najít začátek konkrétního dílu. Dále je vhodné, aby se přehrávač po skončení dílu sám vypnul (aby si děti nemyslely, že jsme to my, kdo jim nedopřeje další pohádku). Dnešní skript umí vypsat seznam dílů a uživatel jenom zadá číslo dílu, který si vybral.

Samotný skript

Soubor hrej.sh
  1. #!/bin/bash
  2. file1="serial_1.avi"
  3. file2="serial_2.avi"
  4. framerate=25
  5. names=( )
  6. time=( )
  7. filename=( )
  8. addName(){
  9. #parametry : 1) jmeno dilu, 2) jmeno souboru, 3) cas, kde dil zacina
  10. names[${#names[*]}]="$1"
  11. filename[${#filename[*]}]="$2"
  12. time[${#time[*]}]="$3"
  13. }
  14. time2seconds(){
  15. #parametr: hodiny:minuty:sekundy, napr. 1:23:50
  16. hours=`echo $1 | sed -e "s/\(.*\):\(.*\):\(.*\)/\1/"`
  17. mins=`echo $1 | sed -e "s/\(.*\):\(.*\):\(.*\)/\2/"`
  18. secs=`echo $1 | sed -e "s/\(.*\):\(.*\):\(.*\)/\3/"`
  19. result=`expr 3600 \* $hours + 60 \* $mins + $secs`
  20. echo $result
  21. }
  22. dotaz(){
  23. echo "============== $1 ===================="
  24. length=`expr ${#names[*]} - 1`
  25. for i in `seq 0 $length`
  26. do
  27. echo "$i) ${names[$i]}"
  28. done
  29. echo -n "Zadej, který díl chceš přehrát: "
  30. read dil
  31. if [ 0 -le $dil -a $dil -le $length ]
  32. then
  33. ok=1
  34. next=`expr $dil + 1`
  35. if [ \( $dil -eq $length \) -o \( x${filename[$dil]} != x${filename[$next]} \) ]
  36. then
  37. options="-ni -ss ${time[$dil]}"
  38. else
  39. start=`time2seconds ${time[$dil]}`
  40. end=`time2seconds ${time[$next]}`
  41. dif=`expr $end - $start`
  42. frames=`expr $framerate \* $dif`
  43. options="-ni -ss ${time[$dil]} -frames $frames"
  44. fi
  45. mplayer -fs $options "${filename[$dil]}"
  46. else
  47. ok=0
  48. fi
  49. }
  50. addName "Skal a stepí divočinou" "$file1" "0:0:0"
  51. addName "Šla Nanynka do zelí" "$file1" "0:6:59"
  52. addName "S puškou v ruce s ohněm v srdci" "$file1" "0:14:11"
  53. addName "Natrhala lupení" "$file1" "0:21:38"
  54. addName "V Ukrajině a Povolží" "$file2" "0:0:0"
  55. addName "Přišel na ni Pepíček" "$file2" "0:14:26"
  56. addName "A s pomocí eskadrony" "$file2" "0:19:49"
  57. addName "Rozšlapal jí košíček" "$file2" "0:25:15"
  58. ok=0
  59. while [ $ok -ne 1 ]
  60. do
  61. dotaz "Seriál"
  62. done
Lehké vysvětlení: Teď stačí skript umístit do adresáře s videosoubory. Dále je vhodné nastavit mu práva na spuštení (chmod +x), aby se skript dal jednoduše spustit v terminálu. Pokud to z nějakých důvodů nelze zařídit, musí uživatel psát něco ve smyslu bash hrej.sh.

Místa k vylepšení, otázky

  1. Nejde vypínání udělat jednodušeji?
  2. Pouštím seriál ze síťového disku na 2 různých počítačích, které mají různá locales (il2 a utf¯8). Jak zařídit, aby byly výpisy na obou správně?
  3. Často se mi stává, že u seriálů ripnutých z DVD se lehce předbíhá zvuk před obrazem tempem zhruba 10s za hodinu (na začátku je zvuk v pořádku). Neví někdo, jak ukecat mplayer, aby trochu zpomalil zvuk?
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

1.3.2007 22:29 laurel
Rozbalit Rozbalit vše Re: Užitečné skripty 2: pouštíme večerníček
Odpovědět | Sbalit | Link | Blokovat | Admin
Zvukovu stopu pri prehravani mplayerom mozes posuvat parametrom -delay

man mplayer
....
-delay sec
audio delay in seconds (positive or negative float value)
....

1.3.2007 23:31 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Užitečné skripty 2: pouštíme večerníček
Tohle nepomůže, protože to zvuk jenom posune. Problém je ale v tom, že se zvuk postupně předbíhá nebo opožďuje a hodnotu delay je nutné měnit za běhu.
Quando omni flunkus moritati
xvasek avatar 2.3.2007 08:30 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Užitečné skripty 2: pouštíme večerníček
Modří to řeší čudlíky na dálkovém ovladači, pokud není rozchod nějak extra brutální.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.