Как вывести вывод Handbrake как на экран, так и в файл? - PullRequest
2 голосов
/ 29 сентября 2010

Итак, я использовал командную строку Handbrake для кодирования своей коллекции видео для хранения на моем NAS, чтобы я мог использовать ее на своем HTPC.Я искал способ вывода как на экран, чтобы я мог смотреть его вывод как кодирование, так и в файл, чтобы я мог вернуться и посмотреть на конкретный сеанс кодирования.

Мое решение для этогобыло использовать одно окно Powershell для запуска кодирования и вывода в файл, затем другое окно Powershell для чтения файла журнала и его отображения на экране.Это работает, но я хочу улучшить это, поскольку это не идеально.Поскольку скрипт чтения файла читает с заданным интервалом, он пропускает строки.Также, если я уменьшу интервал, это повлияет на производительность системы, делая кодирование более медленным.Есть ли способ, которым я могу перенаправить вывод первого окна как в файл, так и на экран?

Первый скрипт powershell (тот, который запускает кодировку) с именем "Convert1.ps1" (запускается изкаталог установки ручного тормоза):

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, в котором запущен один сценарий для запуска кодирования, вывода в файл и его отображения.на экране.

Редактирование (добавление решения): 2 разных способа сделать это, я использую последний, так как это проще.

Способ № 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-Object Результирующий скрипт для запуска моих преобразований:

d:\Conversions\Convert.ps1 2>&1 |Tee-Object -File D:\Conversions\Completed\Movies\Movie.log

Еще раз спасибо всем.Это работает так же, как я хотел, чтобы это работало.

Ответы [ 2 ]

3 голосов
/ 29 сентября 2010

Я бы использовал Tee-Object для этого:

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

Добавлено в 2>&1 для записи ошибок в журнал и на экран.

0 голосов
/ 29 сентября 2010

Что вы действительно хотите сделать, так это извлечь двоичный файл tail.exe из пакета UnxUtils и запустить его следующим образом:

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

К сожалению, вам нужно будет сделать это во втором окне командной строки (или PowerShell), но он " f ollow" этот файл и отобразит строки из журнала по мере их добавления.

Если вы действительно хотите сохранить это в одном окне, вам понадобится PowerShell v2, и вы можете запустить кодирование как задание (позволяющее запускать его в фоновом режиме), а затем выполнить эту команду с вызовом tail для отображения результаты:

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