【发布时间】:2021-10-08 04:07:45
【问题描述】:
尝试编写一个基本的 Powershell 脚本,该脚本将从 URL 中提取视频,并在需要时使用 FFmpeg 剪切它们。
我需要预先做的一件事是从网站上拉取下载选项,看看我是想使用-f best 还是-f bestvideo+bestaudio。所以我需要运行youtube-dl -F [url] 并返回输出,但我似乎不能不挂起:
param(
[string]$url = "https://www.youtube.com/watch?v=njX2bu-_Vw4"
)
$YTDLinfo = New-Object System.Diagnostics.ProcessStartInfo
$YTDLinfo.FileName = "youtube-dl"
$YTDLinfo.RedirectStandardError = $false
$YTDLinfo.RedirectStandardOutput = $true
$YTDLinfo.UseShellExecute = $false
$YTDLinfo.Arguments = "-F $url"
$YTDL = New-Object System.Diagnostics.Process
$YTDL.StartInfo = $YTDLinfo
$YTDL.Start() | Out-Null
$YTDL.WaitForExit()
$YTDLStdOut = $YTDL.StandardOutput.ReadToEnd().split([Environment]::NewLine)
Write-Host $YTDLStdOut
如果我将 $YTDLinfo.RedirectStandardOutput 更改为 $false 它可以工作并将输出直接返回到控制台,但我需要在变量中输出。还值得一提的是,如果我运行上述但没有传递任何参数($YTDLinfo.Arguments = "")它也可以工作,即使$YTDLinfo.RedirectStandardOutput 设置为$true,并且只返回一些关于它如何需要一个 url 的 youtube-dl 术语.
解释起来有点混乱,但它只在重定向标准输出和提供-F [url] 时才会挂起。有什么想法吗?
【问题讨论】:
标签: .net powershell powershell-7.0