Spa*_*Rob 5 powershell pipeline ffmpeg
我已经将当前的视频项目从命令提示符切换到PowerShell,以便可以充分利用的Tee-Object多输出代码。
当前,我有一个可以批量工作的代码版本,但是我需要通过T型添加另一个功能。这是我第一次使用PowerShell,因此这可能是一个简单的修复方法...
目前,我已经弄清楚了如何在PowerShell中运行ffmpeg以及如何运行ffplay,并且我有一个批处理程序,该程序接受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播放时,视频甚至不会弹出。我没有收到任何警告或任何警告,它似乎运行良好,但没有显示图片。
最终目标是能够以全分辨率在主机显示屏上播放视频,并在网络中发布较低的比特率(如果有帮助的话)。
小智 5
您看到奇怪行为的原因是 PowerShell 中的管道工作方式与旧的 cmd 解释器/控制台不同。基本上它在传递到下一个命令之前由 PowerShell 解析。您可以在此 GitHub 问题中阅读更多有关使两个本机进程能够在 PowerShell 中传递原始字节流的一些正在进行的工作的更多信息。
如果您无法在旧版 cmd-shell 中运行命令(这可能是最简单的方法),您可以使用模块Use-RawPipeline。
Install-Module -Name Use-RawPipeline
然后你可以构建一个像这样的命令行(为了简洁起见,我将参数列表简化为仅使用文件并跳过甲板链接源):
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 并显示编码流。
| 归档时间: | 
 | 
| 查看次数: | 571 次 | 
| 最近记录: |