2013-05-16 5 views
5

Я хочу сделать парсер для вывода ffmpeg. Но когда работает FFmpeg только лишь с помощьюC# Process.Start() медленнее, чем консоль

strCmdText = "-y -i \"" + path + "\""; 
strCmdText += " -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an nul.avi"; 
Process.Start(new ProcessStartInfo("lib\\ffmpeg.exe", strCmdText)); 

это 2/3 медленнее, чем запустить его в пакете:

set FFMPEG="ffmpeg\ffmpeg.exe" 
%FFMPEG% -y -i %1 -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an -pass 1 nul.avi 

Запуск в C# имеет FPS-скорость 130 (CPU: 100%) , но запустив его с пакетом, он имеет 400 кадров в секунду (процессор 75%).

В обоих случаях ОЗУ использует и те же, # Handels и #Threads тоже. Настройка приоритета процесса High/Live не будет устранять это и не запускать процесс в отдельном потоке.

Это нормально или может быть исправлено?

+0

Вы (или кто-то еще) определили близость процессора к вашему стартовому процессу (или к каким-либо его родительским процессам)? Используйте Process Monitor, чтобы узнать, так ли это. Выполнение только на 75% может означать, что процесс использует только 3/4 доступных ядер. –

+3

У вас, похоже, разные аргументы переданы исполняемому файлу, расположенному в разных местах. Можете ли вы дважды проверить, что аргументы совпадают, и вы используете точно такой же исполняемый файл? – oleksii

ответ

3

При запуске приложения с использованием Process.Start вам не хватает переключателя -pass 1 в командной строке, возможно, это влияет на вывод.

AFAIK, скорость & Выходной сигнал приложения, начатого через Process.Start, такой же, как при обычных условиях.

Это может быть изменение производительности на 1% или 2%, но это в основном связано с процессором, сродством к процессу и вещами, связанными с жесткой привязкой.

+0

Поражайте меня, вы правы. Я просто пропустил это. Теперь fps почти одинаковы. Спасибо. – gu471