भीतर मैं एक सी # कार्यक्रम में ffmpeg (Cygwin के साथ Windows पर संकलित) उपयोग करने का प्रयास कर रहा हूँ कहा जाता है नहीं है जब, एक ffmpeg उदाहरण अंडे Process
वर्ग का उपयोग करके। हालांकि, मैंने एक अजीब बग मारा है जो ज्यादा समझ में नहीं आता है।ffmpeg रन ठीक से चलाता है, लेकिन से नेट
जब मैं एक खोल से सीधे ffmpeg चलाने के लिए, ffmpeg ठीक से किसी भी मुद्दे के बिना डिकोड और reencode फ़ाइलों सकते हैं (यह Cygwin के bash, PowerShell, cmd हो):
PS C:\audio> 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 -> #0:0 (pcm_s16le -> 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%
फ़ाइल ठीक निभाता है, और मैं सांकेतिक शब्दों में बदलना कर सकते हैं मुझे पसंद है डब्ल्यूएवी या किसी अन्य प्रारूप के लिए। हालांकि, जब मैं निम्नलिखित कोड के साथ सी # से ffmpeg फोन:
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();
यह बेतरतीब ढंग से त्रुटियों उत्पादन में उत्पन्न होते हैं:
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 -> #0:0 (pcm_s16le -> 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%
ध्यान दें कि इन त्रुटियों को हमेशा नहीं होती है। कभी-कभी वे कुछ फाइलों के लिए होते हैं, कभी-कभी वे नहीं करते हैं। मैंने स्ट्रीम रीडायरेक्ट और अस्थायी फ़ाइलों के विभिन्न संयोजनों की कोशिश की है, उनमें से कोई भी काम नहीं करता है। मैंने अस्थायी फ़ाइलों की अखंडता भी सत्यापित की है, और यह सब जांचता है। मैंने इसे हटाए जाने से पहले अस्थायी फ़ाइल को भी निकाला है, और इसे बिना छेड़छाड़ के खोल में डीकोड किया है।
कोई भी विचार?
संपादित करें: मैंने एक शेल स्क्रिप्ट से ffmpeg चलाने का प्रयास किया है जो सी # के माध्यम से चलाया जाता है। यह एक ही मुद्दे देता है। MinGW के माध्यम से ffmpeg संकलन एक ही समस्या देता है।
आप सही * कार्यशील निर्देशिका * स्थापित करने की कोशिश की है? फ़ाइल पथ - जब आप खोल खोल पथ (ज्यादातर आवेदनों निर्देशिका) कार्यशील निर्देशिका के रूप में प्रयोग किया जाता है से एक आवेदन भाग गया, जब आप काम कर निर्देशिका निर्दिष्ट .net से चलाने के अपने .net आवेदन की निर्देशिका –
@Gam Erix है ffmpeg को पास किया गया पूर्ण है, इसलिए मुझे नहीं लगता कि उस अंत में कोई समस्या है। – Bevin
@ बेविन आपने स्टेटिक लिंक्ड लाइब्रेरीज़ के साथ ffmpeg को संकलित करने का प्रयास कैसे किया? शायद यह इस मुद्दे के साथ मदद करेगा। इसके अतिरिक्त, ffmpeg कार्यशील निर्देशिका के अंतर्गत कोडेक (या 'libavcodec') की तलाश कर रहा है। क्या आप कार्यप्रणाली (['Environment.CurrentDirectory'] (http://msdn.microsoft.com/en-us/library/system.environment.currentdirectory.aspx) को सेट करने का प्रयास कर सकते हैं) बस 'proc.Start() से पहले कॉल करें – Jesse