Sunteți pe pagina 1din 3

Creearea unui convertor media in Python, Qt si FFmpeg pentru Linux

In acest proiect se va arata cum sa se creeze o aplicatie pentru conversie a fisierelor video, o vom numi Julian Media Converter. In general se vor folosi binari Python si Python Qt numite PyQt si Ffmpeg. Python este cel mai popular limbaj ales pentru construirea interfetelor grafice (dar si celor command-line) a aplicatiilor ce ruleaza pe Linux. Este limbajul oficial al pachetului Ubuntu Software Centre si multe distributii de Linux il folosesc pentru aplicatiile preinstalate. Motivele folosii limbajului Python este simplu: este usor de invatat; nu necesita compilare inainte de a-l rula, totusi poate fi compilat cand doresti; iar interfetele grafice create (GUI) vor arata la fel de bine ca cele create in C/C++. In continuare vom creea o aplicatie ce poate converti diferite fisiere media pentru a fi rulate pe dispozitive cu Android sau iOS. Ca in orice aplicatie software, ar trebui sa incepem cu un design. Acesta ne va da o idee a ceea ce incercam sa realizam si apoi actioneaza ca un ghid in timp ce inaintam in procesul de dezvoltare. Un design poate fi o schita despre cum va arata aplicatia. Vezi poza 1 a aplicatiei terminate. Acum intelegem cum va functiona softul si cum va arata. Mai sunt cateva detalii ce vor fi evidentiate mai tarziu. Creearea interfetei utilizatorului 01 Creearea interfetei poate fi dificil, insa Qt Designer face acest proces foarte usor. El iti permite sa concepi, grafic, interfete de utilizator pentru applicatii Qt. Qt Designer stocheaza toate informatiile sub forma unui fisier XML cu extensia UI (.ui). Acesta poate fi incarcat in timpul pornirii aplicatiei sau convertit in limbajul Python pentru a face parte din aplicatie. In acest exemplu se va implementa fisierul in codul Python. Deschide Qt Designer, apoi clic pe File>New... din New Form alegeti Main Window. Aceasta optiune va crea o noua fereastra pentru aplicatia noastra. Acum trebuie sa trageti prin Drag and Drop din Widget Box in Main Window (vezi tabelul 1). A se nota ca nu sunt prezentate toate widget-urile din formular (form), ci doar acelea ce vor fi programate interactiv. Campuri care nu sunt prezentate pot fi adaugate. Size si Text este dat acolo unde este necesar. O data ce fisierul UI este terminat se salveaza cu denumirea mainwindow.ui. Urmeaza sa se creeze fisierul Python echivalent. Pentru a face asta se foloseste urmatoarea comanda: $ pyuic4 mainwindow.ui -o mainwindow.py 02 Crearea modulului main (main.py) Fisierul main.py actioneaza ca principalul pentru aplicatie. Intr-o aplicatie Python tipica, main.py este fisierul incarcat primul in timpul executiei. In cazul nostru, pentru simplitate tot programul este scris in main.py. Nota 1: Asigurati-va ca toate fisierele sursa sunt in acelasi director de proiect, altfel Python nu va putea sa le importe. Nota 2: Python este sensibil la tasta Tab; publicarea restrictiilor nu reflecta intotdeauna spatierea facuta cu Tab pentru cod. Pentru acuratete se recomanda un IDE Python pentru ca foarte multe erori de sintaxa referitoare la spatierea cu Tab vor fi rezolvate automat de IDE.

Totusi, tine minte ca pentru a acomoda linii mai lungi in print, o singura linie poate aparea pe multiple linii. Exceptie face daca linia de cod este despartita cu + \, atunci nu iti trebuie un raspuns in timpul tastarii liniilor de cod. Creaza fisierul main.py in directorul proiectului cu urmatorul cod: #!/usr/bin/env python3 from PyQt4 import QtCore, QtGui from os.path import expanduser import os import shlex __author__ = Lazar Iulian #import Converted Python UI File from mainwindow import Ui_MainWindow class Main(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__ (self) self.ui = Ui_MainWindow() self.ui.setupUi(self) def main(): app = QtGui.QApplication(sys. argv) window = Main() window.show() sys.exit(app.exec_()) if __name__ == __main__: main() Acesta este codul sursa necesar pentru a importa librariile PyQt si pentru a seta fisierul UI. Prima linie arata ca suntem interesati de folosirea scriptului Python 3, apoi importam modulele QtCore (nucleul oricarei aplicatii Qt) si QtGui (pentru interfata grafica) din PyQt4. In urmatoarea linie importam clasa Ui_MainWindow din mainwindow.py acel .ui convertit mai devreme. La sfarsit initializam clasa Main. 03 Programarea butoanelor Codul generat de evenimente foloseste un mecanism numit signals and slots (ce asigura un mijloc de comunicare intre obiecte). Un semnal (signal) este emis cand un anumit eveniment este declansat. De exemplu, dand clic pe butonul Select Media File ar trebui sa apeleze o functie (slot) ce va deschide file browser. Multe dintre widget-urile Qt au semnale predefinite, dar se mai pot adauga si semnale customizate. Un slot este o functie ce este apelata cand un anumit semnal (signal) este emis. Signals si slots sunt flexibile, spre exemplu, un semnal poate fi conectat la mai multe sloturi, saula un alt semnal sau un slot poate fi conectat la mai multe semnale. Putem conecta un obiect Qt ca un semnal QtSig() la un slot pyFunction folosind sintaxa: QtCore.QObject.connect(a, QtCore.SIGNAL(QtSig()), pyFunction) In PyQt 4.5 este introdus un nou mod de a conecta semnale si sloturi: connect(slot[, type=PyQt4.QtCore. Qt.AutoConnection]) insa noi vom folosi vechea structura pentru ca este mult mai bine documentata. Urmatorul cod stabileste legatura dintre selectFileButton si convertButton QtCore.QObject.connect(self.

ui.selectFileButton,QtCore. SIGNAL(clicked()),self.selectFile) QtCore.QObject.connect(self. ui.convertButton,QtCore. SIGNAL(clicked()),self.convert) @ Semnalul clicked() din codul de mai sus duce la urmatoarea functie Python: def selectFile(self): fileName = QtGui.QFileDialog. getOpenFileName(self,Open Media File,expanduser(~),Media Files (*.mov *.avi *.mkv *.mpg)) self.ui.fileName. setText(fileName) def convert(self): self.convertFile() @ Functia selectFile deschide QFileDialog in directorul acasa si filtreaza lista de fisiere in functie de .mov, .avi, .mkv si .mpg. Resurse necesare: A modern Linux distribution Python 3: This tutorial was written using Python3.2.3. www.python.org PyQt4: PyQt4 provides Python bindings for the Qt4 library. This tutorial was written using version 4.9.3. www.riverbankcomputing.com/ software/pyqt Qt4 Designer: Qt Designer is a tool for designing and building graphical user interfaces (GUIs) from Qt components. http://qt.digia.com/ Product/Developer-Tools/ FFmpeg Static Build: We are using FFmpeg as the back-end of the application. FFmpeg static version N-47648-g4c554c9 is already provided in the ffmpeg folder in the tutorial folder of the disc. You will need to extract and copy it into the project folder. You can also download the FFmpeg static builds (both 32-bit and 64-bit) from http://ffmpeg.gusari.org/static/. Ubuntu installation command: $ sudo apt-get install python3pyqt4 pyqt4-dev-tools qt4-designer

S-ar putea să vă placă și