2017-01-01 1 views
0

Я пытаюсь передать вывод youtube-dl в ffmpeg в качестве входных данных, но не может показаться, что часть трубопровода работает. В нормальном cmd я могу сделать что-то вродеC# используя каналы для получения выходного потока

но в 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} (где уг является имя процесса процесс youtube-dl и -i задает входной файл/поток). Использование pipe: 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.exe и ffmpeg как отдельные процессы запуска самой командной оболочки из кода с помощью cmd.exe /C это позволит использовать трубу для потока контекста из одной программы в другую.

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"); 
0

трубы: 0 STDIN, поэтому при запуске ffmpeg.exe вы можете установить RedirectStandardInput = верно, то использовать процесс StandardInput свойство, чтобы получить поток, чтобы писать, вы можете затем подключить этот до StandardOutput свойство другого процесса с буфером StreamReader + StreamWriter + byte.

На самом деле, просто нашел пример на Github: https://github.com/theogeer/aaxtomp3/blob/b05514036dff85d9c395bfa5d9bf272f6361e729/AaxToMp3GUI/AaxToMp3GUI/Converter.cs

Смежные вопросы