2013-05-16 48 views
5

Tôi muốn tạo một trình phân tích cú pháp cho đầu ra ffmpeg. Nhưng khi chạy ffmpeg chỉ chỉ quaC# Process.Start() chậm hơn bảng điều khiển

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)); 

nó chậm hơn so với bắt đầu nó trong một lô 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 

Chạy trong C# nó có một fps-tốc độ 130 (CPU: 100%) , nhưng chạy nó với hàng loạt nó có 400 khung hình/giây (CPU 75%).

Theo cả hai cách, RAM sử dụng và giống nhau, #Handels và #Threads. Đặt mức độ ưu tiên của quy trình thành Cao/Trực tiếp sẽ không khắc phục điều này cũng như không chạy quy trình trong một chuỗi riêng biệt.

Điều này có bình thường hay không?

+0

Bạn (hoặc người khác) có xác định mối quan hệ của bộ xử lý cho quá trình bắt đầu của bạn (hoặc bất kỳ quy trình gốc nào của nó) không? Sử dụng Process Monitor để tìm hiểu xem đây có phải là trường hợp không. Chỉ chạy ở 75% có thể chỉ ra rằng quá trình này chỉ sử dụng 3/4 lõi có sẵn. –

+3

Dường như bạn có các đối số khác nhau được chuyển đến thực thi ở các vị trí khác nhau. Bạn có thể kiểm tra lại các đối số chính xác không và bạn có sử dụng chính xác cùng một tệp thực thi không? – oleksii

Trả lời

3

khi bạn khởi động ứng dụng bằng cách sử dụng Process.Start, bạn đang thiếu một chuyển đổi -pass 1 trong dấu nhắc lệnh, có thể ảnh hưởng đến đầu ra.

AFAIK, tốc độ & đầu ra của ứng dụng được bắt đầu qua Process.Start giống như trong trường hợp bình thường.

Có thể có 1% hoặc 2% thay đổi về hiệu suất, nhưng đó chủ yếu là do cpu, mối quan hệ quy trình và những thứ liên quan đến khó khăn.

+0

Đổ lỗi cho tôi, bạn nói đúng. Tôi chỉ bỏ lỡ nó. Bây giờ khung hình/giây gần như giống nhau. Cảm ơn. – gu471

Các vấn đề liên quan