-
-
Save sbrown7792/855858a2a6ab812126dbb6580ae4418e to your computer and use it in GitHub Desktop.
@echo off | |
echo %* > D:\TDarr_1\Tdarr_Node\node_modules\@ffmpeg-installer\win32-x64\arg.txt | |
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "D:\TDarr_1\Tdarr_Node\node_modules\@ffmpeg-installer\win32-x64\ffmpeg_gpu1.ps1" |
$Logfile = "D:\TDarr_1\Tdarr_Node\PS.log" | |
Function LogWrite | |
{ | |
Param ([string]$logstring) | |
Add-content $Logfile -value $logstring | |
} | |
#get the saved arguments from the batch file | |
$desired_args = Get-Content "D:\TDarr_1\Tdarr_Node\node_modules\@ffmpeg-installer\win32-x64\arg.txt" -First 1 | |
LogWrite "Before: " | |
LogWrite $desired_args | |
#insert the -gpu 1 flag where it belongs. hopefully the 9999 argumenent will always be there.... | |
$desired_args = $desired_args -replace "-i", "-gpu 1 -i" | |
$desired_args = $desired_args -replace "9999", "9999 -gpu 1" | |
LogWrite "After: " | |
LogWrite $desired_args | |
#tdarr seems to execute ffmpeg when booting to make sure it works, so allow it to run without args | |
if ($desired_args -eq $null) { | |
& D:\TDarr_1\Tdarr_Node\node_modules\@ffmpeg-installer\win32-x64\ffmpeg_gpu1.exe | |
} else { | |
Start-Process D:\TDarr_1\Tdarr_Node\node_modules\@ffmpeg-installer\win32-x64\ffmpeg_gpu1.exe -NoNewWindow -ArgumentList $desired_args | |
} |
Thank you for this nice workaround, it works as described here at my setup.
It has presented another slight issue that the decode process still runs on just one of the GPUs, and not on the GPU specified with the "-gpu 0" option... so now the decode GPU/Core seems to be the bottleneck :-)
Any idea if there is an option on ffmpeg.exe where you can specify on which GPU the decode process should run?
I figured it out with a bit of help from the Tdarr discord...
Everything before -i relates to input, and everything after -i relates to the output.
So I have updated the powershell script replace lines like this:
$desired_args = $desired_args -replace "-i", "-gpu 1 -i"
$desired_args = $desired_args -replace "9999", "9999 -gpu 1"
(maybe this can be done cleaner in one line, but it works for me know...)
@heinowalther Much thanks to you and the discord! I haven't tested it on my system yet, but once I do, I will update the gist accordingly :)
Would be great if you had a linux version of this. Thanks!
@heinowalther Finally got a chance to test this - worked perfectly! I updated the gist, thanks!
@simeononsecurity Unfortunately none of my linux servers have GPUs in them, so I don't use them for transcoding & wouldn't be able to test out anything. At a high-level though, the powershell could be replaced with a bash script, and something like "sed 's/9999/9999 -gpu 1/'" would do the argument insertion.
Hi there @sbrown7792
Running two nvidia card on one system (Windows 10 21H2) one RTX 3060 (GPU-0) and a Quadro P2000 (GPU-1) i tried your gist and get and find ffmpeg is still using gpu 0 (the RTX) when transcoding
here is my PS1
$Logfile = "C:\Tdarr_Updater-p2000\Tdarr_Node\PS.log"
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
#get the saved arguments from the batch file
$desired_args = Get-Content "C:\Tdarr_Updater-p2000\Tdarr_Node\node_modules@ffmpeg-installer\win32-x64\arg.txt" -First 1
LogWrite "Before: "
LogWrite $desired_args
#insert the -gpu 1 flag where it belongs. hopefully the 9999 argumenent will always be there....
$desired_args = $desired_args -replace "-i", "-gpu 1 -i"
$desired_args = $desired_args -replace "9999", "9999 -gpu 1"
LogWrite "After: "
LogWrite $desired_args
#tdarr seems to execute ffmpeg when booting to make sure it works, so allow it to run without args
if ($desired_args -eq $null) {
& C:\Tdarr_Updater-p2000\Tdarr_Node\node_modules@ffmpeg-installer\win32-x64\ffmpeg.exe
} else {
Start-Process C:\Tdarr_Updater-p2000\Tdarr_Node\node_modules@ffmpeg-installer\win32-x64\ffmpeg.exe -NoNewWindow -ArgumentList $desired_args
}
can someone help me with the .bat file. My arg.txt file only contains %* and I get [NULL @ 000001c42af49c40] Unable to find a suitable output format for 'ECHO'
ECHO: Invalid argument
can anyone help?
I couldn't get ffmpeg to actually pick up my second gpu a RTX A2000. I ended up replacing this:
#insert the -gpu 1 flag where it belongs. hopefully the 9999 argumenent will always be there....
$desired_args = $desired_args -replace "-i", "-gpu 1 -i"
$desired_args = $desired_args -replace "9999", "9999 -gpu 1"
with this:
$desired_args = $desired_args -replace "-v error", "-v error -hwaccel_device 1"
and it seems to work for me.
Well,
-hwaccel_device 1 doesn't work with encodes just decodes apparently.
@jbeck22 , @SQLServerIO , @CanonCan , and @anyone_else
Not sure if any of you are still having problems with this, but looks like TDarr officially got a new plugin which does the multi-GPU support natively. I haven't had a chance to check it out, but just wanted to bring it to your attention, should you still need it.
I'm still running custom scripts. I'll take a poke at it.
I want to try it out, but how do I add it to Tdarr? I know how to add community plugins already...just not sure which one this is listed under.
@BigManDave Sounds like you managed to figure it out before I had a chance to reply!
Perhaps an update to the node and/or server changed the arguments that are passed to ffmpeg. For anyone following, I believe this code was first written against server version 2.00.10
Looks like my comment
hopefully the 9999 argumenent will always be there....
was a bit of foreshadowing ;)