powershell - 如何将 Handbrake 输出同时输出到屏幕和文件?

标签 powershell exe output-redirect

所以我一直在使用 Handbrake 命令行对我的视频收藏进行编码以存储在我的 NAS 上,以便我可以在我的 HTPC 上使用它。我一直在寻找一种既可以输出到屏幕的方法,这样我就可以在编码时观看它的输出,也可以输出到文件,这样我就可以返回并查看特定的编码 session 。

我的解决方案是使用一个 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

再次感谢大家。这就像我想要的那样工作。

最佳答案

我将使用 Tee-Object 来实现此目的:

./HandbrakeCLI.exe -i infile -o outfile ... 2>&1 | Tee-Object -File movie.log

添加到2>&1中以将错误捕获到日志和屏幕中。

关于powershell - 如何将 Handbrake 输出同时输出到屏幕和文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3822650/

相关文章:

java - 如何在非英语系统中初始化 Gradle 项目?

java - 除了ant脚本之外,还有其他方法可以从java源创建exe文件吗

c++ - 链接器是将整个库包含到 .exe 文件还是仅包含该库中程序中使用的函数?

linux - 测试用户是否可以在 Bash 中执行 sudo 的最佳方法是什么?

bash - 在 bash 中有条件地将命令的输出定向到/dev/null

PowerShell 将日期添加到文件夹中的所有文件名

powershell - 选择字符串和区分大小写

multithreading - Foreach 对象比 foreach -parallel 更快?

python - 创建 exe 时,cx_Freeze 在我的项目中找不到自定义模块

python - 将 python stdout 重定向到文件失败并出现 UnicodeEncodeError