Когда вы вводите исходную команду в оболочке, ffmpeg выводит в стандартный вывод. Оболочка интерпретирует оператор перенаправления >
, поэтому выходные данные отправляются в temp2. Последнее, что видит ffmpeg - это.
Когда вы так используете QProcess, оболочка отсутствует, поэтому ffmpeg видит >
и temp2 в качестве аргументов, которые он не интерпретирует, как вы ожидаете. В этом случае есть простое решение. Просто выведите ffmpeg в temp2 вместо stdout:
QString parameters("./ffmpeg -t 10 -i temp1 -f mpeg temp2");
std::cout << QProcess::execute(parameters) << std::endl;
В других случаях вам может понадобиться выполнить оболочку явно, например:
QStringList paramList;
paramList << "-c" << "./ffmpeg -t 10 -i temp1 -f mpeg - > temp2";
std::cout << QProcess::execute("sh", paramList) << std::endl;
Обратите внимание, что QProcess :: execute является статическим, поэтому экземпляр не требуется (это применяется независимо от того, как вы вызываете execute).