Ausgabe auswerten und reagieren

R

rabadag

Mitglied
Hallo Forum..

hab mal wider ein kleines prob wo ich nicht so recht weis, wie ich das anstellen muss.

Volgendes versuche ich zu realisieren.

mittels eines tools lese ich die Streams eines MKV Fils aus. die ausgabe siht so aus.

Code:
SmartLabs tsMuxeR.  Version 1.7.3(b) http://www.smlabs.net
Track ID:    1
Stream type: H.264
Stream ID:   V_MPEG4/ISO/AVC
Stream info: Profile: High@5.1  Resolution: 1280:544p  Frame rate: 23.976
Stream lang: ger
Track ID:    2
Stream type: AC3
Stream ID:   A_AC3
Stream info: Bitrate: 224Kbps Sample Rate: 48KHz Channels: 2
Stream lang: ger
Track ID:    3
Stream type: AC3
Stream ID:   A_AC3
Stream info: Bitrate: 640Kbps Sample Rate: 48KHz Channels: 6
Stream lang: eng

Diese Liste kann aber auch anders aussehen und hat z.b nur ein audio Stream.

nun möchte ich mittels einer If schleicfe die ausgabe auswerten.

Code:
for i in `find $1 -name '*.rar'`
do

DIRPATH=`dirname "$i"`
VNAME=`basename $DIRPATH`
FNAME=`basename $i`

  if [[ "$FNAME" == *.mkv ]] ; then
  MKV=`find $DIRPATH -name '*.mkv'`
  MKVFILES=`basename $MKV`
  TESTMKV=`/usr/bin/mkvinfo $MKV | grep 'Codec ID' | grep DTS`

   

if [[ "$TESTMKV" == *A_DTS ]] ; then
	 MKVDTS="1"
	 TSMUX="0"
	 else
	 TSMUX="1"
	 MKVDTS="0"
fi
	 
fi  

done

Das Funktioniert soweit auch ganz gut. nur dumm ist, das der TsMuxer ein meta File benötige wo die Streams drin stehen.

z.b
Code:
V_MPEG4/ISO/AVC, ./pfad-zum-file.mkv, insertSEI, contSPS, track=1, lang=ger
A_DTS, ./pfad-zum-file.mkv, track=2, lang=ger
A_AC3, ../pfad-zum-file.mkv, track=4, lang=ger


Den Pfad in das metafile einzutragen ist nicht das prob, sondern die anderen Informationen die benötig werden richtig zu setzen.

track=? lang=?

Es kommt auch for, das es nur einen oder merere streams in einem file hat.

Ich dachte mit ich schreibe jede zeile einzeln in das file, wenn bestimmte Kriterien passen.

Aber wie kann ich aus der Ausgabe die einzelnen Tracks von der liste trennen und Track ID; Stream lang: Stream ID: auswerten und dementsprechend das meta File schreiben.
 
was du suchst ist glaub ich awk

Ich kenne mich mit AWK leider nicht aus..

Kannst du mir ein beispiel Anhang diesem Array Inhalt machen bitte.
Code:
   TESTMKV1=`/usr/bin/tsMuxeR $MKVFILE`
   ARRAY=($TESTMKV1)

###########Array Inhalt ##############
SmartLabs tsMuxeR.  Version 1.7.3(b) http://www.smlabs.net
Track ID:    1
Stream type: H.264
Stream ID:   V_MPEG4/ISO/AVC
Stream info: Profile: High@4.1  Resolution: 1280:544p  Frame rate: 23.976
Stream lang: eng
Track ID:    2
Stream type: DTS
Stream ID:   A_DTS
Stream info: Bitrate: 1536Kbps  Sample Rate: 48KHz  Channels: 6
Stream lang: ger
Track ID:    3
Stream type: DTS
Stream ID:   A_DTS
Stream info: Bitrate: 1536Kbps  Sample Rate: 48KHz  Channels: 6
Stream lang: eng
Track ID:    4
Stream type: AC3
Stream ID:   A_AC3
Stream info: Bitrate: 448Kbps Sample Rate: 48KHz Channels: 6
Stream lang: und
Track ID:    5
Stream type: AC3
Stream ID:   A_AC3
Stream info: Bitrate: 448Kbps Sample Rate: 48KHz Channels: 6
Stream lang: und
###################

if [[ ${ARRAY[*]} != " " ]] ; then
     
fi

wie gesagt ich muss die Tracks von einander trennen und auswerten wie oben beschrieben, wobei die anzahl der Tracks unterschiedlich sind.
 
sofern ich deine Anfrage richtig verstanden habe

wenn ich das richtig verstehe gibt es immer einen Parameter ID und diese ID hat z.b. eigenschaften lang und track, die Du zuordnen und darauf reagieren möchtest?

Die Atributanzahl ist aber nicht stereotyp?

ich würde diese Date wie du sagtest in einzelne splitten.

PHP:
count=0
while read a 
do
echo $a|grep ID
return=$?

if test $return -eq 0 
then
let count=$count+1
touch file_$count.text
echo $a >> file_$count.text
else
echo $a >> file_$count.text
fi
done <deineDatei

So ungefähr müsste er deine Datei in einzelne splitten immer beginnend mit ID

und jetzt könnte man sowas machen
PHP:
ls -ltr *.text > Datei2

while read a
do
ID=$(cat $a|grep ID|awk -F ":"  {'print $2'})
LANG=$(cat $a|grep lang|awk -F ":"  {'print $2'})
IF test $ID = "xxxx" && test $LANG="YYYY"
then
Tu irgendwas
else
tu was anderes oder nix
fi
done < Datei2
 
Zuletzt bearbeitet:
He super das funktioniert.

Besten Dank für den ansatz.

nur hab ich noch ein kleines prob mit den lehrschlägen nach :

wie kriege ich die noch weg?

a="Stream ID: V_MPEG4/ISO/AVC"

ID=$(cat $a |grep "Stream ID" |awk -F ":" {'print $2'})

Ergebnis ergibt = " V_MPEG4/ISO/AVC"

und

a="Stream info: Profile: High@4.1 Resolution: 1280:544p Frame rate: 23.976"

FORMAT=$(cat $a |grep "Stream info" |awk -F ":" {'print $3'})
ergebnis = " High@4.1 Resolution"

Also hab da noch Leerschläge drin..
 
sed s/" "//g

also:

ID=$(cat $a |grep "Stream ID" |awk -F ":" {'print $2'}|sed s/" "//g)
 

Ähnliche Themen

Debian 6 Stable: ffserver "Ungültiger Maschinenbefehl"

eine Schleife einbauen.

dovecot und postfix Konfiguration Problem

Leerer Parameter in Funktion

Ubuntu X / dbus problem

Zurück
Oben