StreamFX (for OBS Studio)

StreamFX (for OBS Studio) 0.9.0

Xaymar

Active Member
StreamFX is a plugin to libOBS (OBS Studio, StreamElements OBS Live) that adds new sources, filters and transitions to give you the ability to drastically improve your stream and recording setup past what was possible in OBS Studio until now. Whether it is blurring out a region, moving something in 3D, or just writing your own shaders as a new transition, source or filter - StreamFX has it all.



Support the StreamFX project!

Like any other free project, StreamFX relies on donations to be continuously developed and stay free. If StreamFX helped you, consider helping the StreamFX project by making a one time donation via PayPal, or a continuous donation via Patreon or Github Sponsors!

Contributing

There's two ways you can directly contribute to the project. One is by submitting translations into your language on Crowdin, and the other is by contributing code to the project.

Further Links
 
Last edited:

RibShark

New Member
Thanks a lot for this! I use a blurred version of the gameplay for the stream background, and previously I had to create a virtual capture card using Dxtory and use ffdshow to blur it, which was very cumbersome, but this works a lot better and uses less CPU.
 

regidark

New Member
Seems exactly what i was looking for. Unfortunately i can´t install it. Please could you tell me how to install it correctly?

thanks in advance and for your plugin
 

Xaymar

Active Member
Seems exactly what i was looking for. Unfortunately i can´t install it. Please could you tell me how to install it correctly?

thanks in advance and for your plugin
The directory structure in the .zip and .7z archive matches the directory structure of an installed obs-studio. For example if you installed obs-studio into C:\Program Files (x86)\obs-studio, unpack it so that the data and obs-plugins directory match up, which pretty much just means unpack it to the same directory.
 

regidark

New Member
The directory structure in the .zip and .7z archive matches the directory structure of an installed obs-studio. For example if you installed obs-studio into C:\Program Files (x86)\obs-studio, unpack it so that the data and obs-plugins directory match up, which pretty much just means unpack it to the same directory.
Xaymar i did what you said but i don´t find the menus, once i add a source i don´t see the options of your plugin... do you have any idea on what can be the problem?
thanks again
 

Chor1Pan

New Member
Hi Xaymar, when i try to add the filter effects i got an error and obs closes... this happens on 32bits OBS.

Unhandled exception: c0000005
Date/Time: 2017-11-05, 20:40:46
Fault address: 51EF6F8F (c:\program files (x86)\obs-studio\obs-plugins\32bit\obs-stream-effects.dll)
libobs version: 20.1.1
Windows version: 6.1 build 7601 (revision: 23889; 64-bit)
CPU: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz


Code:
Unhandled exception: c0000005
Date/Time: 2017-11-05, 20:40:46
Fault address: 51EF6F8F (c:\program files (x86)\obs-studio\obs-plugins\32bit\obs-stream-effects.dll)
libobs version: 20.1.1
Windows version: 6.1 build 7601 (revision: 23889; 64-bit)
CPU: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz


Thread 3150 (Crashed)
Stack    EIP      Arg0     Arg1     Arg2     Arg3     Address
06F7F3D0 51EF6F8F 00000000 51EEF662 05C28460 0E798E80 obs-stream-effects.dll!GS::VertexBuffer::get+0x8f
06F7F3F8 51EF6EF7 05C28460 0E798E80 045D99A0 004CAD64 obs-stream-effects.dll!GS::VertexBuffer::get+0x7
06F7F400 51EEF662 00000000 06F7F4DC 5B138600 0E7D9780 obs-stream-effects.dll!Filter::Transform::Instance::video_render+0x672
06F7F4C4 51EEFACE 0E7D9780 00000000 0E798E80 06F7F4EC obs-stream-effects.dll!Filter::Transform::video_render+0xe
06F7F4D0 5B138600 0E798E80 0E798E80 06F7F500 5B13A566 obs.dll!obs_source_main_render+0x60
06F7F4E4 5B13B0EA 0E798E80 0E798E80 0E93AF40 06F7F510 obs.dll!render_video+0x9a
06F7F4F4 5B13A566 0E798E80 0E93AF40 06F7F524 5B13A566 obs.dll!obs_source_video_render+0x36
06F7F508 5B13B0CE 0E93AF40 0E93AF40 05C28460 06F7F560 obs.dll!render_video+0x7e
06F7F518 5B13A566 0E93AF40 05C28460 00000A00 008711D8 obs.dll!obs_source_video_render+0x36
06F7F52C 5B16A0D4 05C28460 0E786E80 0E79A660 06F7F6B0 obs.dll!render_item+0x214
06F7F578 5B16616B 0E7459C0 00000000 0E79A660 06F7F5BC obs.dll!scene_video_render+0x15b
06F7F5A0 5B1385E9 0E79A660 0E79A660 06F7F5D0 5B13A566 obs.dll!obs_source_main_render+0x49
06F7F5B4 5B13B0EA 0E79A660 0E79A660 0E79A660 06F7F6A0 obs.dll!render_video+0x9a
06F7F5C4 5B13A566 0E79A660 06F7F5F0 00000040 0E786E80 obs.dll!obs_source_video_render+0x36
06F7F5D8 5B13F953 0E786E80 52562210 06F7F6D4 5B1385E9 obs.dll!obs_transition_video_render+0x303
06F7F6B8 525621C2 0E7782C0 00000000 0E786E80 06F7F6E4 obs-transitions.dll!fade_video_render+0x12
06F7F6C8 5B1385E9 0E786E80 0E786E80 06F7F6F8 5B13A566 obs.dll!obs_source_main_render+0x49
06F7F6DC 5B13B0EA 0E786E80 0E786E80 030BD014 06F7F710 obs.dll!render_video+0x9a
06F7F6EC 5B13A566 0E786E80 030BCDF8 00000000 06F7F754 obs.dll!obs_source_video_render+0x36
06F7F700 5B165EE2 030BD010 030BD000 00000000 030BCDF8 obs.dll!obs_view_render+0x42
06F7F718 5B16E477 030BCDF8 00000000 00000002 00000000 obs.dll!render_main_texture+0xd7
06F7F75C 5B16E716 030BCDF8 00000000 00000001 5B18BBBC obs.dll!render_video+0x26
06F7F780 5B16DCD0 5B18BC1C 5B18BC08 5B18BC08 5B18BBF8 obs.dll!output_frame+0x60
06F7F814 5B16DA78 030BCD60 05D9B7A8 008711F8 00000000 obs.dll!obs_video_thread+0x158
06F7F888 705567D6 0462AB90 909A2A7D 00000000 05D9B7A8 w32-pthreads.dll!ptw32_threadStart+0x76
06F7F8C4 731DC01D 00000000 06F7F90C 76B8336A 05D9A888 msvcr120.dll!0x731dc01d
06F7F8FC 731DC001 05D9A888 06F7F94C 771F9902 05D9A888 msvcr120.dll!0x731dc001
06F7F908 76B8336A 05D9A888 7731F6B8 00000000 00000000 kernel32.dll!0x76b8336a
06F7F914 771F9902 731DBFB4 05D9A888 00000000 00000000 ntdll.dll!0x771f9902
06F7F954 771F98D5 731DBFB4 05D9A888 00000000 00000000 ntdll.dll!0x771f98d5
 

Xaymar

Active Member
Xaymar i did what you said but i don´t find the menus, once i add a source i don´t see the options of your plugin... do you have any idea on what can be the problem?
thanks again
These are Filters (and in the future Transitions). You have to go to the Filters menu of a Source to add them, they'll be under Effect Filters.

Hi Xaymar, when i try to add the filter effects i got an error and obs closes... this happens on 32bits OBS.
It looks like you tried to add a Transform filter. I'm not exactly sure of the crash location, as the one in the crash log would mean it crashed when returning a value.
 

Xaymar

Active Member
Will this be coming to the Mac as well?
At the moment only Windows is supported, though other platforms could theoretically also be supported with enough time. Right now the plugin depends on the ability to be able to manage memory itself, which OBS Studio does not allow it to do. I have submitted a PR in the past to get this fixed, but it is just sitting there since August: https://github.com/jp9000/obs-studio/pull/993
 

Yurlyn

Member
You absolute god! I've been waiting to mess around with the 3D transform in OBS but I didn't know how long that would take to actually get implemented. I so happened to mess around with OBS Studio at the moment (making a new scene collection in for dj-ing) and I was wondering if someone smart and not lazy could just make a 3D transform thing and implement it as a filter and here you are xD

Thank you so much for this! :D
 

Xaymar

Active Member
Sure, I do it... png "blur" mask. but is not the same... I want blur the edges to save encode bitrate/upload bandwidth... get more quality on center and less at borders.
sample video
https://go.twitch.tv/videos/200801313
You do not increase quality by blurring the edges. All you are doing is making the encoders job harder and actually decrease quality because it now has less chances to do motion estimation. If you want better quality:
  • Increase the bitrate
  • Decrease resolution
  • Decrease framerate
I've been doing tests for video quality for a half year now and the only way to actually increase video quality is to spend more time encoding. Nothing else actually helps, more often it makes it worse.
 

Diego Aguirre

New Member
You do not increase quality by blurring the edges. All you are doing is making the encoders job harder and actually decrease quality because it now has less chances to do motion estimation. If you want better quality:
  • Increase the bitrate
  • Decrease resolution
  • Decrease framerate
I've been doing tests for video quality for a half year now and the only way to actually increase video quality is to spend more time encoding. Nothing else actually helps, more often it makes it worse.
at same resolution and frame rate... more "black" means less (resolution) data. less data at same bitrate (upload), less compress (encoder load).

motion estimation ~ bframes
http://forum.digital-digest.com/f20/i-p-b-frames-explained-9785.html
"every video frame is broken into blocks of 8x8 pixels"

better center motion estimation/quality, worse edge motion estimation/quality ... at same bitrate (upload), resolution and frame rate.

ll try show u ... 2 steps: lossless local rec, then encode again, w and w/o png "blur" mask filters... cpu x quality x size
(did u see my sample?)
 

Xaymar

Active Member
at same resolution and frame rate... more "black" means less (resolution) data. less data at same bitrate (upload), less compress (encoder load).
Yes, black would mean that. But blurring doesn't not darken the border, it merely blurs it. If you just want to have darker edges, take an image source and overlay it over the source - done.

motion estimation ~ bframes
http://forum.digital-digest.com/f20/i-p-b-frames-explained-9785.html
"every video frame is broken into blocks of 8x8 pixels"
Motion Estimation is not tied to B-Frames. B-Frames are simply frames that can use both the next and the previous frame for encoding, instead of being limited to only the previous frames. This gives it a small advantage in quality per bit for a huge encoding performance drop.

better center motion estimation/quality, worse edge motion estimation/quality ... at same bitrate (upload), resolution and frame rate.
Motion Estimation does not work like that. Motion Estimation is applied equally everywhere and the motion data is far easier to encode than actual pixels and takes less bitrate. If you hinder motion estimation or outright break it, all your bitrate is spent on pixels which will be significantly larger per frame.

ll try show u ... 2 steps: lossless local rec, then encode again, w and w/o png "blur" mask filters... cpu x quality x size
(did u see my sample?)
Go ahead, though you'll be showing me nothing new. I have been doing this for weeks as a task for work, so I've pretty much exhausted all possible options. Also this idea isn't even new and the response is always the same, as people have suggested doing this for about a year now (or longer).

And yes, I have seen your "example", though Twitch, Youtube and Mixer VODs do not count as examples, as all three of them transcode the video. Your issues are in shadowed areas surrounded by bright areas (such as grass under trees).
 

Diego Aguirre

New Member
Yes, black would mean that. But blurring doesn't not darken the border, it merely blurs it. If you just want to have darker edges, take an image source and overlay it over the source - done.



Motion Estimation is not tied to B-Frames. B-Frames are simply frames that can use both the next and the previous frame for encoding, instead of being limited to only the previous frames. This gives it a small advantage in quality per bit for a huge encoding performance drop.



Motion Estimation does not work like that. Motion Estimation is applied equally everywhere and the motion data is far easier to encode than actual pixels and takes less bitrate. If you hinder motion estimation or outright break it, all your bitrate is spent on pixels which will be significantly larger per frame.



Go ahead, though you'll be showing me nothing new. I have been doing this for weeks as a task for work, so I've pretty much exhausted all possible options. Also this idea isn't even new and the response is always the same, as people have suggested doing this for about a year now (or longer).

And yes, I have seen your "example", though Twitch, Youtube and Mixer VODs do not count as examples, as all three of them transcode the video. Your issues are in shadowed areas surrounded by bright areas (such as grass under trees).
I want blur to hide dark mask imperfections and go darker at edges.
(THIS https://www.twitch.tv/videos/201320049, gradient, one layer)

in my tests... more b frames = less encode load, quality drop (something w compression x movement prediction idk). x264 has 5 default bframes... go to 0 and 16, compare load/quality/bitrate.

(sorry about my english... here in brazil sample and example can be the same thing)
 
Dude, this is awesome. Thank you so much for making this! This is pretty much what I've been dreaming about.

A couple of things, though. The 3D Transform effect is amazing, but I noticed that edges tend to be pretty hard. Are there any plans on adding some filtering to smooth out those edges?

Also, sometimes blur just doesn't work for me. I add it and it doesn't do anything.until I either restart OBS or remove and re-add it. Just a little bug, perhaps.

@diego: x264 defaults to a maximum of 3 consecutive b-frames. Raising your bframes variable to something like 16 only changes the maximum number of consecutive b-frames. X264 will decide how many to use on its own which will typically be less than the maximum amount. Again, though, b-frames have nothing to do with motion estimation. It's a frame type that can reference in both ways (backwards and forwards in time) as opposed to only forwards (p-frames). This makes it very compressible AKA bitrate efficient. They're no magic bullet, though. Bitrate, resolution and framerate are the biggest deciding factors in image quality.

Also, giving x264 the possibility of adding more b-frames will always lead to more compression load. You're telling x264 to look for more possibilities to use b-frames after all. That's not free. You'll typically only really notice that with b-adapt=2, though.
 
Last edited:

LaxOfTheBay

New Member
I'm also having trouble installing. I read your answer and tried all kinds of other ways. Can you share a screenshot of the filepath?
 
Top