Установите приоритет процесса FFmpeg с двухпроходным кодированием - PullRequest
0 голосов
/ 28 мая 2020

Я использую FFmpeg с PowerShell.

Я пытаюсь установить приоритет процесса при использовании FFmpeg 2 Pass Encoding.

Скрипт работает с 1 проходом и кодировкой CRF.


Скрипт

По завершении прохода 1 он снова запускает FFmpeg для прохода 2.

Примечание: Pass 1 выводит на NUL, Pass 2 выводит видеофайл.

(Start-Process ffmpeg -NoNewWindow -Wait -ArgumentList '-i "C:\Path\video.mpg" -c:v libx264 -b:v 2000K -pass 1 NUL' -PassThru).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal; 

(Start-Process ffmpeg -NoNewWindow -Wait -ArgumentList '-i "C:\Path\video.mpg" -c:v libx264 -b:v 2000K -pass 2 "C:\Path\video.mp4"' -PassThru).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal

Проблема

Использование -Wait вызывает эту ошибку PowerShell. :

Exception setting "PriorityClass": "Cannot process request because the process (14324) has exited."

Но без -Wait второй проход никогда не запускается, и я получаю эту ошибку FFmpeg:

Failed to initialize encoder: Invalid parameter
Additional information: rc_twopass_stats_in.buf not set.

1 Ответ

1 голос
/ 28 мая 2020

То, что вы должны искать, это Wait-Process.

Вам нужно будет потерять -wait, поскольку эта команда ожидает завершения процесса перед запуском следующей части скрипта

($Process = Start-Process ffmpeg -NoNewWindow -ArgumentList '-i "C:\Path\video.mpg" -c:v libx264 -b:v 2000K -pass 1 NUL' -PassThru).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal; 
Wait-Process -Id $Process.id
($Process = Start-Process ffmpeg -NoNewWindow -ArgumentList '-i "C:\Path\video.mpg" -c:v libx264 -b:v 2000K -pass 2 "C:\Path\video.mp4"' -PassThru).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal
Wait-Process -Id $Process.id

Вы можете убедиться, что процесс завершился, используя $Process.HasExited

($Process = Start-Process ffmpeg -NoNewWindow -Wait -ArgumentList '-i "C:\Path\video.mpg" -c:v libx264 -b:v 2000K -pass 1 NUL' -PassThru).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal; 
Wait-Process -Id $Process.id
$Process.HasExited
($Process = Start-Process ffmpeg -NoNewWindow -Wait -ArgumentList '-i "C:\Path\video.mpg" -c:v libx264 -b:v 2000K -pass 2 "C:\Path\video.mp4"' -PassThru).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal
Wait-Process -Id $Process.id
$Process.HasExited
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...