OK jetzt wirds aber etwas länger
Code:
stillencode(QString dummy)
{
QString encodestill;
if ( rb_vcd2->isChecked () )
encodestill = "#!/bin/bash \n jpegtopnm "+dummy+" |
pnmscale -xysize 768 576 | pnmpad -black -width=768 -height=576 |
pnmscale -xscale 0.916667 | ppmntsc --pal | ppmtoy4m |
mpeg2enc -f 6 -F 3 -a 2 -n p -T 120 -o /tmp/STILL.m1v &&
mplex -f 6 -o "+dummy+".mpg /tmp/STILL.m1v ";
if ( rb_svcd->isChecked () )
encodestill = "#!/bin/bash \n jpegtopnm "+dummy+" |
pnmscale -xysize 768 576 | pnmpad -black -width=768 -height=576 |
pnmscale -xscale 0.916667 | ppmntsc --pal | ppmtoy4m |
mpeg2enc -f 7 -F 3 -a 2 -n p -T 120 -o /tmp/STILL.m2v &&
mplex -f 7 -o "+dummy+".mpg /tmp/STILL.m2v ";
bash_active=true;
execute_script (encodestill);
}
Code:
execute_script (QString bash)
{
//save bash-file
QString scriptFileName;
scriptFileName = "/tmp/tmpscript";
QFile file( scriptFileName ); // Write the text to a file
if ( file.open( IO_WriteOnly ) )
{
QTextStream stream( &file );
stream << bash;
}
file.close();
//make file executable
QStringList setexec ;
setexec.append("chmod") ;
setexec.append("4711") ;
setexec.append("/tmp/tmpscript") ;
my_process->clearArguments();
my_process->setArguments(setexec);
my_process->start();
QStringList scriptargs ;
scriptargs.append("/tmp/tmpscript") ;
//initializing Process
my_bash_process->clearArguments();
my_bash_process->setArguments(scriptargs);
connect( my_bash_process , SIGNAL( processExited() ), this, SLOT( bash_end()) );
if ( !my_bash_process->start() )
{
KMessageBox::error(this,i18n("Ooops...\n\n...could not start process"));
}
}
Code:
bash_end() //damit hatte ich ein wenig rumprobiert, aber ohne Erfolg
{
bash_active=false;
converted_zahl++;
if (converted_zahl == lb_jpg_img->numRows())
{
convert_progress->cancel();
pb_jpg2mpg_start->setEnabled(true);
}
}
Hier ist der Code, in der Hoffnung, dass er verständlich ist. Ich habe gestern so viel rumprobiert, dass manche Sachen vielleicht noch aus fehlgeschlagenen Versuchen stammen.
Der Weg, den ich mit dem Bash-Script gegangen bin ist sicherlich nicht der sauberste, aber er funktioniert.
Es soll also folgendes passieren:
Eine Liste von Dateien aus der ListBox lb_jpg_img soll Datei für Datei abgearbeitet werden und mit Stillencode zu einem MPEG-Still konvertiert werden.
Im Moment werden alle Dateien nahezu parallel konvertiert.
Es müsste aber doch auch möglich sein, dass erst das erste Bild konvertiert wird und erst wenn bash-end() für die erste Datei ausgeführt wurde die nächste Datei in der Liste abgearbeitet wurde.
Lesezeichen