Compare commits
	
		
			4 Commits
		
	
	
		
			bea1eaea17
			...
			0b96dbf448
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						0b96dbf448
	
				 | 
					
					
						|||
| 
						
						
							
						
						24eb92378d
	
				 | 
					
					
						|||
| 
						
						
							
						
						39702c78ab
	
				 | 
					
					
						|||
| 
						
						
							
						
						179ebc96d9
	
				 | 
					
					
						
							
								
								
									
										14
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
									
									
									
									
								
							@ -3,9 +3,15 @@
 | 
			
		||||
Shaders for Avidemux with OpenGL support
 | 
			
		||||
 | 
			
		||||
## gopro_8:7 - Fisheye removal for GoPro 11+, 8:7 ratio, 60fps, HyperSmooth off
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
- unfish_gopro_8:7.glsl  
 | 
			
		||||
Shader for fisheye removal
 | 
			
		||||
 | 
			
		||||
- preset_gopro_8:7_4K_youtube.py  
 | 
			
		||||
Preset for mp4, 4K, high bitrate
 | 
			
		||||
 | 
			
		||||
- preset_gopro_8:7_4K_2160p.py  
 | 
			
		||||
Preset for mp4, 4K, constant bitrate
 | 
			
		||||
 | 
			
		||||
@ -22,12 +28,16 @@ Preset for mp4, QHD, constant bitrate
 | 
			
		||||
Script to compute output FOV and frame widening
 | 
			
		||||
 | 
			
		||||
### Installation for BSD/GNU-Linux systems:
 | 
			
		||||
 | 
			
		||||
- Copy the presets to ~/.avidemux6/custom/
 | 
			
		||||
- Copy the shader to /opt/rk/avidemux/ (or edit the preset to set the path)  
 | 
			
		||||
 | 
			
		||||
Or just run the script install_gopro_8:7.sh  
 | 
			
		||||
_For commercial OS's, figure out the paths yourself :)_
 | 
			
		||||
Or just run the script install_gopro_8:7.sh
 | 
			
		||||
 | 
			
		||||
_For commercial OS's, figure out the paths yourself, then edit the presets to fix the path to the .glsl file_
 | 
			
		||||
 | 
			
		||||
### Usage:
 | 
			
		||||
 | 
			
		||||
- Load and edit video(s)
 | 
			
		||||
- Select "Custom/preset_gopro_8:7_..." in the menu
 | 
			
		||||
- Add filters
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,7 @@ import math
 | 
			
		||||
 | 
			
		||||
frame_width = 8
 | 
			
		||||
frame_height = 7
 | 
			
		||||
input_ratio = frame_width / frame_height
 | 
			
		||||
 | 
			
		||||
input_vertical_fov = 108.0
 | 
			
		||||
input_diagonal_fov = 156.0
 | 
			
		||||
@ -20,14 +21,14 @@ output_horizontal_length = math.sqrt((input_diagonal_length ** 2) / (input_verti
 | 
			
		||||
output_diagonal_length = math.hypot(output_horizontal_length, input_vertical_length)
 | 
			
		||||
output_diagonal_fov = math.degrees(math.atan(output_diagonal_length)) * 2.0
 | 
			
		||||
 | 
			
		||||
output_ratio = output_horizontal_length / input_vertical_length
 | 
			
		||||
output_ratio = 1.0 / (output_horizontal_length / input_vertical_length)
 | 
			
		||||
 | 
			
		||||
print("Output FOV   = %f" % output_diagonal_fov)
 | 
			
		||||
print("Output Ratio = %f" % output_ratio)
 | 
			
		||||
print("= Resolutions =====================")
 | 
			
		||||
 | 
			
		||||
def width_rounded_8(height):
 | 
			
		||||
    width = int(round(height * output_ratio))
 | 
			
		||||
    width = int(round(height * input_ratio))
 | 
			
		||||
    return ((width + 4) // 8) * 8
 | 
			
		||||
 | 
			
		||||
print("QHD            = %i x 540" % width_rounded_8(540))
 | 
			
		||||
 | 
			
		||||
@ -91,13 +91,20 @@ adm.addVideoFilter(
 | 
			
		||||
    "shaderFile=/opt/rk/avidemux/unfish_gopro_8:7.glsl")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "swscale",
 | 
			
		||||
    "width=3312",
 | 
			
		||||
    "width=2472",
 | 
			
		||||
    "height=2160",
 | 
			
		||||
    "algo=1",
 | 
			
		||||
    "sourceAR=0",
 | 
			
		||||
    "targetAR=0",
 | 
			
		||||
    "lockAR=False",
 | 
			
		||||
    "roundup=2")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "MplayerDenoise3DHQ",
 | 
			
		||||
    "mode=4",
 | 
			
		||||
    "luma_spatial=4.000000",
 | 
			
		||||
    "chroma_spatial=3.000000",
 | 
			
		||||
    "luma_temporal=6.000000",
 | 
			
		||||
    "chroma_temporal=4.500000")
 | 
			
		||||
adm.setContainer(
 | 
			
		||||
    "MP4",
 | 
			
		||||
    "muxerType=0",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										116
									
								
								gopro_8:7/preset_gopro_8:7_4K_youtube.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								gopro_8:7/preset_gopro_8:7_4K_youtube.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,116 @@
 | 
			
		||||
#PY  <- Needed to identify #
 | 
			
		||||
# RozK
 | 
			
		||||
# Custom preset for GoPro, 8:7 ratio, without hypersmooth, output widened scaled to 4K (2160p), high bitrate
 | 
			
		||||
 | 
			
		||||
adm = Avidemux()
 | 
			
		||||
adm.videoCodec(
 | 
			
		||||
    "x264",
 | 
			
		||||
    "useAdvancedConfiguration=False",
 | 
			
		||||
    "general.params=CBR=65536",
 | 
			
		||||
    "general.threads=0",
 | 
			
		||||
    "general.preset=slow",
 | 
			
		||||
    "general.tuning=film",
 | 
			
		||||
    "general.profile=high",
 | 
			
		||||
    "general.fast_decode=False",
 | 
			
		||||
    "general.zero_latency=False",
 | 
			
		||||
    "general.fast_first_pass=True",
 | 
			
		||||
    "general.blueray_compatibility=False",
 | 
			
		||||
    "general.fake_interlaced=False",
 | 
			
		||||
    "level=-1",
 | 
			
		||||
    "vui.sar_height=1",
 | 
			
		||||
    "vui.sar_width=1",
 | 
			
		||||
    "vui.overscan=0",
 | 
			
		||||
    "vui.vidformat=5",
 | 
			
		||||
    "vui.fullrange=False",
 | 
			
		||||
    "vui.colorprim=2",
 | 
			
		||||
    "vui.transfer=2",
 | 
			
		||||
    "vui.colmatrix=2",
 | 
			
		||||
    "vui.chroma_loc=0",
 | 
			
		||||
    "MaxRefFrames=3",
 | 
			
		||||
    "MinIdr=25",
 | 
			
		||||
    "MaxIdr=250",
 | 
			
		||||
    "i_scenecut_threshold=40",
 | 
			
		||||
    "intra_refresh=False",
 | 
			
		||||
    "MaxBFrame=3",
 | 
			
		||||
    "i_bframe_adaptive=1",
 | 
			
		||||
    "i_bframe_bias=0",
 | 
			
		||||
    "i_bframe_pyramid=2",
 | 
			
		||||
    "b_deblocking_filter=True",
 | 
			
		||||
    "i_deblocking_filter_alphac0=0",
 | 
			
		||||
    "i_deblocking_filter_beta=0",
 | 
			
		||||
    "cabac=True",
 | 
			
		||||
    "interlaced=False",
 | 
			
		||||
    "constrained_intra=False",
 | 
			
		||||
    "tff=True",
 | 
			
		||||
    "fake_interlaced=False",
 | 
			
		||||
    "analyze.b_8x8=True",
 | 
			
		||||
    "analyze.b_i4x4=True",
 | 
			
		||||
    "analyze.b_i8x8=True",
 | 
			
		||||
    "analyze.b_p8x8=True",
 | 
			
		||||
    "analyze.b_p16x16=False",
 | 
			
		||||
    "analyze.b_b16x16=False",
 | 
			
		||||
    "analyze.weighted_pred=2",
 | 
			
		||||
    "analyze.weighted_bipred=True",
 | 
			
		||||
    "analyze.direct_mv_pred=1",
 | 
			
		||||
    "analyze.chroma_offset=0",
 | 
			
		||||
    "analyze.me_method=1",
 | 
			
		||||
    "analyze.me_range=16",
 | 
			
		||||
    "analyze.mv_range=-1",
 | 
			
		||||
    "analyze.mv_range_thread=-1",
 | 
			
		||||
    "analyze.subpel_refine=7",
 | 
			
		||||
    "analyze.chroma_me=True",
 | 
			
		||||
    "analyze.mixed_references=True",
 | 
			
		||||
    "analyze.trellis=1",
 | 
			
		||||
    "analyze.psy_rd=1.000000",
 | 
			
		||||
    "analyze.psy_trellis=0.000000",
 | 
			
		||||
    "analyze.fast_pskip=True",
 | 
			
		||||
    "analyze.dct_decimate=True",
 | 
			
		||||
    "analyze.noise_reduction=0",
 | 
			
		||||
    "analyze.psy=True",
 | 
			
		||||
    "analyze.intra_luma=11",
 | 
			
		||||
    "analyze.inter_luma=21",
 | 
			
		||||
    "ratecontrol.rc_method=0",
 | 
			
		||||
    "ratecontrol.qp_constant=0",
 | 
			
		||||
    "ratecontrol.qp_min=10",
 | 
			
		||||
    "ratecontrol.qp_max=51",
 | 
			
		||||
    "ratecontrol.qp_step=4",
 | 
			
		||||
    "ratecontrol.bitrate=0",
 | 
			
		||||
    "ratecontrol.rate_tolerance=1.000000",
 | 
			
		||||
    "ratecontrol.vbv_max_bitrate=0",
 | 
			
		||||
    "ratecontrol.vbv_buffer_size=0",
 | 
			
		||||
    "ratecontrol.vbv_buffer_init=1",
 | 
			
		||||
    "ratecontrol.ip_factor=1.400000",
 | 
			
		||||
    "ratecontrol.pb_factor=1.300000",
 | 
			
		||||
    "ratecontrol.aq_mode=1",
 | 
			
		||||
    "ratecontrol.aq_strength=1.000000",
 | 
			
		||||
    "ratecontrol.mb_tree=True",
 | 
			
		||||
    "ratecontrol.lookahead=40")
 | 
			
		||||
adm.clearVideoFilters()
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "shaderLoader",
 | 
			
		||||
    "shaderFile=/opt/rk/avidemux/unfish_gopro_8:7.glsl")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "swscale",
 | 
			
		||||
    "width=2472",
 | 
			
		||||
    "height=2160",
 | 
			
		||||
    "algo=1",
 | 
			
		||||
    "sourceAR=0",
 | 
			
		||||
    "targetAR=0",
 | 
			
		||||
    "lockAR=False",
 | 
			
		||||
    "roundup=2")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "MplayerDenoise3DHQ",
 | 
			
		||||
    "mode=4",
 | 
			
		||||
    "luma_spatial=4.000000",
 | 
			
		||||
    "chroma_spatial=3.000000",
 | 
			
		||||
    "luma_temporal=6.000000",
 | 
			
		||||
    "chroma_temporal=4.500000")
 | 
			
		||||
adm.setContainer(
 | 
			
		||||
    "MP4",
 | 
			
		||||
    "muxerType=0",
 | 
			
		||||
    "optimize=1",
 | 
			
		||||
    "forceAspectRatio=False",
 | 
			
		||||
    "aspectRatio=1",
 | 
			
		||||
    "displayWidth=1280",
 | 
			
		||||
    "rotation=0",
 | 
			
		||||
    "clockfreq=0")
 | 
			
		||||
@ -91,13 +91,20 @@ adm.addVideoFilter(
 | 
			
		||||
    "shaderFile=/opt/rk/avidemux/unfish_gopro_8:7.glsl")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "swscale",
 | 
			
		||||
    "width=1656",
 | 
			
		||||
    "width=1232",
 | 
			
		||||
    "height=1080",
 | 
			
		||||
    "algo=1",
 | 
			
		||||
    "sourceAR=0",
 | 
			
		||||
    "targetAR=0",
 | 
			
		||||
    "lockAR=False",
 | 
			
		||||
    "roundup=2")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "MplayerDenoise3DHQ",
 | 
			
		||||
    "mode=4",
 | 
			
		||||
    "luma_spatial=4.000000",
 | 
			
		||||
    "chroma_spatial=3.000000",
 | 
			
		||||
    "luma_temporal=6.000000",
 | 
			
		||||
    "chroma_temporal=4.500000")
 | 
			
		||||
adm.setContainer(
 | 
			
		||||
    "MP4",
 | 
			
		||||
    "muxerType=0",
 | 
			
		||||
 | 
			
		||||
@ -91,13 +91,20 @@ adm.addVideoFilter(
 | 
			
		||||
    "shaderFile=/opt/rk/avidemux/unfish_gopro_8:7.glsl")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "swscale",
 | 
			
		||||
    "width=1104",
 | 
			
		||||
    "width=824",
 | 
			
		||||
    "height=720",
 | 
			
		||||
    "algo=1",
 | 
			
		||||
    "sourceAR=0",
 | 
			
		||||
    "targetAR=0",
 | 
			
		||||
    "lockAR=False",
 | 
			
		||||
    "roundup=2")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "MplayerDenoise3DHQ",
 | 
			
		||||
    "mode=4",
 | 
			
		||||
    "luma_spatial=4.000000",
 | 
			
		||||
    "chroma_spatial=3.000000",
 | 
			
		||||
    "luma_temporal=6.000000",
 | 
			
		||||
    "chroma_temporal=4.500000")
 | 
			
		||||
adm.setContainer(
 | 
			
		||||
    "MP4",
 | 
			
		||||
    "muxerType=0",
 | 
			
		||||
 | 
			
		||||
@ -91,13 +91,20 @@ adm.addVideoFilter(
 | 
			
		||||
    "shaderFile=/opt/rk/avidemux/unfish_gopro_8:7.glsl")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "swscale",
 | 
			
		||||
    "width=832",
 | 
			
		||||
    "width=616",
 | 
			
		||||
    "height=540",
 | 
			
		||||
    "algo=1",
 | 
			
		||||
    "sourceAR=0",
 | 
			
		||||
    "targetAR=0",
 | 
			
		||||
    "lockAR=False",
 | 
			
		||||
    "roundup=2")
 | 
			
		||||
adm.addVideoFilter(
 | 
			
		||||
    "MplayerDenoise3DHQ",
 | 
			
		||||
    "mode=4",
 | 
			
		||||
    "luma_spatial=4.000000",
 | 
			
		||||
    "chroma_spatial=3.000000",
 | 
			
		||||
    "luma_temporal=6.000000",
 | 
			
		||||
    "chroma_temporal=4.500000")
 | 
			
		||||
adm.setContainer(
 | 
			
		||||
    "MP4",
 | 
			
		||||
    "muxerType=0",
 | 
			
		||||
 | 
			
		||||
@ -13,17 +13,19 @@ uniform float pts;
 | 
			
		||||
 | 
			
		||||
const vec2 half_pixel = vec2(0.5, 0.5);
 | 
			
		||||
 | 
			
		||||
const vec2 input_scale = vec2(0.652485, 1.0);
 | 
			
		||||
const float input_fov = 156.0;
 | 
			
		||||
const float output_fov = 119.789529;
 | 
			
		||||
 | 
			
		||||
vec2 unfish(vec2 coord) {
 | 
			
		||||
    float diameter = sqrt(dot(myResolution, myResolution));
 | 
			
		||||
    vec2 center = myResolution * 0.5;
 | 
			
		||||
    vec2 position = coord - center;
 | 
			
		||||
    float input_distance = length(position);
 | 
			
		||||
    float input_foc = diameter / radians(input_fov);
 | 
			
		||||
    float output_foc = diameter / (2.0 * tan(radians(output_fov) * 0.5));
 | 
			
		||||
    return center + position * (input_foc * atan(input_distance / output_foc) / input_distance);
 | 
			
		||||
    vec2 input_position = (coord - center) * input_scale;
 | 
			
		||||
    float input_distance = length(input_position);
 | 
			
		||||
    float input_len = diameter / radians(input_fov);
 | 
			
		||||
    float output_len = diameter / (2.0 * tan(radians(output_fov) * 0.5));
 | 
			
		||||
    float unfish_ratio = input_len * atan(input_distance / output_len) / input_distance;
 | 
			
		||||
    return center + input_position * unfish_ratio;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user