-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkutlist.sh
283 lines (259 loc) · 11.8 KB
/
kutlist.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
#!/bin/bash
# kutlist.sh
Stand="02.06.2018"
# Konfiguration
Kommentar="Mit kutlist.sh erstellt" # Standard Kommentar, kann jeweils noch ergaenzt oder ersetzt werden
ConvertUTF=1 # Bei Problemen mit Umlauten
Zeige_fertige_Cutlist_am_Ende=0 # Moechtest Du die Rohdaten vorm Upload angezeigt bekommen
Cutlist_hochladen_Frage=0 # 0 laedt die cutlist ohne zu fragen hoch
Loeschen_der_fertigen_Cutlist=0 # Braucht man die noch wenn der Film eh schon geschnitten ist???
# (Zur Not hat Cutlist.at ja eine Kopie :-))
if [ ! -e ~/.cutlist.at ] ; then # pers. URL schon gespeichert ?
CutListAT="http://www.cutlist.at" # Nein -> Standard URL verwenden
else
CutListAT=$(cat ~/.cutlist.at | head -n 1) # Ja -> URL auslesen
fi
# Funktionen
checkSystem () { # Ueberpruefe ob alle noetigen Programme installiert sind
if ! type kdialog > /dev/null 2>/dev/null ; then
echo -e "\nKdialog ist nicht verfuegbar.\nBitte installiere es!"
exit 1
fi
if type avidemux2_gtk > /dev/null 2>/dev/null ; then avidemux="avidemux2_gtk"
elif type avidemux2 > /dev/null 2>/dev/null ; then avidemux="avidemux2"
else avidemux="avidemux"
fi
if ! type $avidemux > /dev/null 2>/dev/null ; then
kdialog --error "Avidemux ist nicht verfuegbar.\nBitte installiere es!"
exit 1
fi
if ! type curl > /dev/null 2>/dev/null ; then
kdialog --error "Curl ist nicht verfuegbar.\nBitte installiere es!"
exit 1
fi
}
writeCutlistHeader () { # Kopfdaten fuer die Cutlist schreiben
cat << HEADER > $2
[General]
Application=kutlist.sh
Version=0.2
comment1=Diese Cutlist unterliegt den Nutzungsbedingungen von cutlist.at (Stand: 14.Oktober 2008)
comment2=http://cutlist.at/terms/
ApplyToFile=$1
OriginalFileSizeBytes=$filesize
FramesPerSecond=25
IntendedCutApplication=Avidemux
IntendedCutApplicationVersion=2.5.4
IntendedCutApplicationOptions=
NoOfCuts=$number_of_cuts
[Info]
Author=$author
RatingByAuthor=$rating
EPGError=$EPGError
ActualContent=$ActualContent
MissingBeginning=$MissingBeginning
MissingEnding=$MissingEnding
MissingAudio=$MissingAudio
MissingVideo=$MissingVideo
OtherError=$OtherError
OtherErrorDescription=$OtherErrorDescription
SuggestedMovieName=$suggest
UserComment=$comment
HEADER
}
writeCutlistSegment () { # Schnitte in die Cutlist schreiben
echo "[Cut" $1 "]" | tr -d " " >> $3
echo "Start=" $(expr $(echo $2 | cut -d"," -f2)*0.04 | bc) | tr -d " " >> $3
echo "StartFrame=" $(echo $2 | cut -d"," -f2) | tr -d " " >> $3
echo "Duration=" $(expr $(echo $2 | cut -d"," -f3 | cut -d")" -f1)*0.04 | bc) | tr -d " " >> $3
echo "DurationFrames=" $(echo $2 | cut -d"," -f3 | cut -d")" -f1) | tr -d " " >> $3 #" Geany workaround
}
showInfoDialog () { # Kurze Anleitung zum Umgang mit Kutlist und Avidemux schreiben
kdialog --title "Kutlist (2/6): Film schneiden" --msgbox "ACHTUNG !!!\n Dieses Fenster erst dann mit OK schliessen wenn folgende vier Schritte durchgefuehrt wurden! \n\n 1. Du musst die Teile des Films markieren, die du herausschneiden möchtest. Also die Teile die du nicht mehr haben möchtest (Werbung etc.).\n\n Die Verwendung von Avidemux ist relativ einfach und intuitiv. Deshalb nur einige wichtige Tipps:\n\n Am einfachsten kann man sich mithilfe der Nummernblocktasten im Film bewegen. 4 und 6 springt dabei zwischen Einzelframes hin und her, wohingegen 2 und 8 sich zwischen den einzelnen I-Frames bewegt. Pos 1 springt ganz zum Anfang, Ende ganz zum Ende. Auswahlen werden mit Button A (Startframe) und Button B (Endframe) getroffen. Alternativ kann man auch die rechteckigen Klammern benutzen. Will man eine Auswahl entfernen, betätigt man Entf. Dabei wird die gesamte Auswahl inklusive Startframe A herausgeschnitten. Nur das letzte Frame - Endframe B bleibt erhalten. \n\n 2. Wenn man damit fertig ist waehlt man noch File -> Save Project (nicht Save Project as!) aus dem Menu (Wichtig damit die Schnittliste auf Cutlist.at geladen werden kann). \n\n 3. Danach kann man sich den geschnittenen Film für sich selbst abspeichern. Dieses geht mit File -> Save -> Save Video \n Idealerweise wählt man hier sinnige Namen für die Filme oder Sendungen wie z.B. fuer die Datei 'James_Bond_007_Im_Angesicht_des_Todes_07.06.09_22-55_ard_125_TVOON_DE.mpg.avi' den Dateinamen 'James Bond - Im Angesicht des Todes.avi' oder für 'King_of_Queens_07.06.25_18-15_kabel1_30_TVOON_DE.mpg.avi' den Namen '07x10 King of Queens - Spanische Doerfer.avi' und kopiert sich diesen Namen bei der Gelegenheit gleich noch in die Zwischenablage damit man ihn anschliessend fuer den vorgeschlagenen Dateinamen und/oder Kommentar der Cutlist wieder verwenden kann. Umlaute sollten vermieden werden. \n\n 4. Jetzt sollte man Avidemux wieder beenden und die folgenden Fragen zur Cutlist beantworten! \n\n "
}
writeAvidemuxProject () { # Schreibe Avidemux Projekt Datei
cat << ADMP > $2
//AD
var app = new Avidemux();
app.load("/$1");
app.rebuildIndex();
//End of script
ADMP
}
uploadCutlist () { # Schreibe Avidemux Projekt Datei
if [ $ConvertUTF -eq 1 ] ; then
iconv -f utf-8 -t iso-8859-1 $1 --output $1.conv
mv $1.conv $1
fi
curl -F userfile[]=@$1 -F MAX_FILE_SIZE=10000000 -F confirm=true -F type=blank -F userid=$2 -F version=1 "$CutListAT/index.php?upload=2"
if [ $? -eq 0 ] ; then
kdialog --title "$1" --passivepopup "Erfolgreich zu Cutlist.at hochgeladen" 5 &
else
# kdialog --title "$1" --passivepopup "cutlist.at ist nicht erreichbar, verwende cutlist.de !" 5 &
# curl -F userfile[]=@$1 -F MAX_FILE_SIZE=10000000 -F confirm=true -F type=blank -F userid=$2 -F version=1 "www.cutlist.de/index.php?upload=2"
# if [ $? -eq 0 ] ; then
# kdialog --title "$1" --passivepopup "Erfolgreich zu Cutlist.de hochgeladen" 5 &
# else
Cutlist_diesmal_nicht_loeschen=1
# fi
fi
echo
}
cutlistDFS () { # Cutlist vom Server loeschen
userid=$(cat ~/.kutlist.rc | tail -n 1)
cutlistdfs=$(echo $1 | rev | cut -d"=" -f1 | rev)
wget -U "kutlist.sh/$Stand" -q -O - "$CutListAT/delete_cutlist.php?cutlistid=$cutlistdfs&userid=$userid&version=1"
echo
}
help () {
cat << END
Aufruf:
$0 [options] files
Moegliche Optionen:
-dfs Cutlist vom Server loeschen
z.B.: kutlist.sh -dfs http://cutlist.at/getfile.php?id=123456
oder kutlist.sh -dfs 123456
-url persönliche Cutlist.at URL speichern
(-url http://www.cutlist.at/user/0123456789abcdef
ohne letzten Schraegstrich ! )
(c) bowmore@otrforum $Stand
END
exit 1
}
# Start
while [ "$1" != "${1#-}" ] ; do # solange der naechste parameter mit "-" anfaengt...
case ${1#-} in
dfs) cutlistDFS $2; exit 0;;
url) shift;echo $1 > ~/.cutlist.at;exit 0;;
*) help; exit 1;;
esac
done
checkSystem 1 # Teste das System
if [ $# -eq 0 ] ; then # Parameteruebergabe ?
wahl=`kdialog --title "Kutlist (1/6): Den zu schneidenden Film auswaehlen" --getopenfilename ~/download_video/edit/ "*.mpg.avi | mpg.avi von OTR"`
if [ $? -eq 1 ] ; then # Skript_Ende bei Abbruch
exit 1
fi
else
# sonst Parameter verarbeiten
wahl=${@:-*}
fi
for auswahl in $wahl ; do # Für alle Parameter das Skript durchlaufen
if [ `echo $auswahl | grep / | wc -l` -eq 0 ] ; then
auswahl=$PWD/$auswahl
fi
avidemux_project=$(echo $auswahl | sed 's/.avi*./.js/g' -) # Variablen bestimmen
cutlist=$(echo $auswahl | sed 's/.avi*./.cutlist/g' -)
filesize=$(ls $auswahl -l | awk '{ print $5 }')
file=$(echo $auswahl | rev | cut -d"/" -f1 | rev)
cutfile=$(echo $cutlist | rev | cut -d"/" -f1 | rev)
writeAvidemuxProject $auswahl $avidemux_project # Avidemux im Hintergrund (!) starten
$avidemux --force-smart --run $avidemux_project 1>/dev/null 2>/dev/null &
# Versatz-Pause, damit das Info-Fenster
sleep 8 # moeglichst im Vordergrund ist
while [ $(ps -C $avidemux >/dev/null && echo $?) ]; do # Info Dialog Anzeigen
showInfoDialog $1 # solange Avidemux laeuft
done
number_of_cuts=`grep -c "app.addSegment" $avidemux_project` # Wie viele Schnitte gibt es?
if [ $number_of_cuts -eq 0 ] ; then # Abbruch bei Null Schnitte
kdialog --error "Du hast in Avidemux keine Schnitte definiert,\n oder vergessen diese zu speichern (File -> Save Project)\nDann gibt es hier nichts mehr zu machen!"
rm $avidemux_project # temporaeres Datei loeschen
exit 1
fi
# Bewertungs-Dialog
rating=`kdialog --title "Kutlist (3/6): Film Bewerten" \
--menu "Bitte eine Bewertung für $file abgeben:" \
0 "[0] Test (schlechteste Wertung)" \
1 "[1] Anfang und Ende grob geschnitten" \
2 "[2] Anfang und Ende geschnitten" \
3 "[3] Schnitt ist annehmbar, Werbung entfernt" \
4 "[4] Framegenau, Werbung entfernt" \
5 "[5] Perfekt" \
9 "keine Cutlist erstellen"`
if [ $? -eq 1 ] ; then # Skript_Ende bei Abbruch
exit 1
elif [ $rating -eq 9 ] ; then # Abbruch sofern keine Cutlist
exit 2 # erstellt werden soll
fi
# Zustands-Dialog
infos=`kdialog --title "Kutlist (4/6): Information zum Film" \
--menu "Information fuer $file:" \
1 "Alles in Ordnung" \
2 "Falscher Inhalt / EPG-Fehler" \
3 "Fehlender Anfang" \
4 "Fehlendes Ende" \
5 "Tonspur fehlt" \
6 "Videospur fehlt" \
7 "Sonstiger Fehler"`
if [ $? -eq 1 ] ; then # Skript_Ende bei Abbruch
exit 1
fi
EPGError="0" # Setze zunaechst einmal
ActualContent="" # neutrale Werte fuer
MissingBeginning="0" # die Cutlist
MissingEnding="0"
MissingAudio="0"
MissingVideo="0"
OtherError="0"
OtherErrorDescription=""
comment=""
case $infos in # Setze nun spezifische Werte
2) EPGError="1";ActualContent=`kdialog --title "Kutlist (4/6): Information zum Film" \
--inputbox "Tatsaechlicher Inhalt von $file:"`;;
3) MissingBeginning="1";;
4) MissingEnding="1";;
5) MissingAudio="1";;
6) MissingVideo="1";;
7) OtherError="1";OtherErrorDescription=`kdialog --title "Kutlist (4/6): Information zum Film" \
--inputbox "Fehler Beschreibung zu $file:"`;;
esac
# Vorschlag generieren
# sugfile=`echo $file | rev | cut -d"-" -f2 | cut -d"." -f3 | cut -d"_" -f2,3,4,5,6,7,8,9 | rev | tr "_" " "`
# Vorschlag abfragen
suggest=`kdialog --title "Kutlist (5/6): Filmname vorschlagen" \
--inputbox "Vorschlag fuer den Dateinamen: (Abbruch fuer keinen Vorschlag!)" ""`
if [ $? -eq 1 ] ; then # kein Vorschlag bei Abbruch
suggest=""
fi
# Kommentar abfragen
comment=`kdialog --title "Kutlist (6/6): Kommentar zum Film" \
--inputbox "Kommentar zu $file:" ""`
if [ ! -e ~/.kutlist.rc ] ; then # Nickname schon gespeichert ?
author=`kdialog --title "Kutlist: Nickname eingeben" --inputbox "Autor: (wird in /home/user/.kutlist.rc gespeichert)" "Kutlist"`
echo $author > ~/.kutlist.rc
uptime | sha1sum | tr "[:lower:]" "[:upper:]" | cut -b 1-20 >> ~/.kutlist.rc # UserId generieren
userid=$(cat ~/.kutlist.rc | tail -n 1) # Nein -> Abfrage und speichern
else
author=$(cat ~/.kutlist.rc | head -n 1) # Ja -> Namen auslesen
userid=$(cat ~/.kutlist.rc | tail -n 1)
fi
cuts=`grep "app.addSegment" $avidemux_project`
writeCutlistHeader $file $cutlist # Berechne Schnittdaten
count=0 # fuer die Cutlist
for cut in $cuts ; do # und schreibe
writeCutlistSegment $count $cut $cutlist # die endgueltige
count=$(expr $count + 1) # Cutlist
done
rm $avidemux_project # temporaeres Datei loeschen
if [ $Zeige_fertige_Cutlist_am_Ende -eq 1 ] ; then # Zeige fertige Cutlist
kdialog --textbox $cutlist 550 800
fi
# Upload zu cutlist.at
if [ $Cutlist_hochladen_Frage -eq 1 ] ; then
kdialog --title "Kutlist" --yesno "Soll die erstellte Cutlist\n zu Cutlist.at geladen werden ?"
if [ $? -eq 0 ] ; then
uploadCutlist $cutlist $userid
Cutlist_diesmal_nicht_loeschen=0
else
Cutlist_diesmal_nicht_loeschen=1
fi
else # Upload-Frage = 0
uploadCutlist $cutlist $userid # standardmäßig uploaden
Cutlist_diesmal_nicht_loeschen=0
fi
if [ $Loeschen_der_fertigen_Cutlist -eq 1 ] && [ $Cutlist_diesmal_nicht_loeschen -ne 1 ] ; then
rm $cutlist # Cutlist lokal loeschen
Cutlist_diesmal_nicht_loeschen=0
fi
done # Ende der Parameter Schleife
exit 0