1
Qprocess에서 mencoder를 시작하고 진행률 표시 줄을 표시하면서 비디오를 변환 한 다음 종료합니다. 문제는 mencoder가 실제로 끝나기 전에 항상 종료된다는 것입니다. 루프가 몇 번 실행 된 다음 닫힙니다. 진행 막대 (progress.setValue())를 업데이트하는 행을 주석 처리하면 mencoder가 완료되어 실행되고 행복하게 종료됩니다.QProcess가 완료되기 전에 종료합니다.
하루 동안이 문제가 발생 했으므로 알아낼 수 없습니다. 또한, 나는 Mac에 있다고 언급해야합니다.
아이디어가 있으십니까?
감사
말론
void MainWindow::convertVideo()
{
QString input_filename = "/var/input.avi";
QString output_filename = "/var/output.264";
QStringList arguments;
arguments << input_filename << "-nosound" << "-of" << "rawvideo" << "-ofps" << "30" << "-vf" << "harddup" << "-ovc" << "x264" << "-x264encopts" << "bframes=0" << "-o" << output_filename;
QProcess* myProcess = new QProcess(this);
myProcess->setReadChannel(QProcess::StandardOutput);
myProcess->start("/opt/local/bin/mencoder", arguments);
QString output_string;
QStringList output_pieces;
QProgressDialog progress("Converting video...", "Abort", 0, 100, this);
progress.setWindowModality(Qt::WindowModal);
progress.setValue(0);
progress.show();
while(myProcess->state() != QProcess::NotRunning)
{
output_string = myProcess->readAllStandardOutput();
output_pieces = output_string.split(" ");
QStringList width_string_list = output_pieces.filter("%)");
if(width_string_list.length() > 0)
{
width_string_list = width_string_list[width_string_list.length() - 1].split("(");
if(width_string_list.length() > 1)
{
width_string_list = width_string_list[1].split("%");
}
else
{
width_string_list = width_string_list[0].split("%");
}
progress.setValue(width_string_list[0].toInt());
qDebug() << width_string_list[0].toInt();
}
myProcess->waitForReadyRead();
}
return;
}