Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
This post has been edited 1 times, last edit by "mhunstig" (Jan 17th 2005, 8:48pm)
Quoted
Ok, ich hab jetzt vdr-requant-list.sh in mein vdrconvert Queuemanagement integriert. Was ich aber noch nicht herausgefunden hab, wie kann ich jetzt vdr-requant den Faktor über die Commandline mit auf den weg geben?
Quoted
Original von gonz
es wird in vdr-requant-list.sh fuer jede Aufnahme "vdr-requant.sh after pfad/zu/video"
ausgefuehrt. Bei dem Parameter after wird von vdr-requant.sh der DEFAULT_FACTOR
verwendet (normal 1.3), den Du im Script selbst aendern kannst.

Das hatte ich von dem Parameter -s auch erwartet. Leider tut er das nicht, sondern gibt mir genau die Zeilen von du -c zurück, die ich _nicht_ haben will.
Quoted
du -s (anstatt du -c) bringt dir gleich die eine Zeile, die du dir mit "grep vdr" am Ende aufwendig baust.
Guter Tipp, hab ich gleich umgesetzt.
Quoted
Wenn du noch einen gestarteten Prozess sparen willst, und nebenbei die gesuchte Dateigröße auch gleich auf einer Variablen haben möchstest, empfehle ich folgende Zeile:
read SIZE NAME < <(du -s ???.vdr)
Quoted
Entsprechend bekommt man mit
read DUMMY BIT_RATE < <(vdrsync.pl -audio-only -i ???.vdr | grep Bitrate)
die gesuchte Bitrate auf $BIT_RATE.
Scheint zu stimmen. Ich habe es an drei Aufnahmen ausprobiert und es hat 36,32,39 Sekunden mehr ausgegeben, als der VDR anzeigt. Wahrscheinlich steht noch irgendwas anderes in der index.vdr. Ich ziehe jetzt einfach immer 35 Sekunden ab, das reicht an Genauigkeit locker.
Quoted
Zum eigentlichen Thema: wenn ich es richtig verstanden habe steht in index.vdr für jeden Frame ein Record der die Nummer des eigentlichen .vdr Files, die Art des Frames und den Offset an dem der Frame im File zu finden ist enthält. D.h. die Länge des Files ist direkt proportional zu Länge des Films. Die Recordgröße ist 8 Byte (ein int, 2 char, ein short als Filler).
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 |
IDX=1
CUMULATED_BIT_RATE=0
while read DUMMY BIT_RATE; do
BIT_RATES[$IDX]="$BIT_RATE"
CUMULATED_BIT_RATE=$(( ${BIT_RATES[$IDX]} + $CUMULATED_BIT_RATE ))
IDX=$(( $IDX + 1 ))
done < <(vdrsync.pl -audio-only -i ???.vdr | grep Bitrate)
for i in ${BIT_RATES[@]}; do
echo $i;
done
echo "=$CUMULATED_BIT_RATE"
|
This post has been edited 1 times, last edit by "ralf1970" (Feb 18th 2005, 8:47am)
Quoted
Original von mhunstig
Ich habe keine Ahnung, wie ich an die Länge der Aufnahmen komme. Wie es in C geht, steht wohl hier, aber mit C kenne ich mich garnicht aus, außerdem soll es ja möglichst ein Shellskript bleiben. Gibt es irgendein Kommandozeilenprogramm, dass die Länge einer Aufnahme aus der index.vdr holt? Da müsste sie doch eigentlich drinstehen.
Quoted
Original von Hulk
Ich bin gerade auf den Gedanken gekommen, das man doch nur index.vdr verwendet werden muss...
Den die Datei speichert die Byte Positionen aller Frames ab.
lt. VDR Quellcode
Anzahl der Frames = Dateigröße von index.vdr / sizeof(struct tIndex) - 1
also => Anzahl der Frames = Dateigröße von index.vdr / 8
Filmlänge = Frames / FRAMESPERSEC (25)
Damit passen die Zeiten :
(pearl)
![]()
Source code
1 2 3 4 5 6 7 8# diskusage aufrufen für Duration if($obj->{diskusage}) { my $vdir = dirname($files[0]); my $cmd = sprintf("%s -Lbs %s/index.vdr", $obj->{diskusage}, $vdir); my $dur = `$cmd`; my ($bytes) = $dur =~ /^(\d+)/; $status->{duration} = ($bytes / 8) / 25; }
|
|
Source code |
1 |
BRINPUT=$( vdrsync.pl -script-output -i $2/001.vdr | grep Bitrate | head -n 1 | awk -F: '{print $2 }' | sed -n '$ p' )
|
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
read FILESIZE DUMMY < <(du -c $2/???.vdr | grep -v vdr)
#read INDEXSIZE DUMMY < <(du -b $2/index.vdr) # Schöner, aber führt auf meinem System zu einem Fehler
INDEXSIZE=$(du -b $2/index.vdr | awk -F' ' '{print $1}') # Bewirkt das gleiche wie vorhergegangene Zeile.
SECONDS=$(($INDEXSIZE / ( 25 * 8 ) -35))
# Code von Ralf1970 - Danke
IDX=1
BRAUDIOx2=0
while read DUMMY BIT_RATE; do
BIT_RATES[$IDX]="$BIT_RATE"
BRAUDIOx2=$(( ${BIT_RATES[$IDX]} + $BRAUDIOx2 ))
IDX=$(( $IDX + 1 ))
done < <(vdrsync.pl -audio-only -i $2/???.vdr | grep Bitrate)
BRAUDIO=$(($BRAUDIOx2/2))
BRINPUT=$(echo "scale=0; $FILESIZE/$SECONDS*8-$BRAUDIO/2000" | bc )
|


This post has been edited 3 times, last edit by "georg3003" (Jan 27th 2006, 6:23pm)