GoPro Labs for Scuba

Please register or login

Welcome to ScubaBoard, the world's largest scuba diving community. Registration is not required to read the forums, but we encourage you to join. Joining has its benefits and enables you to participate in the discussions.

Benefits of registering include

  • Ability to post and comment on topics and discussions.
  • A Free photo gallery to share your dive photos with the world.
  • You can make this box go away

Joining is quick and easy. Log in or Register now!

cmrangel

Contributor
Messages
159
Reaction score
110
Location
So. California, USA
# of dives
100 - 199
Hi all,
Sorry in advance for a long post. Up front, I am not an expert on GoPro Labs, this is really my first effort. For some background, GoPro labs is a way to configure GoPros using QR codes. It is mainly focused on GoPros 9 thur 11. It now also supports simple scripting. I am not going to make this a tutorial on using GoPro Labs. You can find out more at https://gopro.github.io/labs/

Exposure Control
I almost always dive with a GoPro. I like the GoPro because it is simple and small. But, I have suspected that the exposure curve for the GoPro was biased toward fast shutter speeds and higher ISOs. For diving, I rarely have fast action but often have very dim light. This has always resulted in more noise that I would like, especially at depth where there is little light and higher ISOs are required.

I saw the Labs Extensions page (https://gopro.github.io/labs/control/extensions/) and tried MEXPS=1 which shows ISO and shutter speed overlay on the screen. I looked at these values and discovered that the GoPro does indeed favor higher shutter speeds and therefore higher ISOs than I would like to see while diving. For example, even with good light I was seeing shutter speeds over 1/300 while the ISO was up at 400. I would have much preferred lower ISO and slower shutter. This was even the case with stabilization turned off.

So, I was looking for a way to modify the exposure curve selection of shutter speed vs ISO. Note that since the aperture is fixed, this curve basically trades off motion blurriness and stabilization (shutter speed) versus noise. For underwater applications, the light is often so dim that stabilization is not effective anyway and motion is typically slow. This is not a knock on the GoPro, it is an action cam so it is understandable that it is biased toward fast shutter speed at the expense of noise, especially since most action applications are outdoors in a well lit environment. It just does not fit my application for scuba diving.

It tooks me awhile and you can follow my efforts at Custom exposure curve for Scuba · gopro/labs · Discussion #382 if interested. But, I came up with a script to keep the ISOs down at the expense of slower shutter speed. Thru a bunch of back and forth involving EV, shutter speed, and ISO calculations, I came up with an equation with the behavior I like. Not going to go into details but I can adjust the parameters. Basically, I am calculating a "Exposure Indicator" (Ei) then running that thru an equation for shutter speed of s=A*Ei+B type of equation to derive a shutter speed. The shutter speed goes to 30 near ISO= 600 and the ISO stays near ISO=200 for most of the EV range. It goes down to ISO=100 for very bright EV values. You can find out more about scripting at https://gopro.github.io/labs/control/actions/. The exposure calculations at the bottom of this page are what got me thinking.

Bottom line is that I am using "
!MBOOT="!Lscub"!SAVEscub=i64M1S0=Gi=E1=E/G=E*s=E*160=E+24<E31=E30>E870=E870oMEXPX=E=E*1.1oMEXPN=E!R7" as a script. The !MBOOT="!Lscub"!SAVEscub part of the command writes the script to your sd card and loads it on each boot. To clear this out and go back to normal operation, you need to use the !MBOOT=0 command.

Basically this calculates a new shutter speed based on an exposure indicator. New Shutter Speed = E = (160*s/ISO) + 24. It then makes sure this value does not go below or above the shutter speed limits.

NOTE: The specific calculations are for 30fps. Different numbers would be needed for other frame rates. I would have liked to be able to make this independant of frame rate but reading the frame rate is not currently supported in a script. I may modify the script above to set the frame rate to 30 just to ensure it is correct. Also, you have to have !MQRDR=1 enabled for it to work using QuikCapture.

It seems to work like I want in my land based testing. I have not gone diving yet to try it. Would be intersted in feedback if anyone tries it!!

Other ideas
I am also looking at incorporating the following into my configuration for diving
1. Set Noise reduction to zero (!MNR01=0). I usually do a lot of editing and would prefer to to noise reduction in post. I think the NR of GoPro is Ok but not great since it has to do this in realtime. I am sure I will get better results with Davinci Resolve

2. Improve the Log curve, use a native wide gamut, and increas the bit rate. For more info on this you can seeUnderstanding WIDE, WBLK, 2020, and other recent additions · gopro/labs · Discussion #266


That is all for now (maybe too much). Would be interested in anyone elses experience in tweaking the GoPro for better diving videos.
 
you know you can just cap the max ISO in settings, right?
And, most sites recommend a -0.5 or -1,0 exposure compensation (which would further increase shutter speed)
 
Hi Morey, sorry for the late reply, I have been traveling. Yes, of course you can cap the ISO. But, the Gopro still selects higher shutter speeds and ISO's than I like. Also, it will of course limit the ISO and if it gets darker, will simply underexpose which is not my favorite. By changing actual curve of ISO vs Shutterspeed, you can avoid these issues. It will use the lowest ISO possible and you can raise the max ISO. For example, if the Max ISO is 1600, by itself, the GoPro would select ISO1600 shutter speed of 1/240 (or similar) for a certain EV. I would rather it select ISO 400 at 1/60. The GoPro seems to always be biased to raising ISOs to keep high shutter speeds for action/stabilization. Additionally, for any EVs below the equivalent of ISO1600/SS=1/60, it will simply underexpose. By using the equation, it will still allow it to go to and ISO of 3200 (or whatever) if needed but still drive it to a lower ISO. From what I have seen, it is still less noisy to use a higher ISO than to underexpose and try and recover in post.

For 60fps
FWIW, I have continued to refine and have updated it to a different equation. I am now using "
!MBOOT="!Lscub"!SAVEscub=i8M1S0!MQRDR=1=Gi=E1=E/G=E*s=E*250>E240oMEXPX=200+oMEXPN=0+!R14<E60=E60oMEXPX=E=E*1.05oMEXPN=E!R14

For 30fps:
!MBOOT="!Lscub"!SAVEscub=i8M1S0!MQRDR=1=Gi=E1=E/G=E*s=E*250>E240oMEXPX=200+oMEXPN=0+!R14<E30=E30oMEXPX=E=E*1.05oMEXPN=E!R14

I am still experimenting with it but seems to do what I want.

I have also played with the !MLOGB command to give a flatter log curve but went back to using just the Flat profile. Using a stronger log curve using !MLOGB did give a flatter curve but I did not find very much (if any) additional dynamic range but did see more shadow noise. There may be some additional dynamic range there but it did not seem worth all the tweaking needed in post.
 
I like what you've done through the Labs IDE. Count me as one of those also dissatisfied with noise levels in low light situations. I wish I lived closer to water so that I could test your code, unfortunately, decent water is many hours away.

I don't know about your proficiency with post processing, but I record all of my GoPro underwater video with a couple of lights, at 60fps then slow it down to 30fps in DaVinci Resolve ( to smooth down the jiggle factor). DaVinci also makes it possible to sharpen video as well as reduce noise, not to mention the usual color corrections. The learning curve is steep, but the tools make up for many GoPro shortcomings.
 
Hi Sure Squintsalot, I too use Resolve extensively and do a lot with color correction, noise reduction, etc. I am sure the lights help quite a lot but I like to keep things very simple when diving and have a very small rig so I basically just use ambient light. The above equation does help a decent bit at some depths that has dim lighting but not a cure-all for sure. It would be great if GoPro came out with a larger sensor version!
 
Hi,

Looking for some information about QR codes for changing modes and settings underwater. I found your super interesting idea.

I want to test it in my trip to the Red Sea in a few days, but I don't know how if I can generate a QR code with this script and make that changes on the go of it I have to, somehow, load the script in the SD card and execute it on boot, every time.

I was reading your post in github, but to be truth I get lost, my knowledge about all this scripting things is close to 0. Wanting to learn but struggling to find the time to do it.

My idea is to have a QR code to change the setting of the camera and use your script and another one to reset to normal mode, this way I plan to be able to compare them and find out which one I like most or in which circumstances (deeper, with lights on/off,..) it works the best for me.

Also concern about not being able to save fast moving scenes properly (like diving with dolphins).
Or not being able to use 240fps modes.

Is it possible to do so?

I did a quite fast search in the goprolab website but didn´t found how to generate a QR code to execute an script. May be a little bit too fast searching I guess.

Thanks a lot for sharing your project, I hope to be able to help with some testing as for sure I will not be able to help any other way with.
 
There is a qr code gopro generator

Not sure if it has that range of details..

I remember there was another one from gopro website.. maybe that has more
 
Thanks hellhole for your help.

I already installed that in my phone time ago, but my problem was that I didn't know how to create QRs to load an script.

I found out how to do it!! super easy, just copy and paste (or type) the script in the text box called "QR Command"

Super important to update the firmware to the

2.12.70 - Aug 10, 2023​


Otherwise the script will not work. there was a bug in previous version with the math symbols.

Never the less I guess I will initially execute the script using a QR instead of doing it on boot.

If I do so, is it safe to assume that when I restart the camera it will resume "normal" operation?

I will also create another QR with the !MBOOT=0 to not load the "scub" file.

If I create a QR with the script !MBOOT="!Lscub" it will load it on boot, isn´t it? I guess I´m starting to understand a little little bit how this works.

Is there any way to "reset" the camera to normal without using the !MBOOT=0 and restarting? an code that "reset" the camera without restarting?

Now I have the scub file in my SD, and I think I know how to set the camera to load it or not.

I will use always at least 60 fps underwater so I put the 60 fps script in my file.

What should I do if I want to use higher fps for a shot? just let the camera work with this setting or better to reset and let the camera work "normal"

Jumping to another related topic... It would be possible to add the WBLK=1 so that the white balance auto lock for balance, it auto white balances until the capture starts then locks.

Thanks a lot for your help.

Best regards form Ramstein

 
may i ask which gopro version are you using?
 
https://www.shearwater.com/products/teric/

Back
Top Bottom