C# 如何传递youtube视频';s音频url作为ffmpeg源

C# 如何传递youtube视频';s音频url作为ffmpeg源,c#,ffmpeg,youtube-dl,discord.net,C#,Ffmpeg,Youtube Dl,Discord.net,我试图让我的discord机器人使用youtube dl(音频url)中的视频url作为ffmpeg路径/源,播放任何youtube视频中的音频。我得到它的工作类型,但在测试时,FFMPEG在音频的中间抛出一个错误,进程结束。以下是错误: 我试图通过下载并使用文件路径作为ffmpeg源路径来播放相同的歌曲,效果很好 以下是我如何启动ffmpeg过程: 返回流程。开始(新流程开始信息 { FileName=“ffmpeg.exe”, 参数=$“-xerror-i\“{path}\”-ac2-f

我试图让我的discord机器人使用youtube dl(音频url)中的视频url作为ffmpeg路径/源,播放任何youtube视频中的音频。我得到它的工作类型,但在测试时,FFMPEG在音频的中间抛出一个错误,进程结束。以下是错误:

我试图通过下载并使用文件路径作为ffmpeg源路径来播放相同的歌曲,效果很好

以下是我如何启动ffmpeg过程:


返回流程。开始(新流程开始信息
{
FileName=“ffmpeg.exe”,
参数=$“-xerror-i\“{path}\”-ac2-fs16le-ar48000管道:1“,
UseShellExecute=false,
重定向标准输出=真
});
{path}是来自youtube dl进程的音频url。(也可以在错误屏幕截图中看到url)

下面是我从youtube dl获得链接的方式:

processyoutubedl;
ProcessStartInfo youtubedlGetTitle=新的ProcessStartInfo()
{
FileName=“youtube dl”,
参数=$“--获取标题--获取持续时间--获取url{url}”,
CreateNoWindow=true,
重定向标准输出=真,
UseShellExecute=false
};
youtubedl=Process.Start(youtubedlGetTitle);
youtubedl.WaitForExit();
{url}是一个普通的youtube视频链接


我刚开始使用ffmpeg和youtube dl,所以可能有一些愚蠢的新手错误,我不知道。如果您能给我提供任何关于我做错了什么的指导和/或解释,我将不胜感激。

您可以将
youtube dl
输出直接导入
ffmpeg
,这样,它们作为父进程的一部分一起执行

不是100%确定这会解决你的问题,但值得一试

下面是在Windows中执行此操作的代码示例:

// Note that 'query' can be both a youtube video URL or a search term (ex: "africa by toto")
private Process CreateStream(string query)
{
    return Process.Start(new ProcessStartInfo()
        {
            FileName = "cmd.exe",
            Arguments = $"/C youtube-dl.exe --default-search ytsearch -o - \"{query}\" | ffmpeg -i pipe:0 -ac 2 -f s16le -ar 48000 pipe:1",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        }
    );
}

您需要输入ffmpeg.exe和{path}的完整路径名。process类没有环境变量(比如PATH),因此需要包含完整路径。{PATH}是音频url,如果这是您的意思的话。我用youtube dl代码获得的url。它的工作原理是这样的,但它在中途关闭,并在我提供的图像中给出了错误。我将从cmd.exe提示符运行。例外情况是速度不对。从命令行运行将提供更好的错误消息。