Hoi.
ik zal dit keer proberen zo helder mogelijk mijn probleem uit te leggen:
ik werk aan een C# programma
deze voert ffmpeg.exe uit om een videofile.* naar een videofile.flv (flash video) om te zetten
in cmd.exe doe ik dat als volgt:
dit proces (ffmpeg.exe) loopt keurig door, CPU@99% totdat de conversie klaar is...(ongeacht hoe lang dit ook duurt) daarna verdwijnt het uit de taskmanager (logisch)
vanuit C# doe ik dit als volgt:
als ik dit uitvoer, wordt ffmpeg.exe dus 'achter de schermen' uitgevoerd
dat gaat in het begin goed... CPU@99%
maar na precies 17 seconden (ongeacht processor/geheugen capaciteit) gaat de CPU tijd voor het ffmpeg.exe proces naar 0% ! (het blijft wel in de taskmanager staan, op nul procent maar met 5MB in gebruik)
(dit in tegenstelling tot ffmpeg vanaf de commandline met identieke files en -switches)
als ik nu dit proces ga bekijken met de VS.NET debugger gebeurt er niks.
_sluit_ ik echter de debugger, dan stoot ineens het proces ffmpeg.exe door en lukt het wel..
heel vreemd..
ik heb deze eigenschappen later toegevoegd:
omdat ik vermoedde dat er te weinig geheugen/buffer overbleef, maar dit blijft op beide manieren (commandline/System.Diagnostics.Process) zo rond de 4900KB steken dus dat is het ook niet..
kent iemand dit probleem?
ik zal dit keer proberen zo helder mogelijk mijn probleem uit te leggen:
ik werk aan een C# programma
deze voert ffmpeg.exe uit om een videofile.* naar een videofile.flv (flash video) om te zetten
in cmd.exe doe ik dat als volgt:
code:
1
| ffmpeg.exe -y -i "input.mov" -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 output.flv |
dit proces (ffmpeg.exe) loopt keurig door, CPU@99% totdat de conversie klaar is...(ongeacht hoe lang dit ook duurt) daarna verdwijnt het uit de taskmanager (logisch)
vanuit C# doe ik dit als volgt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| ... System.Diagnostics.Process ffmpegProc = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo i = new System.Diagnostics.ProcessStartInfo(); i.FileName = "ffmpeg.exe"; i.Arguments = "-y -i \""+inputClip+"\" -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 "+ outputClip; i.RedirectStandardOutput = true; i.RedirectStandardInput = true; i.RedirectStandardError = true; i.CreateNoWindow = true; i.UseShellExecute = true; ffmpegProc.StartInfo = i; ffmpegProc.MaxWorkingSet = (IntPtr)10000000; ffmpegProc.WaitForExit(30000); ffmpegProc.WaitForInputIdle(30000); ffmpegProc.PriorityBoostEnabled = true; ffmpegProc.Start(); SendProgressBar.Value = 1; string output = ffmpegProc.StandardOutput.ReadToEnd(); while(!ffmpegProc.HasExited) { SendProgressBar.Value = 2; if(ffmpegProc.Responding) { sendStatus.Text = "Busy..."; ffmpegProc.Refresh(); } else { sendStatus.Text = "Process died"; } Thread.Sleep(10000); } if(ffmpegProc.ExitCode != 0) { sendStatus.Text = "Error"; MessageBox.Show("Process exit code: {0}" + ffmpegProc.ExitCode); } else { ... |
als ik dit uitvoer, wordt ffmpeg.exe dus 'achter de schermen' uitgevoerd
dat gaat in het begin goed... CPU@99%
maar na precies 17 seconden (ongeacht processor/geheugen capaciteit) gaat de CPU tijd voor het ffmpeg.exe proces naar 0% ! (het blijft wel in de taskmanager staan, op nul procent maar met 5MB in gebruik)
(dit in tegenstelling tot ffmpeg vanaf de commandline met identieke files en -switches)
als ik nu dit proces ga bekijken met de VS.NET debugger gebeurt er niks.
_sluit_ ik echter de debugger, dan stoot ineens het proces ffmpeg.exe door en lukt het wel..
heel vreemd..
ik heb deze eigenschappen later toegevoegd:
C++:
1
2
3
4
| ffmpegProc.MaxWorkingSet = (IntPtr)10000000; ffmpegProc.WaitForExit(30000); ffmpegProc.WaitForInputIdle(30000); ffmpegProc.PriorityBoostEnabled = true; |
omdat ik vermoedde dat er te weinig geheugen/buffer overbleef, maar dit blijft op beide manieren (commandline/System.Diagnostics.Process) zo rond de 4900KB steken dus dat is het ook niet..
kent iemand dit probleem?