gpt4 book ai didi

powershell - 在 PowerShell 中一起使用 ffmpeg 和 ffplay

转载 作者:行者123 更新时间:2023-12-04 21:31:19 24 4
gpt4 key购买 nike

我已将我当前的视频项目从命令提示符切换到 PowerShell,以便我可以充分利用 Tee-Object对于多输出代码。

目前,我有一个批量工作的代码版本,但我需要通过 tee 添加一个功能。这是我第一次使用 PowerShell,所以这可能是一个简单的修复......

目前我已经弄清楚如何运行 ffmpegffplay在 PowerShell 中,我有一个批处理程序,它需要一个 ffmpeg输出并通过管道传送到 ffplay ,这工作得很好。我也可以玩ffplay在PS就好了。在 PS 中,此代码有效:

ffplay -video_size 1280x720 -pixel_format uyvy422 -framerate 60 -i video="Decklink Video Capture"

作为一个批处理,这段代码适用于我正在做的事情:
ffmpeg -video_size 1280x720 -pixel_format uyvy422 -framerate 60 -i video="Decklink Video Capture" -c:v libx265 -preset ultrafast -mpegts pipe: | ffplay pipe:

它需要我想要的视频并通过管道将其播放到屏幕上。但是,当通过 PowerShell 播放时,视频甚至不会弹出。我没有收到任何警告或任何东西,它似乎运行良好,但我没有显示图片。

最终目标是能够在主机显示器上以全分辨率播放视频,并在有帮助的情况下向网络发布较低的比特率。

最佳答案

您看到奇怪行为的原因是 PowerShell 中的管道与旧 cmd-interpreter/console 中的管道方式不同。基本上,它在传递给下一个命令之前由 PowerShell 解析。
您可以在 this GitHub issue 中阅读更多内容关于使两个 native 进程能够在 PowerShell 中传递原始字节流的一些正在进行的工作。

如果您无法在旧的 cmd-shell 中运行命令(这可能是最简单的方法),您可以使用模块 Use-RawPipeline .

Install-Module -Name Use-RawPipeline

然后你可以像这样构造一个命令行(为了简洁起见,我将参数列表简化为只使用一个文件并跳过decklink-source):
Invoke-NativeCommand -FilePath .\ffmpeg -ArgumentList @("-i", "C:\temp\testfile.mp4","-f","h264", "pipe:") |
Invoke-NativeCommand -FilePath .\ffplay.exe -ArgumentList @("pipe:") |
Receive-RawPipeline

如果您需要向管道添加更多命令,只需插入另一个 Invoke-NativeCommand -FilePath <command>Receive-RawPipeline 之前.

注意:我不确定这个解决方案的性能,但我已经确认它会将 ffmpeg 的输出通过管道传输到 ffplay 并显示编码流。

关于powershell - 在 PowerShell 中一起使用 ffmpeg 和 ffplay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50456424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com