因此,我一直在使用 Handbrake 命令行对我的视频收藏进行编码以存储在我的 NAS 上,这样我就可以在我的 HTPC 上使用它。我一直在寻找一种既可以输出到屏幕的方法,这样我就可以在编码时观察它的输出,也可以输出到文件,这样我就可以返回并查看特定的编码会话。
我的解决方案是使用一个 Powershell 窗口运行编码并输出到文件,然后使用另一个 Powershell 窗口读取日志文件并将其显示在屏幕上。这可行,但我想改进它,因为它并不完美。由于读取文件脚本以设定的间隔读取,因此会丢失行。另外,如果我减少间隔,它会对系统性能产生影响,使编码运行速度变慢一些。有没有办法可以将第一个窗口的输出重定向到文件和屏幕?
第一个 powershell 脚本(启动编码的脚本)名为“Convert1.ps1”(从 handbrake 安装目录运行):
net time \\ODIN |find "Current time"
./HandbrakeCLI.exe -i "<input file>" -o "<output file>" <handbrake parameters>
要输出到文件的第二个 powershell 脚本,名为“Start_Convert.ps1”:
d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Completed\Movies\9.29.2010.log
从该日志文件读取的第三个 powershell 脚本称为“Watch_Output.ps1”:
while (1)
{
(Get-Content d:\Conversions\Completed\Movies\9.29.2010.log)[-1]
Start-sleep 5
}
理想情况下,我希望将这一切都集中到一个 powershell 窗口中,该窗口运行一个脚本来启动编码、输出到文件并将其显示在屏幕上。
编辑(添加解决方案):
有两种不同的方法,我选择后者,因为它更简单。
方式#1 - 开始工作
开始转换的结果脚本:
Start-Job -Name VideoConvert -ScriptBlock { d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Movies\Movie.log }
Get-FileTail -Wait Encoding Unicode -Path D:\Conversions\Completed\Movies\Movie.log
方式 #2 - Tee 对象
开始转换的结果脚本:
d:\Conversions\Convert.ps1 2>&1 |Tee-Object -File D:\Conversions\Completed\Movies\Movie.log
再次感谢大家。这就像我想要的那样工作。