Advertisement
Guest User

FFmpeg video resize calculator GTK3

a guest
Nov 6th, 2014
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.07 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. from gi.repository import Gtk
  4.  
  5.        
  6. class reuse_init(object):
  7.  
  8.  
  9.     def make_label(self, text):
  10.         label = Gtk.Label(text)
  11.         label.set_use_underline(True)
  12.         label.set_alignment(1.0, 0.5)
  13.         label.show()
  14.         return label
  15.  
  16.     def make_slider_and_spinner(self, init, min, max, step, page, digits):
  17.         controls = {'adj':Gtk.Adjustment(init, min, max, step, page), 'slider':Gtk.HScale(), 'spinner':Gtk.SpinButton()}
  18.         controls['slider'].set_adjustment(controls['adj'])
  19.         controls['slider'].set_draw_value(False)
  20.         controls['spinner'].set_adjustment(controls['adj'])
  21.         controls['spinner'].set_digits(digits)
  22.         controls['slider'].show()
  23.         controls['spinner'].show()
  24.         return controls
  25.    
  26.    
  27. class ProgrammaGTK(reuse_init):
  28.    
  29.  
  30.     def __init__(self):
  31.        
  32.         self.window =  Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
  33.         self.window.connect("destroy", self.on_window_destroy)
  34.         self.window.set_title("FFmpeg video resize calculator")
  35.         self.window.set_position(1) # 1 center, 0 none,
  36.         self.window.set_border_width(30)
  37.         self.window.set_default_size(500,-1)
  38.         #----------------------------------
  39.         # -------- table ---------------
  40.         self.table = Gtk.Table(3, 3, True)
  41.         self.table.set_homogeneous(False)
  42.         self.table.set_row_spacings(8)
  43.         self.table.set_col_spacings(8)
  44.         #self.window.add(self.table)
  45.         #------------------------------------      
  46.         # ------------------------------------
  47.         self.box1 = Gtk.ComboBox()
  48.         self.liststore = Gtk.ListStore(int,str)
  49.         self.liststore.append([0,"W"])
  50.         self.liststore.append([1, "H"])
  51.         self.box1.set_model(self.liststore)
  52.         self.cell = Gtk.CellRendererText()
  53.         self.box1.pack_start(self.cell, True)
  54.         self.box1.add_attribute(self.cell, 'text', 1)
  55.         self.box1.set_active(0)
  56.         self.table.attach(self.box1, 0, 1, 0, 1)
  57.         self.box1.connect("changed", self.on_button1_clicked)
  58.         #------------------------------------
  59.         self.box2 = Gtk.ComboBox()
  60.         self.liststore2 = Gtk.ListStore(int,str)
  61.         self.liststore2.append([0,"16/9"])
  62.         self.liststore2.append([1, "4/3"])
  63.         self.box2.set_model(self.liststore2)
  64.         self.cell = Gtk.CellRendererText()
  65.         self.box2.pack_start(self.cell, True)
  66.         self.box2.add_attribute(self.cell, 'text', 1)
  67.         self.box2.set_active(0)
  68.         self.table.attach(self.box2, 0, 1, 1, 2)
  69.         self.box2.connect("changed", self.on_button1_clicked)
  70.         #--------------------------------
  71.         self.labelout = Gtk.Label("")
  72.         self.labelout.set_selectable(1)
  73.         #self.table.attach(self.labelout, 0, 3, 2, 3)
  74.         #-----------------------------------------
  75.         self.size_spinner = self.make_slider_and_spinner(702, 200, 2000, 1, 10, 0)
  76.         self.table.attach(self.size_spinner['slider'], 1, 2, 0, 1)
  77.         self.table.attach(self.size_spinner['spinner'], 2, 3, 0, 1)
  78.         self.size_spinner['slider'].set_size_request(150,-1)
  79.         self.size_spinner['adj'].set_value(702.001) #mettere decimali se no non si vede
  80.         self.size_spinner['adj'].connect("value-changed", self.on_button1_clicked)
  81.         #-------------------------------------------------------
  82.         self.check = Gtk.CheckButton("lanczos")
  83.         self.check.connect("toggled", self.on_button1_clicked)
  84.         self.table.attach(self.check, 2, 3, 1, 2)
  85.         #------------------------
  86.         #self.button1 = Gtk.Button(label="Calcola")
  87.         #self.button1.connect("clicked", self.on_button1_clicked)
  88.         #self.table.attach(self.button1, 2, 3, 1, 2)
  89.        
  90.         #-- VBox -------------------------
  91.         self.vbox1 = Gtk.VBox()
  92.         self.vbox1.set_spacing(12)
  93.         self.vbox1.pack_start(self.table, 1, 0, 0)
  94.        
  95.         self.frame = Gtk.Frame()
  96.         self.frame.set_shadow_type(3) # 3 GTK_SHADOW_ETCHED_IN , 1 GTK_SHADOW_IN
  97.         self.frame.set_label("  FFmpeg filter string (select and copy):  ")
  98.         self.ali1 = Gtk.Alignment()
  99.         self.ali1.set_padding(12 ,12, 12, 12)
  100.         self.frame.add(self.ali1)
  101.         self.ali1.add(self.labelout)
  102.        
  103.        
  104.        
  105.         self.vbox1.pack_start(self.frame, 1, 0, 0)
  106.        
  107.         self.window.add (self.vbox1)
  108.         #---------------------------------
  109.         self.window.show_all()
  110.         self.calcola()
  111.        
  112.     def on_window_destroy(self, *args):
  113.             Gtk.main_quit(*args)
  114.            
  115.     def on_button1_clicked(self, button):
  116.             self.calcola()
  117.        
  118.     def calcola(self):
  119.         numero = self.size_spinner['adj'].get_value()
  120.        
  121.         if ( (int(numero) % 2) != 0):
  122.           numero = int(numero) + 1
  123.         else:
  124.           numero = int(numero)
  125.        
  126.         dar = self.box2.get_active()
  127.         lato = self.box1.get_active()
  128.                
  129.         if (dar == 1):
  130.           if (lato == 0):
  131.             n2 = numero/4*3
  132.           else:
  133.             n2 = numero/3*4
  134.           setdar = ",setdar=4/3,setsar=1/1"
  135.         else:
  136.           if (lato == 0):
  137.             n2 = numero/16*9
  138.           else:
  139.             n2 = numero/9*16
  140.           setdar = ",setdar=16/9,setsar=1/1"
  141.          
  142.         if ( (int(n2) % 2) != 0):
  143.           n2 = int(n2) + 1
  144.         else:
  145.           n2 = int(n2)
  146.        
  147.         stringa = "-vf scale="
  148.         if (lato == 0):
  149.           stringa = stringa + str(numero) + ":" + str(n2)
  150.         else:
  151.           stringa = stringa + str(n2) + ":" + str(numero)
  152.          
  153.         lanc = self.check.get_active()  
  154.         if lanc:
  155.           stringa = stringa + ":flags=lanczos" + setdar  
  156.         else:
  157.           stringa = stringa + setdar
  158.         self.labelout.set_text(stringa)
  159.        
  160.     def main(self):
  161.         Gtk.main()
  162.  
  163.        
  164.    
  165.  
  166. if __name__ == "__main__":
  167.     hwg = ProgrammaGTK()
  168.     Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement