ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
kangaroo72 schrieb: | mediainfo -f "Film.bla" | grep "File name"
|
ergibt
File name : Predators (2010)
| mediainfo -f "Film.bla" | grep "File name" | grep "Audio_Language_List"
|
Würde "File name : Predators (2010)" nach Audio_Language_List durchsuchen, was es nicht finden kann, weil es in der Zeilt nicht vorkommt.
Wenn du mehrere einzelne Zeilen möchtest, müsstest du die einzeln greppen.
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: Zähle...
|
Gut - dann zurück zum Script 👍 Dann wär's wohl am Sinnvollsten, das Script nach Audio_Language_List umzubauen ...
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Ja. Schreib das mal um, so dass es alle Filme nach der Zeile durchsucht und diese ausgibt. Solltest du hinbekommen. Danach machen wir die Bedingung wieder rein ☺
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: Zähle...
|
Also der hier gibt mir nur Errors ... 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #!/bin/bash
if [ $# -eq 0 ]
then
echo "Kein Pfad angegeben."
echo "Benutzung: $0 /Pfad/zu/Dateien"
exit 0
fi
find "$1" -name *.mkv -print0| while IFS= read -r -d $'\0' line
do
audioStreams=$(mediainfo -f "$line" | grep "Audio_Language_List" | awk {'print $6'})
if [ $audioStreams -gt 1 ]; then
echo "$line enthält $audioStreams Tonspuren"
# echo -n "Details: $(ls -lha "$line")"
# echo " "
fi
done
|
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: 123
|
Nich hauen ... Aber mit scripten bin ich noch gar nicht so firm ... Will mir aber noch'n Buch kaufen 👍
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
kangaroo72 schrieb: Also der hier gibt mir nur Errors ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | #!/bin/bash
if [ $# -eq 0 ] #Diese Zeile prüft, ob ein Argument übergeben wurde. Theoretisch leicht auszuhebeln... Wenn nichts übergeben wurde kommt:
then
echo "Kein Pfad angegeben." #das hier
echo "Benutzung: $0 /Pfad/zu/Dateien" #und das hier als Ausgabe
exit 0 #und das Script beendet sich "ohne Fehler"
fi
find "$1" -name *.mkv -print0| while IFS= read -r -d $'\0' line #für jeden Treffer in der find-Suche kopiere den Fund nach "line" und
do
audioStreams=$(mediainfo -f "$line" | grep "Audio_Language_List" | awk {'print $6'}) #Belege die Variable audioStreams mit der Ausgabe von
#mediainfo -f Dateifund # gefiltert nach Audio_Language_List und dann durch awk nach dem sechsten Teil der Ausgabe gefiltert.
#für deinen Fall kommt da sicher keine Nummer raus, sondern ein string mit Namen. Ergo kann
if [ $audioStreams -gt 1 ]; then #nicht funktionieren, da es eine Zahl voraussetzt
echo "$line enthält $audioStreams Tonspuren"
# echo -n "Details: $(ls -lha "$line")"
# echo " "
fi
done
|
PS: Schlagen tu ich keinen. Bin doch auch noch Anfänger. Und das seit Jahrzehnten ☺
Lösch mal alles zwischen "do" und "done" und versuch es stückchenweise zu erarbeiten und probier aus, was dabei rauskommt. Wenn du dir zwischendurch Inhalte von Variablen ausgeben lassen möchtest, um zu sehen, was der da eigentlich macht, kannst du das mit dem echo Befehl tun. Beispiel: | find "$1" -name *.mkv -print0| while IFS= read -r -d $'\0' line #für jeden Treffer in der find-Suche kopiere den Fund nach "line" und
do
echo "$line"
done
|
Würde dir jeden Fund ausgeben, so wie es danach im Script weiterverarbeitet werden würde.
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: 123
|
Also ich schaff's nicht ...
Ich bekomm maximal eine komplette Liste der Videos ...
Aber nichts bzgl. der Streams. Und was meinst Du mit filtern nach dem 6. Teil der Ausgabe??
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
| find "$1" -name *.mkv -print0| while IFS= read -r -d $'\0' line
do
echo $(mediainfo -f "$line" | grep Audio_Language_List)
done
|
Normal würde ich jetzt fragen, wie dein Code aussieht...aber versuchs mal damit. Und ein Buch kaufen ist ne gute Sache, Tutorials auch. Viel wichtiger ist aber die Programme, die man verwendet zu verstehen. Also find, grep, mediainfo. Wenn man sein Vorhaben dann im Terminal hinbekommt, ist es nicht mehr so schwer daraus ein Script zu basteln.
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: 123
|
Wir nähern uns ... ich bekomm die Filmliste, und Dein Script liefert die Ausgabe der Streams (aber ohne Filmtitel).
Bekommen wir das zusammen? 😀
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: 123
|
Hier meine Variante ... 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #!/bin/bash
if [ $# -eq 0 ]
then
echo "Kein Pfad angegeben."
echo "Benutzung: $0 /Pfad/zu/Dateien"
exit 0
fi
find "$1" -name *.mkv -print0| while IFS= read -r -d $'\0' line
do
echo $(mediainfo -f "$line" | grep "File name")
echo $(mediainfo -f "$line" | grep Audio_Language_List)
done
|
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: 123
|
So sieht's top aus ... | echo $(mediainfo -f "$line" | grep "File name") $(mediainfo -f "$line" | grep Audio_Language_List)
|
Jetzt müssten nur noch die raus, welche NUR deutsch sind ...
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Ich kann es nicht ausprobieren, sollte aber funktionieren. Optimieren kannst du das ganze mit egrep (oder grep -E). Dann muss mediainfo nicht zweimal für eine Datei laufen. | VAR=$(mediainfo -f "$line" | egrep "File name|Audio_Language_List")
echo $VAR
|
Zum Auslesen der Sprachen brauchen wir also eine Abfrage. Dazu verwenden wir wildcards (Platzhalter). | if [ "$VAR" == "*German*" ] #sucht nach "egal was"german"egal was" im string VAR
then
echo "Deutsche Sprache enthalten."
fi
|
|
kangaroo72
(Themenstarter)
Anmeldungsdatum: 20. Mai 2014
Beiträge: 123
|
Ich hätte es jetzt so gemacht, um Englisch zu suchen ... 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #!/bin/bash
if [ $# -eq 0 ]
then
echo "Kein Pfad angegeben."
echo "Benutzung: $0 /Pfad/zu/Dateien"
exit 0
fi
find "$1" -name *.mkv -print0| while IFS= read -r -d $'\0' line
do
VAR=$(mediainfo -f "$line" | egrep "File name|Audio_Language_List")
echo $VAR
if [ "$VAR" == "*English*" ] #sucht nach "egal was"english"egal was" im string VAR
then
echo "Englische Sprache enthalten."
fi
done
|
Bin jetzt aber erstmal weg vom Rechner. Aber 1000 Dank nochmals - Bis in Kürze
|