cmrangel
Contributor
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.
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.