0

我通过 FFmpeg 制作了屏幕录制公式,它适用于 Counter-Strike 和 Dota 2。但它不适用于《坦克世界》。所以我遇到了麻烦。几分钟后坦克世界崩溃了。并且录制速度低于 1x(约 0.87x 并且变得越来越慢)。所以我认为我需要提高FFmpeg的优先级进程。在我的 Youtube 频道上寻找它的测试:我对 ffmpeg 屏幕录制的测试

所以我想自动为这个过程设置“高”或“实时”优先级!

但现在我可以通过两种方式做到这一点:

  1. 通过任务管理器;
  2. 通过第二个 PowerShell 窗口和第二个“复制粘贴”。

但两种方法都需要时间(5-20​​ 秒)。这不好。我无法Start-Process ffmpeg -NoNewWindow -Wait -ArgumentList将 PriorityClass 设置为此处的stackoverflow,因为我的 FFmpeg 的 ArgumentList 太大。而且我不能start-process pwsh -ArgumentList为新的 powershell 窗口设置 PriorityClass。它给我写了一个错误。我为 Youtube 测试过的公式:

ffmpeg -hide_banner -loglevel +repeat+level+info `
-f dshow -thread_queue_size 8192 -audio_buffer_size 100 -rtbufsize 2147M `
-i 'audio=@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E146464-DB61-4309-AFA1-3578E927E935}' `
-f dshow -thread_queue_size 8192 -audio_buffer_size 100 -rtbufsize 2147M `
-i 'audio=@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{472DBE92-04B3-48AB-A937-ED4CD6A85625}' `
-f gdigrab -hwaccel_device cuda -hwaccel cuda -hwaccel_output_format cuda -video_size 1920:1080 -thread_queue_size 8192 -draw_mouse 1 -show_region 0 -offset_x 0 -offset_y 0 -rtbufsize 2147M -probesize 500M -analyzeduration 500M -framerate 60 -i desktop `
-noautoscale -shortest `
-map '0:a:0' -c:a copy -f wav "FFmpeg_Screen_Recording_$(get-date -f yyyy-MM-dd_HH-mm-ss).wav" `
-map '1:a:0' -c:a copy -f wav "FFmpeg_WebCAM_Recording_$(get-date -f yyyy-MM-dd_HH-mm-ss).wav" `
-map '2:v:0' -c:v h264_nvenc -gpu 0 -vsync 1 -r 60 -video_size 1920x1080 -video_track_timescale 60 -copytb 0 -delay 0 -rc constqp -qp 0 -rc-lookahead 0 -zerolatency 1 -maxrate:v 512M -bufsize:v 512M -pix_fmt yuv444p -profile:v high444p -preset p1 -tune ull -level 6.2 -coder vlc -weighted_pred 0 `
-f mov "FFmpeg_Screen_Recording_$(get-date -f yyyy-MM-dd_HH-mm-ss).mov"

我目前的高优先级公式 - 第一个选项卡:

start-process pwsh -ArgumentList '-noexit' 
Get-Process -name 'pwsh' | foreach { $_.PriorityClass = "High" }
$startExe = ffmpeg -hide_banner -loglevel +repeat+level+info `
-f dshow -thread_queue_size 8192 -audio_buffer_size 100 -rtbufsize 2147M `
-i 'audio=@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E146464-DB61-4309-AFA1-3578E927E935}' `
-f dshow -thread_queue_size 8192 -audio_buffer_size 100 -rtbufsize 2147M `
-i 'audio=@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{472DBE92-04B3-48AB-A937-ED4CD6A85625}' `
-f gdigrab -hwaccel_device cuda -hwaccel cuda -hwaccel_output_format cuda -video_size 1920:1080 -thread_queue_size 8192 -draw_mouse 1 -show_region 0 -offset_x 0 -offset_y 0 -rtbufsize 2147M -probesize 500M -analyzeduration 500M -framerate 60 -i desktop `
-noautoscale -shortest `
-map '0:a:0' -c:a copy -f wav "FFmpeg_Screen_Recording_$(get-date -f yyyy-MM-dd_HH-mm-ss).wav" `
-map '1:a:0' -c:a copy -f wav "FFmpeg_WebCAM_Recording_$(get-date -f yyyy-MM-dd_HH-mm-ss).wav" `
-map '2:v:0' -c:v h264_nvenc -gpu 0 -vsync 1 -r 60 -video_size 1920x1080 -video_track_timescale 60 -copytb 0 -delay 0 -rc constqp -qp 0 -rc-lookahead 0 -zerolatency 1 -maxrate:v 512M -bufsize:v 512M -pix_fmt yuv444p -profile:v high444p -preset p1 -tune ull -level 6.2 -coder vlc -weighted_pred 0 `
-f mov "FFmpeg_Screen_Recording_$(get-date -f yyyy-MM-dd_HH-mm-ss).mov"

第二个选项卡(第二个复制粘贴操作):

Get-Process -name 'ffmpeg' | foreach { $_.PriorityClass = "High" }

我怎样才能在唯一的一个动作中做到这一点?

4

0 回答 0