我正在尝试将youtube-dl输出作为输入传递给ffmpeg,但似乎无法使管道部分工作。在普通的cmd中,我可以做类似
的事情 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 :(得分:0)
在进行处理而不是启动youtube-dl.exe
和ffmpeg
时,作为单独的进程使用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");
答案 1 :(得分:0)
pipe:0是stdin,所以当你启动ffmpeg.exe你可以设置RedirectStandardInput = true,然后使用Process StandardInput属性来获取要写入的流,然后你可以将它连接到另一个的StandardOutput属性使用StreamReader + StreamWriter +字节数组缓冲区进行处理。
事实上,刚刚在Github上找到了一个例子:https://github.com/theogeer/aaxtomp3/blob/b05514036dff85d9c395bfa5d9bf272f6361e729/AaxToMp3GUI/AaxToMp3GUI/Converter.cs