【问题标题】:How can I output Handbrake output to both the screen and to a file?如何将手刹输出输出到屏幕和文件?
【发布时间】:2011-04-18 20:52:03
【问题描述】:

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

我的解决方案是使用一个 Powershell 窗口运行编码并输出到文件,然后使用另一个 Powershell 窗口读取日志文件并将其显示在屏幕上。这行得通,但我想改进它,因为它并不完美。因为读取文件脚本以设定的间隔读取,所以它会丢失行。此外,如果我减少间隔,它会对系统性能产生影响,使编码运行得更慢。有没有办法可以将第一个窗口的输出重定向到文件和屏幕?

第一个名为“Convert1.ps1”的 powershell 脚本(启动编码的脚本)(从手刹安装目录运行):

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

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

【问题讨论】:

    标签: powershell exe output-redirect


    【解决方案1】:

    您真正想做的是从UnxUtils package 中获取tail.exe 二进制文件并按如下方式运行:

    tail -f D:\Conversions\Completed\Movies\9.29.1010.log
    

    不幸的是,您需要在第二个命令提示符(或 PowerShell)窗口中执行此操作,但它会“follow”该文件并在添加时显示日志中的行。

    如果您真的想将其保留在单个窗口中,您将需要 PowerShell v2,您可以将编码作为作业启动(允许它在后台运行),然后按照该命令调用 tail 进行显示结果:

    Start-Job -ScriptBlock { ./HandbrakeCLI.exe -i "in" -o "out" "params" > log.txt }
    tail -f log.txt
    

    【讨论】:

    • 啊,有道理。谢谢,我试试看。如果我能让它正常工作,我会回来的。
    • 好的,只有一个问题,tail产生的输出是双倍行距的。
    • Powershell Community Extensions - pscx.codeplex.com的tail函数怎么样?
    • 啊,谢谢 fenster,这行得通。必须将编码指定为 Unicode 才能使其工作,但它工作得很好。
    【解决方案2】:

    我会为此使用 Tee-Object:

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

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

    【讨论】:

    • 我最初尝试过,但问题是,我分批执行这些命令,并且在这些批处理中,我执行诸如记录 covnersion 开始和停止的日期和时间以及创建目录和其他各种文件任务。我想从整批转换中捕获所有内容(通常一次像 10 到 20 个视频转换),以便在我在某个地方遇到错误时诊断出现的任何问题。所以我需要一个用于整个批次的日志文件,尽管我使用了 fenster 对尾部函数的建议,但 Goyuix 的解决方案仍然有效。
    • 其实等等...确实效果更好...尽管我将其更改为在 convert.ps1 文件上工作。
    • 啊,是的... Tee-Object。好建议!
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 2017-12-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多