Moin moin,
ich hab' 'ne 1,5 GB große .vdr-Datei und möchte diese in mehrere höchstens 700 MB große Dateien aufteilen, wie mache ich das, geht das überhaupt und wenn ja, was muss ich beachten.
Gruß
Merten
Moin moin,
ich hab' 'ne 1,5 GB große .vdr-Datei und möchte diese in mehrere höchstens 700 MB große Dateien aufteilen, wie mache ich das, geht das überhaupt und wenn ja, was muss ich beachten.
Gruß
Merten
ZitatOriginal von neves
ich hab' 'ne 1,5 GB große .vdr-Datei und möchte diese in mehrere höchstens 700 MB große Dateien aufteilen, wie mache ich das, geht das überhaupt und
Ist doch ganz einfach: Schnittmarken am Anfang und in der Mitte setzen, schneiden, auf der Konsole umbenennen. Schnittmarke am Anfang löschen und am Ende setzen, schneiden.
Auf der Konsole den zweiten Schnitt in das Verzeichnis des ersten als 002.vdr reinkopieren und anschließen genindex laufen lassen. Fertig.
man split:
split - split a file into pieces
ZitatOriginal von foobar42
split - split a file into pieces
Da hab' ich auch zuerst gedacht, weiß aber nicht, ob der VDR damit klar kommt, wenn ein Dateiwechsel mitten im Frame ist...
Dateigröße von 700 MB in den Einstellungen einstellen, und einfach mal schneiden.
Das ging ja schnell. Aber ich war, glaub ich, nicht ausführlich genug.
Ich möchte das ganze in ein Script einbauen. Das müsste also irgendwie von der Konsole machbar sein. Was split angeht, hab' ich den gleichen Einwand wie knebb, außerdem hat LinVDR kein split an Bord.
Warum nicht gleich in 700 MB Stücken aufnehmen?
Dazu gibts ja die Einstellung im VDR.
ZitatOriginal von wilderigel
Warum nicht gleich in 700 MB Stücken aufnehmen?
Dazu gibts ja die Einstellung im VDR.
Die wird er abe rwahrscheinlich erst entdeckt haben, als er schon 500GB aufgenommen hatte
ZitatWarum nicht gleich in 700 MB Stücken aufnehmen?
Dazu gibts ja die Einstellung im VDR.
Darum geht's mir doch gar nicht. Ich hätte nur gern gewusst, ob das geht, und wenn ja, wie. Es ist auch nicht wirklich wichtig, es geht mir allein um die Möglichkeit.
Moin moin,
so, ich hab' nun herausgefunden, dass ich direkt nach einem GOP teilen muss. Weiß vielleicht jemand wie ich herausfinde wo diese sind?
Gruß
Merten
ZitatAlles anzeigenOriginal von neves
Moin moin,
so, ich hab' nun herausgefunden, dass ich direkt nach einem GOP teilen muss. Weiß vielleicht jemand wie ich herausfinde wo diese sind?
Gruß
Merten
Keine Ahnung, aber GOP heißt "Group of Pictures" und ist daher ins Deutsche übernommen eher als "weiblich" zu betrachten
Auf jeden Fall ist die Position ja auch direkt vor dem nächsten I-Frame, müsst man also nur rausfinden, wie man I-Frames findet
ZitatKeine Ahnung, aber GOP heißt "Group of Pictures" und ist daher ins Deutsche übernommen eher als "weiblich" zu betrachten
Du bist aber kleinlich.
ZitatAuf jeden Fall ist die Position ja auch direkt vor dem nächsten I-Frame, müsst man also nur rausfinden, wie man I-Frames findet
Ich hab' den Titel mal entsprechend angepasst.
Ich hab da was gefunden, wo auch Bitformate erwähnt werden:
http://graphics.cs.uni-sb.de/C…uediger.Welsch/index.html
Evtl. führen die Links unten irgendwann zu einer Definition von den Frame-Headern, wo man dann sehen müsste, was fürn Frame es ist?
Die Datei index.vdr enthält Informationen über alle Frames in einem Video. Allerdings wird diese Datei mit Hilfe von c++-Code erzeugt und ist daher nicht so einfach leserlich. Aber im Prinzip findest Du dort alle Infos.
Wenn Du einen Hex-Editor hast, kannst Du Dir die Datei einmal anschauen. Jedes Frame wird durch 8 Zeichen repräsentiert. Zum Beispiel so:
00 00 00 00 | 01 01 00 00 | EF C6 00 00 | 03 01 00 00
5E D2 00 00 | 03 01 00 00 | D6 DE 00 00 | 02 01 00 00
Dabei steht jeweils der 5. Wert für den Bildtyp. 01 heißt I-Frame, 02 steht für P-Frame und 03 dann noch für B-Frames. Der 6. Wert steht für die Dateinummer. 01 bedeutet, dass Du 001.vdr lesen musst. Die letzten 2 Nullwerte sind reserved, sprich die werden im Moment nicht benutzt. Und die ersten 4 Werte stehen nun für den Offset. Der wird rückwärts gelesen. Das heißt der Offset ist 00 00 C6 EF -> im Dezimalsystem also 50927.
Im Klartext heißt es nun, dass Du in der Datei 001.vdr an Byteposition 50927 einen B-Frame vorfinden wirst.
Ich denke damit kannst Du jetzt schon jede Menge anfangen...
ZitatIch denke damit kannst Du jetzt schon jede Menge anfangen...
Das denke ich auch. Vielen Dank. Wo findet man solche Informationen?
In den Sourcen von vdr. Und zwar in der Datei recording.h. Da musst Du mal nach tIndex suchen. Das ist das struct genau passend zu den Einträgen. Allerdings findet man das nicht so einfach. Setze mich halt auch gerade intensiv mit dem Thema Schnitt auseinander und da ich wohl etwas früher angefangen habe als Du, wusste ich das nun schon...
Passend dazu: Der frühe Vogel fängt den Wurm, aber die zweite Maus bekommt den Käse...
Du bist eben die zweite Maus.
Darf ich mal fragen was das bei Dir wird? Möchtest Du einfach nur eine Aufnahme auf mehrere CD-R's per Skript archivieren?!?
Ich hab mir ein Script geschrieben mit dem ich Aufnahmen per Reccommand markieren und per Command zu einer Aufnahme zusammenfassen kann. Ich nehme ab und zu Musikvideos auf und wollte diese nicht mehr von Hand zusammenfassen. Ausserdem bin ich einer von den leidgeplagten 24 Aufnehmern, die zu faul sind die Timer manuell zu programmieren.
Ich hatte nun die fixe Idee die vielen kleinen xxx.vdr Dateien zusammenzufassen und diese dann auf die in der setup.conf gespeicherten Größe zu bringen. Wie gesagt, das geht auch so, sähe anders aber besser aus.
So, ich hab's hinbekommen. Dank an dmh.
Für Interessierte hier die entsprechende Perl-Subroutine.
sub GetIFrame {
my ($recording, $fileno, $bytepos) = @_;
my @char;
my $offset;
my $found = 0;
open(INDEX, "$recording/index.vdr");
while(! eof(INDEX)){
for(my $i = 0; $i < 8; $i++){
$char[$i] = getc(INDEX);
}
next if (hex(sprintf("%02X", ord($char[5]))) != $fileno);
$offset = hex(sprintf("%02X%02X%02X%02X", ord($char[3]), ord($char[2]), ord($char[1]), ord($char[0])));
if ($offset >= $bytepos){
while(hex(sprintf("%02X", ord($char[4]))) != 1) {
# seek(INDEX, -16 , 1);
for(my $i = 0; $i < 8; $i++){
$char[$i] = getc(INDEX);
}
}
$offset = hex(sprintf("%02X%02X%02X%02X", ord($char[3]), ord($char[2]), ord($char[1]), ord($char[0])));
$found = 1;
last;
}
}
close(INDEX);
return $offset if($found);
return -1;
}
Alles anzeigen
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!