Имя пользователя:
Пароль:
 

Название темы: Запуск FFprobe на Powershell
Показать сообщение отдельно

Старожил


Сообщения: 232
Благодарности: 21

Профиль | Отправить PM | Цитировать


DJ Mogarych, спасибо большое, просмотрел несколько ссылок, но так и не смог что-либо применить к своему коду.
Но решение всё же найдено. На social.technet.microsoft.com предложили такой код (за что большая благодарность Vector BCO ) :
Код: Выделить весь код
$i = 0
foreach ($OL in @(1..255)){ # 1 foreach вместо 2х и тем более 3х
    Start-Job -Name ffprobe -ArgumentList $OL -ScriptBlock {
        $OL = $args[0]
        $URI = "http://79.105.135.20:5055/udp/239.28.0.$OL`:2020
        $soft = 'C:\full\path\to your program\ffprobe.exe' # Полный путь, или можно пробовать играться с переменной $Path. Для начала я бы не заморачивался со вторым
        $utf8 = [System.Text.Encoding]::GetEncoding(65001)
        cmd /c $utf8.GetString($utf8.GetBytes("$soft -timeout 6000000 -hide_banner -select_streams v:1 -print_format json=compact=1 -show_entries format=filename -show_programs -show_entries program=service_name -of default=noprint_wrappers=1:nokey=0 $URI >> C:\temp\out_$OL.json")) # И снова полный путь
    }

    # Если запустить 255 потоков, то производительность сильно просядет (скорее всего)
    # По этому мое предложение запускать по 5 задач, ждать их выполнения, после чего запускать следующие 5 задач. При желании можете увеличить до 10 или 15
    if (($i -ge 5) -or ($OL -eq 255){
        Get-Job ffprobe | Wait-Job -Timeout 300
        Get-Job ffprobe | Receive-Job
        Get-Job ffprobe | Remove-Job -Force 
        $i = 0
    } else {$i++}
}
Пришлось немного повозиться с жесткой привязкой путей, но всё получилось, как было нужно.

Последний раз редактировалось Uragan66, 09-12-2019 в 23:58. Причина: опечатка

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:57, 09-12-2019 | #9

Название темы: Запуск FFprobe на Powershell