Vill någon korr.läsa mitt skript?

Här diskuteras programmering och utveckling
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Vill någon korr.läsa mitt skript?

Inlägg av rylleman »

Jag har gjort ett nautilus script för att rendera ut en bildsekvens från ett animationsprogram och lägga ihop den med ett ljudspår och köra ut en filmfil.
Skriptet fungerar som jag vill men jag vill gärna ha synpunkter på koden, om något kan lösas smidigare eller så.

Jag skulle också vilja ha någon snyggare lösning än zenity för att kommunicera med användaren. Jag har två variabler användaren kan sätta själv vilket måste göras med två olika zenity-popupper, inte snyggt. Jag skulle vilja lägga in fler parametrar för användaren att sätta men låtit bli för att det blir så många irriterande popuper.
Sedan vill jag göra en snyggare presentation av hur det går för scriptet, allt jag kan göra nu är att lägga in en zenity info-popup efter varje steg. -usch!. Vill samla all sådan info i ett förster.
Några förslag på nåt enkelt GUI-verktyg att använda?, helst utan att användaren behöver ladda ner extra beroenden.

Sedan ska jag göra en if-sats som kollar om skriptet körs på bara en fil och om den har rätt format. Någon som har någon sån kod liggandes så jag slipper leta mig fram med google?

Kod: Markera allt

#!/bin/bash
## Anime Studio preview render nautilus script.
## Created by David Rylander, 2009, www.rylanderanimation.se
## Creative Commons Attribution-Share Alike 3.0 licenced (http://creativecommons.org/licenses/by-sa/3.0/)
## Dependencies of this script; Anime Studio Pro, FFmpeg, Sox.

##### Variables #####
mypath="`pwd`"  #get current path.

for filename in "$@"
do
origstartframe=$(grep frame_range "$mypath/$filename" | cut -d ' ' -f 2)
origendframe=$(grep frame_range "$mypath/$filename" | cut -d ' ' -f 3)
fps=$(grep fps "$mypath/$filename" | cut -d ' ' -f 2)
fpsdecimal=`echo "1 / $fps" | bc -l`
soundpath=$(grep soundtrack "$mypath/$filename" | cut -d ' ' -f 2 | sed 's/"//g')
done

#TODO, kolla om bara en fil är vald och om denna har .anme ändelse. Annars avbryt.

##### Create temp-folder #####
if [ ! -d preview-temp ]
then
   mkdir preview-temp
fi
sleep 1

##### User set custom frame range. #####
startframe=$(zenity --entry --text "startframe:" --entry-text $origstartframe);
endframe=$(zenity --entry --text "endframe:" --entry-text $origendframe);

##### Render AS-file. #####
for filename in "$@"
do
/usr/local/bin/AnimeStudioPro_5.6/AnimeStudioPro -r "$mypath/$filename" -start $startframe -end $endframe -f PNG -halfsize yes -o $mypath/preview-temp/preview-render_.png
done 

##### Check if soundtrack exists where it should be. #####
for filename in "$@"
do
if [ -z $soundpath ];
then
soundtrack=""
elif [ -e $mypath/$soundpath ];
     then
soundtrack=$mypath/$soundpath
elif [ -e $soundpath ];
then
soundtrack=$soundpath
else
soundtrack=""  #if we can't find the audio in specified path (i.e is windows path)
fi
done

##### Get length, padding and trimming. #####
for filename in "$@"
do
if [ $startframe = $origstartframe ];
then
pad1=0
trim1=0
elif [ $startframe -gt $origstartframe ];
then
startcrop=`echo "($startframe - $origstartframe) * $fpsdecimal" | bc -l`
pad1=0
trim1=$startcrop
elif [ $startframe -lt $origstartframe ];
then
startpad=`echo "($origstartframe - $startframe) * $fpsdecimal" | bc -l`
pad1=$startpad
trim1=0
fi
done

audlength=`echo "($endframe - $startframe) * $fpsdecimal" | bc -l`

for filename in "$@"
do
if [ $endframe = $origendframe ];
then
pad2=0
trim2=$audlength
elif [ $endframe -gt $origendframe ];
then
endpad=`echo "($endframe - $origendframe) * $fpsdecimal" | bc -l`
pad2=$endpad
trim2=$audlength
elif [ $endframe -lt $origendframe ];
then
endcrop=`echo "($origendframe - $endframe) * $fpsdecimal" | bc -l`
pad2=0
trim2=`echo "$audlength - $endcrop" | bc -l`
fi
done

##### Render audio #####
for filename in "$@"
do
if [  $soundtrack != "" ]; then
sox $soundtrack $mypath/preview-temp/audio-temp.wav pad $pad1 $pad2 trim $trim1 $trim2
tempaudio="-i $mypath/preview-temp/audio-temp.wav"
else
tempaudio=""
fi
done

##### Renumber image sequence to start with #0001 #####
if [ ! -e $mypath/preview-temp/preview-render_0001.png ];
     then
     
cd $mypath/preview-temp/
sleep 1  #behövs lite paus annars missar omnumreringen filerna...
(
 for f in * 
  do
    currprefix=${f%[0-9][0-9][0-9][0-9]*}
    test "x$prevprefix" = "x$currprefix" && ((i++)) || i=1
   mv -i "$f" "${f/[0-9][0-9][0-9][0-9]/$(printf %04d $i)}"
    prevprefix=$currprefix
  done
)
cd ..

     fi

##### Render image sequence and audio to video file. #####
ffmpeg  -qmax 5 $tempaudio -i $mypath/preview-temp/preview-render_%04d.png -vcodec mpeg4 -r $fps -y preview-render.mp4

##### Clean and make tidy. #####
rm -rf $mypath/preview-temp/

echo "Animation preview rendered!"| zenity --title AS-preview-render --text-info
Användarvisningsbild
HenrikAn
Inlägg: 1436
Blev medlem: 17 jun 2006, 21:39
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Hägersten

Re: Vill någon korr.läsa mitt skript?

Inlägg av HenrikAn »

Gtkdialog verkar ganska enkelt och användbart, lite som "gtk-zenity"
Verkar inte finnas med i ubuntu från början... Gjorde det inte det förut?
http://xpt.sourceforge.net/techdocs/lan ... serManual/
The Net interprets censorship as damage and routes around it.
- John Gilmore
palle-kuling
Inlägg: 466
Blev medlem: 16 apr 2008, 21:54
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Vill någon korr.läsa mitt skript?

Inlägg av palle-kuling »

Tyvärr kan jag inte ge dig något bättre råd än att använda t.ex. python och glade/gtk eller kanske wxpython om du vill ha bättre interaktivitet mellan program och GUI än vad zenity kan erbjuda.
Ledsen om svaret inte är vad du förväntade dig. Kanske någon kan komma med bättre råd?
MER MAKT TILL MIG! JAG BESTÄMMER!
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Re: Vill någon korr.läsa mitt skript?

Inlägg av rylleman »

Gtkdialog verkar vara ungefär vad jag är ute efter, hyfsat enkelt att sätta ihop enka GUIn.
Jag återkommer när jag experimenterat lite.
Skriv svar

Återgå till "Programmering och webbdesign"