Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- from gi.repository import Gtk
- class reuse_init(object):
- def make_label(self, text):
- label = Gtk.Label(text)
- label.set_use_underline(True)
- label.set_alignment(1.0, 0.5)
- label.show()
- return label
- def make_slider_and_spinner(self, init, min, max, step, page, digits):
- controls = {'adj':Gtk.Adjustment(init, min, max, step, page), 'slider':Gtk.HScale(), 'spinner':Gtk.SpinButton()}
- controls['slider'].set_adjustment(controls['adj'])
- controls['slider'].set_draw_value(False)
- controls['spinner'].set_adjustment(controls['adj'])
- controls['spinner'].set_digits(digits)
- controls['slider'].show()
- controls['spinner'].show()
- return controls
- def make_frame_ag(self, f_shadow_type, f_label, alig_pad, gri_row_sp, gri_colu_sp, gri_homog):
- controls = {'frame':Gtk.Frame(), 'ali':Gtk.Alignment(), 'grid':Gtk.Grid()}
- controls['frame'].set_shadow_type(f_shadow_type) # 3 GTK_SHADOW_ETCHED_IN , 1 GTK_SHADOW_IN
- controls['frame'].set_label(f_label)
- controls['ali'].set_padding(alig_pad, alig_pad, alig_pad, alig_pad)
- controls['frame'].add(controls['ali'])
- controls['grid'].set_row_spacing(gri_row_sp)
- controls['grid'].set_column_spacing(gri_colu_sp)
- controls['grid'].set_column_homogeneous(gri_homog) # True
- controls['ali'].add(controls['grid'])
- controls['frame'].show()
- controls['ali'].show()
- controls['grid'].show()
- return controls
- def make_spinbut(self, init, min, max, step, page, digits, numeric):
- controls = {'adj':Gtk.Adjustment(init, min, max, step, page), 'spinner':Gtk.SpinButton()}
- controls['spinner'].set_adjustment(controls['adj'])
- controls['spinner'].set_digits(digits)
- controls['spinner'].set_numeric(numeric)
- controls['spinner'].show()
- return controls
- def make_combobox(self, *vals):
- controls = {'list':Gtk.ListStore(str), 'cbox':Gtk.ComboBox(), 'cellr':Gtk.CellRendererText()}
- for i, v in enumerate(vals):
- controls['list'].append([v])
- controls['cbox'].set_model(controls['list'])
- controls['cbox'].pack_start(controls['cellr'], True)
- controls['cbox'].add_attribute(controls['cellr'], "text", 0)
- controls['cbox'].set_active(0)
- controls['cbox'].show()
- return controls
- class ProgrammaGTK(reuse_init):
- def __init__(self):
- self.window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
- self.window.connect("destroy", self.on_window_destroy)
- self.window.set_title("4FFmpeg video crop resize calculator")
- self.window.set_position(1) # 1 center, 0 none,
- self.window.set_border_width(20)
- self.window.set_default_size(500,-1)
- #----------------------------------
- # scale
- self.make_scale()
- #------------------------
- #self.button1 = Gtk.Button(label="Calcola")
- #self.button1.connect("clicked", self.on_button1_clicked)
- #self.table.attach(self.button1, 2, 3, 1, 2)
- #----------------------------------------------
- # crop ----------------------------------------
- self.make_crop()
- # -denoise ----------------------------
- self.make_denoise()
- #---output------------------------
- self.frame_out = self.make_frame_ag(3, ' FFmpeg filter string (select and copy): ' , 12, 8, 8, True)
- self.labelout = Gtk.Label("")
- self.labelout.set_selectable(1)
- self.frame_out['grid'].attach(self.labelout, 0, 0, 1 ,1)
- #-- main VBox -------------------------
- self.vbox1 = Gtk.VBox()
- self.vbox1.set_spacing(12)
- #----crop frame -------------------
- self.vbox1.pack_start(self.frame_crop['frame'], 1, 0, 0)
- #------------------------------
- #----scale frame------------------
- #------------------------------------
- self.vbox1.pack_start(self.frame_scale['frame'], 1, 0, 0)
- # ------denoise frame------------------------
- #------------------------------------
- self.vbox1.pack_start(self.frame_dn['frame'], 1, 0, 0)
- #test-------------------
- #self.f_test = self.make_frame_ag(3, "TEST" , 6, 8, 8, True)
- #self.label_test = Gtk.Label("TEST")
- #self.f_test['grid'].attach(self.label_test, 0, 0, 1, 1)
- #self.vbox1.pack_start(self.f_test['frame'], 1, 0, 0)
- #-----output frame ---------------------
- #----------------------------------------
- self.vbox1.pack_start(self.frame_out['frame'], 1, 0, 0)
- self.window.add (self.vbox1)
- #---------------------------------
- self.window.show_all()
- # inizializza variabili
- self.crop_str = ""
- self.scalestr = ""
- self.dn_str = ""
- def on_window_destroy(self, *args):
- Gtk.main_quit(*args)
- def make_scale(self):
- self.frame_scale = self.make_frame_ag(3, 'scale' , 6, 8, 8, True)
- # ------------------------------
- self.box1 = self.make_combobox(
- "None",
- "W",
- "H"
- )
- self.frame_scale['grid'].attach(self.box1['cbox'], 0, 0, 1, 1)
- self.box1['cbox'].connect("changed", self.on_scale_clicked)
- #------------------------------------
- self.box2 = self.make_combobox(
- "16/9",
- "4/3"
- )
- self.frame_scale['grid'].attach(self.box2['cbox'], 0, 1, 1, 1)
- self.box2['cbox'].connect("changed", self.on_scale_clicked)
- #-----------------------------------------
- self.size_spinner = self.make_slider_and_spinner(720, 200, 2000, 1, 10, 0)
- self.frame_scale['grid'].attach(self.size_spinner['slider'], 1, 0, 1, 1)
- self.frame_scale['grid'].attach(self.size_spinner['spinner'], 2, 0, 1, 1)
- self.size_spinner['slider'].set_size_request(150,-1)
- self.size_spinner['adj'].set_value(720.001) #mettere decimali se no non si vede
- self.size_spinner['adj'].connect("value-changed", self.on_scale_clicked)
- #-------------------------------------------------------
- self.check = Gtk.CheckButton("lanczos")
- self.check.connect("toggled", self.on_scale_clicked)
- self.frame_scale['grid'].attach(self.check, 2, 1, 1, 1)
- def make_crop(self):
- self.frame_crop = self.make_frame_ag(3, '' , 6, 8, 8, True)
- # -------
- self.checkcr = Gtk.CheckButton("crop")
- self.checkcr.connect("toggled", self.on_crop_clicked)
- self.frame_crop['grid'].attach(self.checkcr, 0, 0, 1, 1)
- #----------
- self.labelcropinw = self.make_label("input W:")
- self.frame_crop['grid'].attach(self.labelcropinw, 0, 1, 1, 1)
- self.labelcropinh = self.make_label("input H:")
- self.frame_crop['grid'].attach(self.labelcropinh, 0, 2, 1, 1)
- #
- self.spincw = self.make_spinbut(640 , 100 , 1920 , 10 , 1 , 0, True )
- self.spincw["adj"].connect("value-changed", self.on_crop_clicked)
- self.frame_crop['grid'].attach(self.spincw["spinner"], 1, 1, 1, 1)
- #
- self.spinch = self.make_spinbut(480 , 100 , 1280 , 10 , 1 , 0, True )
- self.spinch["adj"].connect("value-changed", self.on_crop_clicked)
- self.frame_crop['grid'].attach(self.spinch["spinner"], 1, 2, 1, 1)
- #
- self.labelcroptop = self.make_label("crop Top:")
- self.frame_crop['grid'].attach(self.labelcroptop, 2, 1, 1, 1)
- self.labelcropbot = self.make_label("crop Bottom:")
- self.frame_crop['grid'].attach(self.labelcropbot, 2, 2, 1, 1)
- #
- self.spinct = self.make_spinbut(0 , 0 , 600 , 1 , 10 , 0, True )
- self.spinct["adj"].connect("value-changed", self.on_crop_clicked)
- self.frame_crop['grid'].attach(self.spinct["spinner"], 3, 1, 1, 1)
- #
- self.spincb = self.make_spinbut(0 , 0 , 600 , 1 , 10 , 0, True )
- self.spincb["adj"].connect("value-changed", self.on_crop_clicked)
- self.frame_crop['grid'].attach(self.spincb["spinner"], 3, 2, 1, 1)
- #
- self.labelcroplef = self.make_label("crop Left:")
- self.frame_crop['grid'].attach(self.labelcroplef, 4, 1, 1, 1)
- self.labelcroprig = self.make_label("crop Right:")
- self.frame_crop['grid'].attach(self.labelcroprig, 4, 2, 1, 1)
- #
- self.spincl = self.make_spinbut(0 , 0 , 600 , 1 , 10 , 0, True )
- self.spincl["adj"].connect("value-changed", self.on_crop_clicked)
- self.frame_crop['grid'].attach(self.spincl["spinner"], 5, 1, 1, 1)
- #
- self.spincr = self.make_spinbut(0 , 0 , 600 , 1 , 10 , 0, True )
- self.spincr["adj"].connect("value-changed", self.on_crop_clicked)
- self.frame_crop['grid'].attach(self.spincr["spinner"], 5, 2, 1, 1)
- def make_denoise(self):
- self.frame_dn = self.make_frame_ag(3, '' , 6, 8, 8, True)
- # ----------------------
- self.checkdn = Gtk.CheckButton("denoise")
- self.checkdn.connect("toggled", self.on_dn_clicked)
- self.frame_dn['grid'].attach(self.checkdn, 0, 0, 1, 1)
- # -------------------------
- self.labeldn = Gtk.Label("hqdn3d:")
- self.labeldn.set_alignment(1.0, 0.5)
- self.frame_dn['grid'].attach(self.labeldn, 1, 0, 1, 1)
- #----------------------------------------
- self.spindn = self.make_spinbut(4 , 2 , 8 , 1 , 10 , 0, True )
- self.spindn["adj"].connect("value-changed", self.on_dn_clicked)
- self.frame_dn['grid'].attach(self.spindn["spinner"], 2, 0, 1, 1)
- def on_scale_clicked(self, button):
- if (self.box1['cbox'].get_active() != 0):
- self.calcola_scale()
- else:
- self.scalestr = ""
- self.outfilter()
- def on_dn_clicked(self, button):
- self.dn_str = ""
- if self.checkdn.get_active():
- dn_val = int( self.spindn['adj'].get_value() )
- self.dn_str = "hqdn3d=" + str(dn_val)
- self.outfilter()
- def on_crop_clicked(self, button):
- ok = 0
- self.crop_str = ""
- if self.checkcr.get_active():
- ok = 1
- if ok:
- inW = int(self.spincw['adj'].get_value())
- inH = int(self.spinch['adj'].get_value())
- crT = int(self.spinct['adj'].get_value())
- crB = int(self.spincb['adj'].get_value())
- crL = int(self.spincl['adj'].get_value())
- crR = int(self.spincr['adj'].get_value())
- finW = inW - crL - crR
- finH = inH - crT - crB
- if ( (finW < 100) or (finH < 100) ):
- self.crop_str = (" ** invalid crop ** ")
- else:
- self.crop_str = "crop=" + str(finW) + ":" \
- + str(finH) + ":" \
- + str(crL) + ":" \
- + str(crT)
- self.outfilter()
- def calcola_scale(self):
- self.scalestr = ""
- numero = self.size_spinner['adj'].get_value()
- if ( (int(numero) % 2) != 0):
- numero = int(numero) + 1
- else:
- numero = int(numero)
- dar = self.box2['cbox'].get_active()
- lato = self.box1['cbox'].get_active()
- if (dar == 1):
- if (lato == 1):
- n2 = numero/4*3
- else:
- n2 = numero/3*4
- setdar = ",setdar=4/3,setsar=1/1"
- else:
- if (lato == 1):
- n2 = numero/16*9
- else:
- n2 = numero/9*16
- setdar = ",setdar=16/9,setsar=1/1"
- if ( (int(n2) % 2) != 0):
- n2 = int(n2) + 1
- else:
- n2 = int(n2)
- self.scalestr = "scale="
- if (lato == 1):
- self.scalestr = self.scalestr + str(numero) + ":" + str(n2)
- else:
- self.scalestr = self.scalestr + str(n2) + ":" + str(numero)
- lanc = self.check.get_active()
- if lanc:
- self.scalestr = self.scalestr + ":flags=lanczos" + setdar
- else:
- self.scalestr = self.scalestr + setdar
- self.outfilter()
- def outfilter(self):
- final_str = ""
- if (self.crop_str != ""):
- final_str = final_str + self.crop_str
- if (self.scalestr != ""):
- if (final_str == ""):
- final_str = final_str + self.scalestr
- else:
- final_str = final_str + "," + self.scalestr
- if (self.dn_str != ""):
- if (final_str == ""):
- final_str = final_str + self.dn_str
- else:
- final_str = final_str + "," + self.dn_str
- if (final_str != ""):
- final_str = "-vf " + final_str
- self.labelout.set_text(final_str)
- def main(self):
- Gtk.main()
- if __name__ == "__main__":
- hwg = ProgrammaGTK()
- Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement