2017-01-01 52 views
0

我想管youtube-dl輸出到ffmpeg作爲輸入,但似乎無法讓管道部分工作。在正常的CMD,我可以做類似於c#使用管道來獲得輸出流

C:\YT\youtube-dl.exe -o - https://www.youtube.com/watch?v=L4aLQ0ki9Tk | ffmpeg -i pipe:0 -f asf pipe:1 

但在c#中這是行不通的。目前,我已C#創建2個進程:

一個YouTube的-DL

C:\YT\youtube-dl.exe -o - https://www.youtube.com/watch?v=L4aLQ0ki9Tk 

,另一個用於FFmpeg的

ffmpeg -i {yt.StandardOutput} -f s16le -ar 48000 -ac 2 pipe:1 

的問題是與{yt.StandardOutput}(其中YT是的進程名youtube-dl進程和-i指定輸入文件/流)。使用管道:0也不起作用,我不知道如何將第一個管道的輸出連接到第二個管道的輸入。

+0

見[該SO](http://stackoverflow.com/questions/13806153/example-of-named-pipes.aspx)。然而,命名管道有很多開銷;你應該閱讀這個[msdn文章](https://msdn.microsoft.com/en-us/library/bb546102(v = vs.110).aspx)關於使用C#演示代碼的匿名管道。 – RamblinRose

回答

0

當做你的處理,而不是開始youtube-dl.exeffmpeg爲單獨的進程使用cmd.exe /C這將允許您使用管道從一個程序流程的背景下開始另一個命令shell本身從您的代碼。

var proc = Process.Start("cmd.exe", 
         "/C C:\YT\youtube-dl.exe -o - https://www.youtube.com/watch?v=L4aLQ0ki9Tk | ffmpeg -i pipe:0 -f asf pipe:1");