- pozwala na wybór zewnętrznych napisów,
- przeszukuje plik video czy zawiera wbudowane napisy, jeżli tak wyświetli okno wyboru,
- gdy proporcje obrazu na to pozwalają napisy będą wyświetlane na czarnym pasku pod filmem,
- pozwala na wybór scieżek dźwiękowych
#!/usr/bin/perl
use strict;
my($VO) = 'xv';
my($AO) = 'alsa';
my($SUB_CP) = 'cp1250';
my($video)="@ARGV";
#my($video) = `zenity --title="Select video." --file-selection`;
chomp($video);
my($subtitles) = `zenity --title="Select subtitles." --file-selection`;
chomp($subtitles);
my($x) = 0.0;
my($y) = 0.0;
my($y_expand) = 0.0;
my($expand) = 0.0;
my($video_format) = "NIEZNANY";
my($i);
my(@audio_table) = ();
my($audio_table_elements);
my($audios);
my($audio_id);
my(@sub_table) = ();
my($sub_table_elements);
my($subs);
my($sub_id);
my(@video_info) = `mplayer -ao null -vo null -frames 5 -identify \"$video\" 2>/dev/null`;
foreach $i (@video_info)
{
if( $i =~ /^ID_VIDEO_WIDTH/)
{
$x = substr($i, 15, -1);
}
if($i =~ /^ID_VIDEO_HEIGHT/)
{
$y = substr($i, 16, -1);
}
if($i =~ /^ID_VIDEO_FORMAT/)
{
$video_format = substr($i, 16, -1);
}
if($i =~ /^ID_AUDIO_ID/)
{
$audio_table_elements = substr($i, 12, -1);
push(@audio_table, $audio_table_elements);
}
if($i =~ /^ID_SUBTITLE_ID/)
{
$sub_table_elements = substr($i, 15, -1);
push(@sub_table, $sub_table_elements);
}
}
if($video_format =~ "NIEZNANY")
{
exec("zenity --error");
exit(1);
}
$y_expand = $x * 0.75;
if($y_expand > $y)
{
$expand = $y_expand - $y;
$expand = int($expand + 0.5);
}
else
{
$expand = 0;
}
if($#audio_table > 0)
{
$audios = join(" FALSE ", @audio_table);
$audios = "FALSE " . $audios;
$audio_id = `zenity --list --radiolist --column " " --column "AUDIO__ID" $audios`;
$audio_id = int($audio_id);
}
else
{
$audio_id = $audio_table[0];
}
if(length($subtitles) > 0)
{
exec("mplayer -vo $VO -ao $AO -aid $audio_id -vf expand=0:-$expand -sub \"$subtitles\" \"$video\"");
exit(0);
}
else
{
if($#sub_table == -1)
{
exec("mplayer -vo $VO -ao $AO -subcp $SUB_CP -aid $audio_id -vf expand=0:-$expand \"$video\"");
exit(0);
}
else
{
if($#sub_table > 0)
{
$subs = join(" FALSE ", @sub_table);
$subs = "FALSE " . $subs;
$sub_id = `zenity --list --radiolist --column " " --column "SUBTITLE__ID" $subs`;
$sub_id = int($sub_id);
}
else
{
$sub_id = 0;
}
}
exec("mplayer -vo $VO -ao $AO -subcp $SUB_CP -aid $audio_id -sid $sub_id -vf expand=0:-$expand \"$video\"");
exit(0);
}
Napisz w języku powłoki funkcję, która sprawdzi czy pierwszy parametr wywołania jest poprawną liczbą w zapisie szestnastkowym. Funkcja pod swoją nazwą ma zwracać: wartość dziesiętną liczby gdy jest poprawna, -1 w przeciwnym wypadku.
© GMB
#! /bin/bash
function hex2dec
{
count=${#1}
tablica=$1
c=$count
d=1
dec=0
while [ $c -gt 0 ];
do
test=${tablica:$((count-$d)):1}
#przekształcanie liter
touch tmp
echo $test > tmp
test2=`grep -cv '[0-9,a-f]' tmp`
if [ $test2 -gt 0 ] ;
then echo zle; exit -1
fi
#obliczanie
case $test in
"a") test=10;;
"b") test=11;;
"c") test=12;;
"d") test=13;;
"e") test=14;;
"f") test=15;;
esac
wynik=$((wynik+$((test*$((16**$((d-1))))))))
d=$[d+1]
c=$[c-1]
done
echo $wynik
}
hex2dec $1