You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中实现streamlink与ffmpeg的二进制数据流管道

在PowerShell中实现Streamlink与FFmpeg的管道操作(无需调用cmd)

完全可以直接在PowerShell中实现这个管道操作,不用借助Start-Process调用cmd。PowerShell虽然主打对象管道,但对于原生可执行文件的输出,默认会以字节流的形式在管道中传递,和cmd的管道行为一致,刚好适配视频流的传输需求。

直接执行管道命令

你可以直接在PowerShell中运行类似cmd的命令写法:

streamlink $stream_url best -O | ffmpeg -i pipe: "output_file.mp4"
  • 这里streamlink的-O参数会将视频流输出到标准输出(stdout),PowerShell会直接把这个字节流传递给ffmpeg的标准输入(stdin),ffmpeg通过pipe:读取输入流并转存为文件。
  • 如果$stream_url包含特殊字符(比如空格、&等),可以用双引号包裹变量:streamlink "$stream_url" best -O,避免参数解析错误。

获取退出码

获取最后一个命令的退出码

PowerShell的$LASTEXITCODE变量会存储最后一个执行的原生可执行文件的退出码,也就是上述命令中ffmpeg的退出码:

streamlink $stream_url best -O | ffmpeg -i pipe: "output_file.mp4"
$ffmpegExitCode = $LASTEXITCODE
Write-Host "FFmpeg退出码: $ffmpegExitCode"

获取两个命令的退出码

如果需要同时获取streamlink和ffmpeg的退出码,不能直接用单条管道(因为管道只会保留最后一个命令的退出码),可以分两步处理:

  1. 先执行streamlink并捕获其退出码,同时将输出传递给ffmpeg
  2. 再获取ffmpeg的退出码

示例代码:

# 执行streamlink,捕获输出和退出码
$streamlinkOutput = & streamlink $stream_url best -O 2>&1
$streamlinkExitCode = $LASTEXITCODE

# 将streamlink的输出传递给ffmpeg
$streamlinkOutput | & ffmpeg -i pipe: "output_file.mp4"
$ffmpegExitCode = $LASTEXITCODE

Write-Host "Streamlink退出码: $streamlinkExitCode"
Write-Host "FFmpeg退出码: $ffmpegExitCode"
  • 注意:这种方式会先将streamlink的输出暂存到内存中,如果是长时间的直播流,可能会占用较多内存。如果只关注ffmpeg的退出码,直接用单条管道即可。

内容的提问来源于stack exchange,提问作者krawieck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:52:10