Can you enable low-level logging in your Voukoder options?
Tried your settings in Vegas 20 with the same version of Voukoder, and it works . . .
Can you enable low-level logging in your Voukoder options?
Tried your settings in Vegas 20 with the same version of Voukoder, and it works . . .
[20:14:06] - Audio -------------------------------------
[20:14:06] Timebase: 1/192000
[20:14:06] Channels: 2
[20:14:06] Encoder: aac
[20:14:06] Options: _sampleFormat=fltp b=192000 profile=aac_low
[20:14:06] Side data: <none>
[20:14:06] Filters: filter.adelay#delays=8525S:all=1
[20:14:06] ---------------------------------------------
[20:14:06] Opening codec: h264_nvenc with options: gpu=0|multipass=disabled|preset=p6|profile=high|qp=15|rc=constqp
[20:14:06] Opening codec: aac with options: b=192000|profile=aac_low
[20:14:06] Failed opening codec: aac
[20:14:06] Unable to open audio encoder: aac
[20:14:06] Closing encoders ...
[20:14:07] Opening encoder failed! Aborting ...
[20:14:07] Unable to open encoder.
Alles anzeigen
Lower the audio sample rate of your Vegas project and try again. AAC has a limit of 96 kHz.
using Voukoder 13.1
And there's your problem. Use version 13.0 instead.
See this forum: Output file is not playable on Windows
What's the correct configuration of ffmpeg?
What i mean to say is that something about your audio/video output format from Vegas needs changing. It's probably nothing major.
What specifically are you trying to do? What is your video project resolution, framerate, format, etc? What is your audio sample rate and bit depth?
Post your most recent logfile from your %localappdata%\VoukoderPro\logs folder. That will likely tell us what the problem is.
Excellent!
Confirmed working in version 0.7.5. It is now possible to run complex filters on any of the 3 GPUs in the system, or shuffle video data back and forth between the GPUs as desired. Thanks!
Updated 3-GPU test scene (extremely inefficient, just a proof-of-concept), works in VoukoderPro 0.7.5: 3-GPU test scene for VoukoderPro 0.7.5.zip
Confirmed working. Thanks!
The following may be the problem:
Correct syntax should be: hwupload_cuda=1
It is in fact possible to use multiple GPUs from a single FFmpeg command line. There doesn't seem to be a lot of information out there on this topic. However, the following example uses GPU0 to perform resolution-scaling, then GPU1 and GPU2 to encode different formats (1080p, 720p).
In FFmpeg command line, assigning each NVENC encoder "-gpu 1" or "-gpu 2" is completely pointless, as the encoder always uses whatever GPU was targeted by the previous hwupload_cuda command, regardless of NVENC GPU preference in the command line. If you (nonsensically) specify separate GPUs for Upload and Encode, the Upload GPU setting overrides the Encode GPU setting, and both actions take place on the Upload GPU. So adding/removing the NVENC "-gpu" options makes no difference in function.
Using 3 GPUs is hilariously inefficient for such a small job, but the following command is a working example of FFmpeg running a complex operation using 3 GPUs at once. Using uncompressed AVI file input, which seems the most similar to what VoPro is doing (no hardware decoding):
ffmpeg -y -probesize 42M -analyzeduration 10 -i "d:\temp\input.avi" -filter_complex:a "[0:a]asplit [asplit1][asplit2]" -filter_complex:v "[0:v]hwupload_cuda=0, split [split1][split2], [split1]scale_cuda=1920:1080:interp_algo=4:format=yuv420p:force_original_aspect_ratio=1, hwdownload, hwupload_cuda=1 [split1scaled],[split2]scale_cuda=1280:720:interp_algo=4:format=yuv420p:force_original_aspect_ratio=1, hwdownload, hwupload_cuda=2 [split2scaled]" -map "[asplit1]" -c:a ac3 -b:a 96k -map "[split1scaled]" -c:v h264_nvenc -gpu 1 -2pass 0 -b:v 2500k -maxrate 5000k -bufsize 5000k -bluray-compat 1 -coder 1 -cq 0 -g 48 -level 4 -preset:v p7 -profile:v high -rc:v vbr -rc-lookahead 20 -tune:v hq "output_1080v4.9.mp4" -map "[asplit2]" -c:a aac -profile:a aac_main -b:a 96k -map "[split2scaled]" -c:v h264_nvenc -gpu 2 -2pass 0 -b_ref_mode:v middle -preset:v p7 -profile:v 2 -qp 30 -rc 0 -rc-lookahead 20 -tune:v hq "output_720v2.1.mp4"
Corresponding VoPro Scene would be something like this: 3-GPU.scene.zip This cannot yet be tested due to the current bug (as of version 0.7.4).
No memory leaks observed using FFmpeg command line. Tested all 3 GPUs individually.
The following is for GPU1. To change to a different GPU, just change the target of hwupload_cuda. Using AVI file input, which is the closest to what VoPro is doing (no hardware decoding):
ffmpeg -y -probesize 42M -analyzeduration 10 -i "d:\temp\input.avi" -filter_complex:a "[0:a]asplit [asplit1][asplit2]" -filter_complex:v "[0:v]hwupload_cuda=1, split [split1][split2], [split1]scale_cuda=1920:1080:interp_algo=4:format=yuv420p:force_original_aspect_ratio=1 [split1scaled],[split2]scale_cuda=1280:720:interp_algo=4:format=yuv420p:force_original_aspect_ratio=1 [split2scaled]" -map "[asplit1]" -c:a ac3 -b:a 96k -map "[split1scaled]" -c:v h264_nvenc -2pass 0 -b:v 2500k -maxrate 5000k -bufsize 5000k -bluray-compat 1 -coder 1 -cq 0 -g 48 -level 4 -preset:v p7 -profile:v high -rc:v vbr -rc-lookahead 20 -tune:v hq "output_1080v4.9.mp4" -map "[asplit2]" -c:a aac -profile:a aac_main -b:a 96k -map "[split2scaled]" -c:v h264_nvenc -2pass 0 -b_ref_mode:v middle -preset:v p7 -profile:v 2 -qp 30 -rc 0 -rc-lookahead 20 -tune:v hq "output_720v2.1.mp4"
Update for version 0.7.4:
PS, If you want a quick and dirty way to add more cards to your system for multi-GPU testing, you could grab a couple x1 riser cables and burned-up cards from a starving miner. 😋 The performance won't be great because of the PCIe x1 bandwidth bottleneck, but it'd be good enough for testing.
Just taking a couple steps back here and collecting a bit more data. And I triple-checked that GPU acceleration was turned off in Vegas.
Version 0.7.2.8 does use the intended GPU1/2, with no 3D/CUDA activity on any cards. However, when encoding on GPU0 (FFmpeg designation), which happens to also be Windows' primary card, 3D/CUDA sees a 93% load even with all windows minimized and GPU acceleration turned off in Vegas.
Version 0.7.4, as mentioned, cannot do any complex operations on GPUs other than GPU0. Anything that requires both CUDA Upload and an NVENC Encoder nodes fails because "gpu" is declared/assigned multiple times in the FFmpeg initialization. GPU0 still has the same 3D/CUDA activity on it, similar to v0.7.2.8 behavior above, and only when encoding using GPU0. No GPU0 activity when encoding with GPU1/2. No 3D/CUDA activity on any cards when encoding on GPU 1/2. No CUDA filters are being used in the test scenes.
Seems like the duplicate assertions of the target GPU are causing problems. Directly encoding (Video Input -> Encoder) on GPU0/1/2 works. But when using (Video Input -> CUDA Upload -> Encoder), FFmpeg scrams.
This appears to be caused by the duplicate GPU assertion commands issued to FFmpeg (both Upload and Encoder nodes have options to choose a GPU in Scene Designer). These duplicate commands are not being accepted by FFmpeg. For instance, commanding an Upload to GPU2, then commanding an NVENC encode also on GPU2. FFmpeg acknowledges the first assertion, but rejects the second.
As mentioned in the previous post, I don't believe FFmpeg allows you to use the "-gpu " assignment more than once in a single instance. Even if it's to the same GPU.
This only seems to affect GPUs other than GPU0. When GPU0 is used, I don't see any GPU assertion entries at all in the log file.
In this log, when attempting to run on GPU2, it looks like FFmpeg is choking on the second assertion of "-gpu 2". See log, especially lines 2 and 14:
2023-09-11 15:06:04 (info) [Router.cpp:197] Executing init phase for track #0 (video) ...
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'gpu' to value '2'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'outputs' to value '2'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'w' to value '1280'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'h' to value '720'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'w' to value '1920'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'h' to value '1080'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Could not set non-existent option 'gpu' to value '2'
2023-09-11 15:06:04 (trace) [FFmpeg:0] Error applying filter options
2023-09-11 15:06:04 (error) [InputNode.cpp:104] Unable to parse filter graph.
2023-09-11 15:06:04 (error) [Router.cpp:202] Init phase of track #0 (video) failed!
2023-09-11 15:06:04 (error) [Router.cpp:242] Initialization failed: -11
2023-09-11 15:06:04 (info) [VoukoderPro.cpp:502] Unable to start VoukoderPro: FFmpeg error.
Alles anzeigen
Attempts to encode on GPU0 run properly, but this is probably because according to the log, "-gpu 0" is never asserted:
2023-09-11 15:22:50 (info) [Router.cpp:197] Executing init phase for track #0 (video) ...
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'width' to value '1920'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'height' to value '1080'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'pix_fmt' to value 'yuv420p'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'time_base' to value '1001/24000'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'pixel_aspect' to value '1/1'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'outputs' to value '2'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'w' to value '1280'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'h' to value '720'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'w' to value '1920'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'h' to value '1080'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1'
2023-09-11 15:22:50 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda'
2023-09-11 15:22:50 (trace) [FFmpeg:0] w:1920 h:1080 pixfmt:yuv420p tb:1001/24000 fr:0/1 sar:1/1
2023-09-11 15:22:50 (trace) [FFmpeg:0] Loaded lib: nvcuda.dll
Alles anzeigen
Rendering is very slow when I render with PROCESSOR
Yes. So if you value speed over top quality, you can use your GPU.
BTW, both CPU and GPU are processors. That's what the 'P' stands for.
Also, if you want to save yourself some trouble later on, start with the YUV 4:2:0 template instead of the YUVA 4:4:4 one you selected in the screenshot. Many video formats choke on the latter.
.... and if that wasn't the problem, post your log file (%localappdata%\VoukoderPro\logs\)
You've got something configured wrong in a way that FFmpeg refuses to deal with.
For great quality, you'll need CPU encoding (e.g., x265), not GPU. If you want speed but are content with okay/decent quality, you would use GPU (e.g., NVENC).
That said, there are quite a few threads on this site related to settings for getting the most out of your CPU/GPU encoding. I suggest you take a look through them.
Is $(OutputFileName) supposed to include the filename extension? It currently does, as seen in above screenshots. Only reason I ask: there is a separate $(OutputFileExtension) variable.
Why?
It's a beta version, that's why. You can open Scene Designer manually from the Windows Start Menu.
Also, if you want to save yourself some trouble later on, start with the YUV 4:2:0 template instead of the YUVA 4:4:4 one you selected in the screenshot. Many video formats choke on the latter (too much video information; alpha = transparency).
... using its DLL variants. So for each export it creates a new instance.
I don't recall ever finding a way to control more than one GPU at a time with FFmpeg command line. Usually you specify "-gpu 1" etc. at the beginning, and that's the only card targeted by the entire command line. For multiple cards, you use multiple command lines.
Am I to understand that VoukoderPro, with its FFmpeg DLL version, is under the same restrictions of 1 GPU per render/export?
Not a huge problem for what I do, but just curious. Other people do far heavier stuff.