Beiträge von Joe24
-
-
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):
Codeffmpeg -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):
Codeffmpeg -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:
- Memory leak does not occur on any of the 3 cards in my system when using simple Video Source -> NVENC Encode scenes.
- Memory leak *does* occur using more complicated Scenes involving Video Source -> CUDA Upload -> NVENC Encode. These Scenes are only possible to test on GPU0, due to the current bug involving duplicate "gpu" assertions in the FFmpeg command.
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:
Code
Alles anzeigen2023-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.
Attempts to encode on GPU0 run properly, but this is probably because according to the log, "-gpu 0" is never asserted:
Code
Alles anzeigen2023-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
-
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.
-
As it happens, using Download/Upload to transfer data between cards doesn't work. I'm not sure it's even possible to move video data between GPUs mid-task, or even use more than one GPU with a single instance of FFmpeg. This might be an FFmpeg limitation? Tried several different ways, and couldn't get it to work.
When specifying an Upload to GPU0 -> Encode on GPU1, throws an FFmpeg error:
Tried parallel Upload filters directly from Video Input node, uploading to 2 different cards (GPU0/1), and it throws the same type of error:
Using Upload to GPU0 -> Scale -> Download from GPU0 -> Upload to GPU1 -> Encode on GPU1 doesn't work either. Throws the same FFmpeg error:
Code
Alles anzeigen2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPushCurrent(s->hwctx->cuda_ctx) 2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuModuleUnload(s->cu_module) 2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPopCurrent(&dummy) 2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPushCurrent(s->hwctx->cuda_ctx) 2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuModuleUnload(s->cu_module) 2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPopCurrent(&dummy) 2023-09-07 16:41:03 (info) [Router.cpp:152] Dumping system information: Architecture: x64 Vendor ID: GenuineIntel Model name: Intel(R) Xeon(R) CPU E5-2470 v2 @ 2.40GHz Frequency: 2400 MHz Quantities: CPU packages : 2 Physical CPUs: 20 Logical CPUs : 40 Caches: L1: Size : 32768 Line size : 64 Associativity: 8 Type : Data L2: Size : 262144 Line size : 64 Associativity: 8 Type : Unified L3: Size : 26214400 Line size : 64 Associativity: 20 Type : Unified Instruction set support: 3D-now!: false MMX : true SSE : true SSE2 : true SSE3 : true AVX : true Memory: Physical: Available: 92780867584 Total : 103025205248 Virtual: Available: 140448929554432 Total : 140737488224256 Kernel: Variant: Windows NT Version: 10.0.19041 build 3155 OS: Name : Windows NT Full name: Microsoft Windows 10 Pro Version : 10.0.19045 build 3324 GPUs: No detection methods enabled 2023-09-07 16:41:03 (info) [Router.cpp:185] Using input node 9309cf35-7e4c-40e3-b133-4754fe21a3f3 for track #0 (video). 2023-09-07 16:41:03 (info) [Router.cpp:186] Executing pre-init phase for track #0 (video) ... 2023-09-07 16:41:03 (debug) [InputNode.cpp:78] Filter config: buffer@9309cf357e4c40e3b1334754fe21a3f3=width=1920:height=1080:pix_fmt=yuv420p:time_base=1001/24000:pixel_aspect=1/1,hwupload_cuda[673157b8b5c94fcbb6460873239f5e54];[673157b8b5c94fcbb6460873239f5e54]split=2[split_74972bd9eab84782948d76fe847c9664][split_21f42936466e4121b3817c10e2155724];[split_74972bd9eab84782948d76fe847c9664]scale_cuda=w=1920:h=1080:interp_algo=3:force_original_aspect_ratio=1,hwdownload,hwupload_cuda=gpu=1,format=pix_fmts=cuda,buffersink@a5bebec201e640c6940a6f7d9caca738;[split_21f42936466e4121b3817c10e2155724]scale_cuda=w=1280:h=720:interp_algo=3:force_original_aspect_ratio=1,format=pix_fmts=cuda,buffersink@bc23b883870a452fa61cea7d0d361e4c 2023-09-07 16:41:03 (info) [Router.cpp:196] Pre-init phase for track #0 (video) succeeded. 2023-09-07 16:41:03 (info) [Router.cpp:197] Executing init phase for track #0 (video) ... 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'width' to value '1920' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'height' to value '1080' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pix_fmt' to value 'yuv420p' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'time_base' to value '1001/24000' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pixel_aspect' to value '1/1' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'outputs' to value '2' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'w' to value '1920' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'h' to value '1080' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'gpu' to value '1' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'w' to value '1280' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'h' to value '720' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Could not set non-existent option 'gpu' to value '1' 2023-09-07 16:41:03 (trace) [FFmpeg:0] Error applying filter options 2023-09-07 16:41:03 (error) [InputNode.cpp:104] Unable to parse filter graph. 2023-09-07 16:41:03 (error) [Router.cpp:202] Init phase of track #0 (video) failed! 2023-09-07 16:41:03 (error) [Router.cpp:242] Initialization failed: -11 2023-09-07 16:41:03 (info) [VoukoderPro.cpp:502] Unable to start VoukoderPro: FFmpeg error.
It would certainly be nice to run multiple GPUs from a single Vegas render, but if this is in fact an FFmpeg limitation, I guess there's not much anybody can do about it except to run multiple Vegas instances, each with a separate VoukoderPro Scene controlling it's own GPU. Unless VoPro could run multiple FFmpeg instances from the same Vegas output buffer?
-
Any chance of adding AC3 output file format to the muxer options?