Note that there are some explanatory texts on larger screens.

plurals
  1. POffmpeg run from shell runs properly, but does not when called from within .NET
    text
    copied!<p>I'm attempting to use ffmpeg (compiled on Windows with Cygwin) in a C# program, by using the <code>Process</code> class to spawn an ffmpeg instance. However, I've hit a rather odd bug that doesn't make much sense.</p> <p>When I run ffmpeg directly from a shell (be it Cygwin's bash, PowerShell, cmd), ffmpeg can properly decode and reencode files without any issues:</p> <pre><code>PS C:\audio&gt; ffmpeg -i .\sound1.wav -acodec libvorbis -f ogg abc.ogg ffmpeg version 1.2 Copyright (c) 2000-2013 the FFmpeg developers built on Apr 8 2013 15:10:40 with gcc 4.5.3 (GCC) configuration: --disable-encoder=vorbis --enable-libvorbis libavutil 52. 18.100 / 52. 18.100 libavcodec 54. 92.100 / 54. 92.100 libavformat 54. 63.104 / 54. 63.104 libavdevice 54. 3.103 / 54. 3.103 libavfilter 3. 42.103 / 3. 42.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 [wav @ 0x800538a0] max_analyze_duration 5000000 reached at 5015510 microseconds Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, wav, from '.\sound1.wav': Metadata: encoder : Lavf54.63.104 Duration: 00:00:05.76, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s Output #0, ogg, to 'abc.ogg': Metadata: encoder : Lavf54.63.104 Stream #0:0: Audio: vorbis, 44100 Hz, stereo, fltp Stream mapping: Stream #0:0 -&gt; #0:0 (pcm_s16le -&gt; libvorbis) Press [q] to stop, [?] for help size= 55kB time=00:00:05.74 bitrate= 78.5kbits/s video:0kB audio:51kB subtitle:0 global headers:4kB muxing overhead 0.817473% </code></pre> <p>The file plays fine, and I can encode to WAV or any other format I like. However, when I call ffmpeg from C# with the following code:</p> <pre><code>string tempfile = Path.GetTempFileName(); FileStream tempfilestr = File.OpenWrite(tempfile); input.CopyTo(tempfilestr); ProcessStartInfo pstart = new ProcessStartInfo("ffmpeg", string.Format("-i \"{0}\" -v verbose -y -f wav -", tempfile)); pstart.CreateNoWindow = true; pstart.ErrorDialog = false; pstart.RedirectStandardOutput = true; pstart.RedirectStandardError = true; pstart.UseShellExecute = false; Process proc = new Process(); proc.StartInfo = pstart; proc.Start(); StreamReader stdout = proc.StandardOutput; StreamReader stderr = proc.StandardError; outtempfilestr = File.OpenRead(outtempfile); MemoryStream output = new MemoryStream(); stdout.BaseStream.CopyTo(output); try { proc.Kill(); } catch(InvalidOperationException) { } catch(Win32Exception) { } File.Delete(tempfile); return output.ToArray(); </code></pre> <p>This <em>randomly</em> produces errors in the output:</p> <pre><code>ffmpeg version 1.2 Copyright (c) 2000-2013 the FFmpeg developers built on Apr 8 2013 15:10:40 with gcc 4.5.3 (GCC) configuration: --disable-encoder=vorbis --enable-libvorbis libavutil 52. 18.100 / 52. 18.100 libavcodec 54. 92.100 / 54. 92.100 libavformat 54. 63.104 / 54. 63.104 libavdevice 54. 3.103 / 54. 3.103 libavfilter 3. 42.103 / 3. 42.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 [wav @ 0x80053860] parser not found for codec pcm_s16le, packets or times may be invalid. Last message repeated 1 times [wav @ 0x80053860] max_analyze_duration 5000000 reached at 5015510 microseconds Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, wav, from 'C:\Users\Bevin\AppData\Local\Temp\tmp1CCE.tmp': Duration: 00:00:05.20, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s [graph 0 input from stream 0:0 @ 0x8011f320] tb:1/44100 samplefmt:s16 samplerate:44100 chlayout:0x3 Output #0, wav, to 'pipe:': Metadata: ISFT : Lavf54.63.104 Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s Stream mapping: Stream #0:0 -&gt; #0:0 (pcm_s16le -&gt; pcm_s16le) Press [q] to stop, [?] for help Multiple frames in a packet from stream 0 [pcm_s16le @ 0x8005c160] Invalid PCM packet, data has size 3 but at least a size of 4 was expected Error while decoding stream #0:0: Invalid data found when processing input No more output streams to write to, finishing. size= 896kB time=00:00:05.20 bitrate=1411.3kbits/s video:0kB audio:896kB subtitle:0 global headers:0kB muxing overhead 0.008719% </code></pre> <p>Note that these errors don't always occur. Sometimes they happen for certain files, sometimes they don't. I've tried various combinations of stream redirects and temp files, none of them work. I've also verified the integrity of the temp files, and it all checks out. I've even extracted the temp file before it was deleted, and decoded it in shell without a hitch.</p> <p>Any ideas?</p> <p>Edit: I've tried running ffmpeg from a shell script that's run through C#. It gives the same issues. Compiling ffmpeg via MinGW gives the same issue as well.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload