Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qt: Ein screenshot aus einem videodatei?



chapaev
02-03-2005, 10:56
Hi Leute,

Ich habe shon wieder ein Problem! :)
Ich muss ein screenshot aus einem videodatei holen, habe aber nicht viel erfahrung damit.
Wenn ich mit qprocess transcode starte und ein sceenshot hole dauert es eine ewigkeit, deshalb dachte ich mir "das muss doch mit qt auch gehen?".
Jetzt die Frage:
Wenn man im KDE Mauszeiger über ein videodatei hält, bekommt man ein screenshot angezeigt und zwar so eins, wo man was sieht. Wie kann ich in Sowas änliches machen, bzw. wie funktioniert das in KDE?

MfG

chapaev

chapaev
02-03-2005, 18:45
Ich habe in zwishen die Hoffnung aufgegeben, deshalb versuche ich es mit transcode.
Wenn man einen frame am anfang auswählt, braucht transcode nicht so lange. Leider kann man das über QProcess nciht sagen. Der braucht mindestens 10 mal länger als wenn ich den Befehl über eine konsole laufen lasse.
Ich konnte feststellen wo der Process am meisten Zeit braucht. Der braucht 1 minute bis er überhaupt startet! :mad: Und es kommt noch besser, wenn das erste Ausgabe (readStdout) kommt bricht das ganze programm zusammen!

Hier ist meine code


void myApp::getImage(const QString &file)
{
QString frames = getFrameRange();
QMessageBox::critical(this, "QCreateVOB ERROR", frames);
QString outFile = getenv("HOME");
outFile.append( "/my-shot" );

imageLabel->setText("Take a screenshot please white...");

QProcess *proc = new QProcess;
proc->clearArguments();
proc->addArgument("transcode");
proc->addArgument("-i");
proc->addArgument(file);
proc->addArgument("-c");
proc->addArgument(frames);
proc->addArgument("-y");
proc->addArgument("im,null");
proc->addArgument("-V");
proc->addArgument("-o");
proc->addArgument(outFile);

connect(proc, SIGNAL(readyReadStdout()),
this, SLOT(processOutput()));
connect(proc, SIGNAL(processExited()),
this, SLOT(loadImage()));
if ( !proc->start() )
{
QMessageBox::critical( 0,
tr("Fatal error"),
tr("Could not start the transcode"),
tr("Quit") );
}

}

Ich finde keine Fehler die dazu führen könnten.

Kann mir jemand sagen was ich falsh mache? Oder ist es ein bug von QProcess?

MfG

chapaev

peschmae
02-03-2005, 21:29
Na dann nehme ich mal an dass du in dem Slot irgendwie Mist gebaut hast.

Was machst du eigentlich mit dem Process-Objekt nachdem dus nicht mehr brauchst?

MfG Peschmä

chapaev
02-03-2005, 23:56
Na dann nehme ich mal an dass du in dem Slot irgendwie Mist gebaut hast.

Wenn du plötzliche abstürze meinst dann hast du recht den fehler habe ich behoben.
Was die Zeit angeht, dauert es genau so lange wie vorher.

Was machst du eigentlich mit dem Process-Objekt nachdem dus nicht mehr brauchst?
Ich verstehe die Frage nciht ganz. :confused: Wenn ich das richtig verstehe ist ein object in meinem Fall "proc" (QProcess *proc = new QProcess; ). Was sollte ich den damit machen?

MfG

chapaev

peschmae
03-03-2005, 06:52
Ich verstehe die Frage nciht ganz. :confused: Wenn ich das richtig verstehe ist ein object in meinem Fall "proc" (QProcess *proc = new QProcess; ). Was sollte ich den damit machen?


Das ist ja dann auf dem Heap und es sieht fast so aus als würdest du das dort einfach rumliegen lassen wenn dus nicht mehr brauchst sondern anständig mit delete entfernen.

MfG Peschmä

chapaev
03-03-2005, 13:00
Das ist ja dann auf dem Heap und es sieht fast so aus als würdest du das dort einfach rumliegen lassen wenn dus nicht mehr brauchst sondern anständig mit delete entfernen.
:eek: Das habe ich gar nciht gewusst! Werde ich machen ;) . Ich habe in zwishen kein bock mehr auf qprocess, deshalb habe ich diesen (http://www.mrunix.de/forums/showthread.php?t=33081&highlight=qprocess) script genommen. Hat zwar keine sdout und stderr aber daführ ist super schnell ;). In meinem fall brauche ich nicht mehr.

Danke für die Antworten.

MfG

chapaev