我已经将我当前的视频项目从命令提示符切换到PowerShell,这样我就可以充分利用Tee-Object
的多输出代码。
目前,我有一个版本的代码在批处理中工作,但我需要通过一个tee再添加一个特性。这是我第一次使用PowerShell,所以这可能是一个简单的修复...
目前我已经知道如何在PowerShell中运行ffmpeg
和ffplay
,我有一个批处理程序,它接受ffmpeg
的输出并将其传输到ffplay
,这个程序运行得很好。我也可以在PS中运行ffplay
。在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播放时,视频甚至没有弹出。我没有收到任何警告或任何东西,它似乎运行得很好,但我没有得到显示的图片。
最终目标是能够在主机显示器上以全分辨率播放视频,并向网络发布较低的比特率(如果有帮助的话)。
2条答案
按热度按时间hpxqektj1#
您看到奇怪行为的原因是PowerShell中的管道与旧的cmd-interpreter/console中的管道工作方式不同。基本上,在传递到下一个命令之前,PowerShell会对其进行解析。您可以在this GitHub issue中阅读更多有关正在进行的工作的信息,这些工作旨在使两个本地进程能够在PowerShell中传递原始字节流。
如果您无法在传统的cmd-shell中运行命令(这可能是最简单的方法),您可以使用模块Use-RawPipeline。
然后,您可以构建如下所示的命令行(为了简洁起见,我将参数列表简化为仅使用一个文件,并跳过decklink-source):
如果需要向管道中添加更多命令,只需在
Receive-RawPipeline
之前插入另一个Invoke-NativeCommand -FilePath <command>
。注:我不确定这个解决方案的性能,但我已经确认它会将ffmpeg的输出管道到ffplay并显示编码后的流。
z31licg02#
从ffmpeg传输到x265的示例:
简而言之: