Использование ffmpeg в Python 2.7

Я безуспешно пытался установить pyffmpeg в Python 2.7. Я нашел пакет для Python 2.6, но не могу заставить его работать. Поэтому я пытался установить пакет для 2.7. Я видел предыдущие сообщения других людей на этом сайте, но они не помогли. Есть ли у кого-нибудь опыт в этом вопросе. В конечном счете, я хочу разработать приложение wxPython, которое конвертирует видео форматы. Спасибо

Код, который я в итоге написал и который сработал для меня (очень примитивный, но он работает ....):

import wx
import os
import sys
import time
import datetime
from wx.lib.delayedresult import startWorker



class dConvert(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'd-Converter', size=(500, 310))
        panel = wx.Panel(self, wx.ID_ANY)#Creates a panel over the widget
        toolbar = self.CreateToolBar()
        toolbar.Realize()

        #Setup Menu
        #Setting up Menu
        menuFile = wx.Menu()
        menuFile.Append(1, "&About...")
        menuFile.AppendSeparator()
        menuFile.Append(2, "E&xit")
        menuBar = wx.MenuBar()
        menuBar.Append(menuFile, "&File")

        panel.SetBackgroundColour('WHITE')

        menu2 = wx.Menu()
        menu2.Append(5, "&.mpg to dvd", ".mpg to dvd")
        menu2.AppendSeparator()
        menu2.Append(wx.NewId(), "&Options...", "Options...")
        menuBar.Append(menu2, "&DVD")


        menu3 = wx.Menu()
        menu3.Append(7, "&Audio/Video Trim")
        #menu3.AppendSeparator()
        menuBar.Append(menu3, "Media")

        self.SetMenuBar(menuBar)
        self.Bind(wx.EVT_MENU, self.OnAbout, id=1)
        self.Bind(wx.EVT_MENU, self.OnQuit, id=2)
        self.Bind(wx.EVT_MENU, self.OnDVD, id=5)
        self.Bind(wx.EVT_MENU, self.OnMedia, id=7)

        #Add icon to frame
        iconFile = "dconverter_image.jpg"
        icon1 = wx.Icon(iconFile, wx.BITMAP_TYPE_JPEG)
        self.SetIcon(icon1)


        self.statusbar = self.CreateStatusBar()
        self.statusbar.SetStatusText("Convert Audio & Video")
        self.statusbar.SetFieldsCount(3)
        self.statusbar.SetStatusWidths([200, -2, -2])



        #Panel Text
        font = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD)
        font2 = wx.Font(7, wx.DEFAULT, wx.NORMAL, wx.BOLD)

        directory = wx.StaticText(panel, -1, 'Path: c:\\ffmpeg\\bin', (300, 13))
        directory.SetFont(font2)

        convertfile = wx.StaticText(panel, -1, 'File:', (270, 53))
        convertfile.SetFont(font)

        convertfile2 = wx.StaticText(panel, -1, 'Format:', (245, 83))
        convertfile2.SetFont(font)

        convertfile3 = wx.StaticText(panel, -1, 'Quality:', (244, 113))
        convertfile3.SetFont(font)

        convertfile4 = wx.StaticText(panel, -1, 'Presets:', (239, 143))
        convertfile4.SetFont(font)

        image_file = 'cd_rom.gif'
        bmp1 = wx.Image(image_file, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
        panel.bitmap1 = wx.StaticBitmap(panel, -1, bmp1, (50, 30))



        self.formats1 = []


        #Select Media path    
        os.chdir("c:\\ffmpeg\\bin")
        wrkdir = os.getcwd()
        filelist = os.listdir(wrkdir)
        #self.formats1 = []

        for filename in filelist:
            (head, filename) = os.path.split(filename)
            if filename.endswith(".avi") or filename.endswith(".mp4") or filename.endswith(".mpg") or filename.endswith(".m4A") or filename.endswith(".MTS") or filename.endswith(".flv") or filename.endswith(".mov") or filename.endswith(".mpeg4") or filename.endswith(".mpeg") or filename.endswith(".mpg2") or filename.endswith(".mkv") or filename.endswith(".m4v") or filename.endswith(".wav") or filename.endswith(".mp3"):
            self.formats1.append(filename)


        self.format_combo1=wx.ComboBox(panel, size=(140, -1),value='Select Media', choices=self.formats1, style=wx.CB_DROPDOWN, pos=(300,50)) 
        self.Bind(wx.EVT_COMBOBOX, self.fileFormats, self.format_combo1)


        #Media Formats
        self.formats2 = ['Select Format', '.avi','.mpeg','.mp4','.flv','.mov','.m4a','.m4v','.mkv','.mpeg4','.mpg','.mpg2','.mp3','.ogg','.wav','.wma']

        self.format_combo2=wx.ComboBox(panel, size=(100, -1),value='Select Format', choices=self.formats2, style=wx.CB_SORT, pos=(300,81))

        #Media Quality
        self.formats3 = ['-sameq','-qmax']
        self.format_combo3=wx.ComboBox(panel, size=(100, -1),value='Select Quality', choices=self.formats3, style=wx.CB_DROPDOWN, pos=(300,111))



        #-qmax settings
        self.formats4 = ['1','2','3','4','5','6','7','8']
        self.format_combo4=wx.ComboBox(panel, size=(30, -1),value='0', choices=self.formats4, style=wx.CB_DROPDOWN, pos=(405,111))
        self.format_combo4.Disable()


        #Media Quality
        self.formats5 = ['Select Preset','video to mp3']
        self.format_combo5=wx.ComboBox(panel, size=(100, -1),value='Select Preset', choices=self.formats5, style=wx.CB_DROPDOWN, pos=(300,141))

        #Bit rate
        self.formats6 = ['128000', '160000', '180000', '192000']
        self.format_combo6=wx.ComboBox(panel, size=(47, -1),value='k/bs', choices=self.formats6, style=wx.CB_DROPDOWN, pos=(405,141))
        self.format_combo6.Disable()






        #Convert Button
        self.button = wx.Button(panel, label="Convert", pos=(300, 171), size=(80, 20))
        self.Bind(wx.EVT_BUTTON, self.convertButton, self.button)

        #Abort Button
        self.button2 = wx.Button(panel, label="Abort", pos=(385, 171), size=(80, 20))
        self.Bind(wx.EVT_BUTTON, self.OnAbortButton, self.button2)
        self.button2.Disable()

        #Refresh Button
        self.button3 = wx.Button(panel, label="Refresh", pos=(215, 171), size=(80, 20))
        self.Bind(wx.EVT_BUTTON, self.file_refresh, self.button3)


        #ComboBox Event
        self.Bind(wx.EVT_COMBOBOX, self.OncomboBox, self.format_combo3)
        self.Bind(wx.EVT_COMBOBOX, self.OncomboBox2, self.format_combo5)
        self.Bind(wx.EVT_COMBOBOX, self.OncomboBox3, self.format_combo2)



    def file_refresh(self, e):
        self.format_combo1.Clear()
        os.chdir("c:\\ffmpeg\\bin")
        wrkdir = os.getcwd()
        filelist = os.listdir(wrkdir)
        for m_files in filelist:
            if m_files.endswith(".avi") or m_files.endswith(".mp4") or m_files.endswith(".mpg") or m_files.endswith(".m4A") or m_files.endswith(".MTS") or m_files.endswith(".flv") or m_files.endswith(".mov") or m_files.endswith(".mpeg4") or m_files.endswith(".mpeg") or m_files.endswith(".mpg2") or m_files.endswith(".mkv") or m_files.endswith(".m4v") or m_files.endswith(".wav") or m_files.endswith(".mp3"):
            self.format_combo1.Append(m_files)



    def file_rename(self, f_name):
        ts = time.time()
        #Capture readable timestamp
        st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d_%H-%M-%S')
        os.chdir("c:\\ffmpeg\\bin")
        wrkdir = os.getcwd()

        #get file extenstion from original file
        #fileName, fileExtension = os.path.splitext(wrkdir + '\\' + f_name)

        #add file extension to timestamp
        new_file = st 

        return new_file



    def fileFormats(self, e):
        myFormats = {'audio': ('Select Format', '.m4a', '.mp3', '.ogg', '.wav', '.wma'), 'video': ('Select Format', '.avi', '.flv', '.mkv', '.m4v', '.mov', '.mpg', '.mpg2', '.mpeg4', '.mp4', '.mpeg')}
        bad_file = ['Media not supported']
        myFile = self.format_combo1.GetValue()
        f_exten = (x for x in myFormats['audio'] + myFormats['video'] if myFile.endswith(x))
    extension = f_exten.next()

        if extension in myFormats['audio']:
            self.format_combo2.SetItems(myFormats['audio'])

        elif extension in myFormats['video']:
            self.format_combo2.SetItems(myFormats['video'])
        else:
            self.format_combo2.SetItems(bad_file)


    def OnQuit(self, event):
        self.Close(True)

    def OnAbout(self, event):
        wx.MessageBox("d-Converter 1.0\n\n Developer: D.Monroe\n\nCopyright 2012",
                "About d-Converter", wx.OK | wx.ICON_INFORMATION, self)


    def OncomboBox(self, e):
        quality=self.format_combo3.GetValue()
        if quality == '-qmax':
            self.format_combo4.Enable()

        else:
            self.format_combo4.Disable()



    def OncomboBox2(self, e):
        quality=self.format_combo5.GetValue()
        if quality != 'Select Preset':
            self.format_combo1.Enable()
            self.format_combo2.Disable()
            self.format_combo3.Disable()
            self.format_combo4.Disable()
            self.format_combo6.Enable()

        elif quality == 'Select Preset':
            self.format_combo1.Enable()
            self.format_combo2.Enable()
            self.format_combo3.Enable()
            self.format_combo4.Disable()
            self.format_combo5.Enable()
            self.format_combo6.Disable()

        elif quality == 'video to mp3':
            self.format_combo6.Enable()
            self.format_combo2.Disable()
            self.format_combo3.Disable()
            self.format_combo4.Disable()

    def OncomboBox3(self, e):
        v_format=self.format_combo2.GetValue()
        if v_format != 'Select Format':
            self.format_combo1.Enable()
            self.format_combo2.Enable()
            self.format_combo3.Enable()
            self.format_combo4.Enable()
            self.format_combo5.Disable()
            self.format_combo6.Disable()

        elif v_format == 'Select Format':
            self.format_combo1.Enable()
            self.format_combo2.Enable()
            self.format_combo3.Enable()
            self.format_combo4.Disable()
            self.format_combo5.Enable()
            self.format_combo6.Disable()





    def OnMedia(self, e):
        pass

    def OnDVD(self, e):
        """ Select a directory to search"""
        os.chdir("c:\\ffmpeg\\bin")
        wrkdir = os.getcwd()
        filelist = os.listdir(wrkdir)
        progdir = 'c:\\ffmpeg\\bin\\ffmpeg.exe' + ' -i '
        prog_dir = ' -target '
        progdir3 = '-dvd -ac 2 '
        vid_format = '.mpg'


        sampleList = []
        for filename in filelist:
           (head, filename) = os.path.split(filename)
           if filename.endswith(".avi") or filename.endswith(".flv") or filename.endswith(".mpeg") or filename.endswith(".mp4") or filename.endswith(".mov") or filename.endswith(".mpg2"):
            sampleList.append(filename)

        dlg = wx.SingleChoiceDialog(
               self, "Files in c:\\ffmpeg\\bin", 'Select video to convert',
           sampleList,
           wx.CHOICEDLG_STYLE
           )

        if dlg.ShowModal() == wx.ID_OK:
            cur_item = dlg.GetStringSelection()
            s_string = cur_item
            #f_string = self.file_rename(s_string)
            f_string = s_string.replace(' ', '')





        dlg.Destroy()


        dlg2 = wx.SingleChoiceDialog(
               self, "Files in c:\\ffmpeg\\bin", 'Select video standard ',
           ["pal", "ntsc"],
           wx.CHOICEDLG_STYLE
           )

        if dlg2.ShowModal() == wx.ID_OK:
            cur_item2 = dlg2.GetStringSelection()
            s_string2 = cur_item2
            self.button.Disable()
            self.button2.Enable()
            self.format_combo1.Disable()
            self.format_combo2.Disable()
            self.format_combo3.Disable()
            self.format_combo4.Disable()
            self.format_combo5.Disable()
            self.format_combo6.Disable()
            startWorker(self.LongTaskDone, self.LongTask4, wargs=(progdir, wrkdir, prog_dir, progdir3, f_string, s_string2, vid_format))


        dlg2.Destroy()






    def convertButton(self, e):
        unit1 = self.format_combo1.GetValue()
        unit2 = self.format_combo2.GetValue()
        unit3 = self.format_combo3.GetValue()
        unit4 = None
        unit5 = self.format_combo5.GetValue()
        bitRate = self.format_combo6.GetValue()
        unit6 = bitRate
        if unit3 == '-qmax':
            unit4 = self.format_combo4.GetValue()
        else:
            pass

        os.chdir("c:\\ffmpeg\\bin")
        wrkdir = os.getcwd()

        newfile = unit1



        #stripped = os.path.splitext(newfile)[0] # Updated 9/26/2013 to strip extension.
        #stripped = newfile.strip('mpeg3kaviovfl4w2c.') #Strips the extension from the original file name
        stripped = self.file_rename(newfile)

        #os.rename(newfile, newfile_f)



        progname='c:\\ffmpeg\\bin\\ffmpeg.exe' + ' -i '

        preset1_a='-vn -ar 44100 -ac 2 -ab'
        preset1_b='-f mp3 '
        preset_mp3='.mp3'







         if (unit1 == 'Select Media' or unit1 == ''):
                    amsg = wx.MessageDialog(None, 'You must select a media file!', 'Media Converter', wx.ICON_INFORMATION)
                    amsg.ShowModal()
                    amsg.Destroy()



         elif (unit1 != 'Select Media' or unit1 != '') and (unit5 == 'Select Preset'):

             if (unit2 == 'Select Format' or unit2 == ''):
                amsg = wx.MessageDialog(None, 'You must select a format', 'Media Converter', wx.ICON_INFORMATION)
                amsg.ShowModal()
                amsg.Destroy()

                self.format_combo3.Enable()
                self.format_combo4.Enable()
                self.format_combo5.Enable()

            else:
                pass

            if (unit3 == 'Select Quality' or unit3 == ''):
                amsg = wx.MessageDialog(None, 'You must select quality', 'Media Converter', wx.ICON_INFORMATION)
                amsg.ShowModal()
                amsg.Destroy()


            elif (unit3 == '-qmax'):
                if (unit4 == '0' or unit4 == ''):
                    amsg = wx.MessageDialog(None, 'You must select number between 1-8.', 'Media Converter', wx.ICON_INFORMATION)
                    amsg.ShowModal()
                    amsg.Destroy()
                else:
                    self.button.Disable()
                    self.button2.Enable()
                    pass

            else:
                self.button.Disable()
                self.button2.Enable()
                self.format_combo1.Disable()
                self.format_combo2.Disable()
                self.format_combo3.Disable()
                self.format_combo4.Disable()
                startWorker(self.LongTaskDone, self.LongTask, wargs=(progname,wrkdir,unit1,unit3,stripped,unit2))





        elif (unit1 != 'Select Media' or unit1 != '') and (unit5 == 'video to mp3'):
            if unit6 == 'k/bs' or unit6 == None:
                amsg = wx.MessageDialog(None, 'You must select a bit rate.', 'Media Converter', wx.ICON_INFORMATION)
                amsg.ShowModal()
                amsg.Destroy()

            else:
                self.button.Disable()
                self.button2.Enable()
                self.format_combo1.Disable()
                self.format_combo2.Disable()
                self.format_combo3.Disable()
                self.format_combo4.Disable()
                self.format_combo5.Disable()
                self.format_combo6.Disable()
                startWorker(self.LongTaskDone, self.LongTask3, wargs=(progname, wrkdir, unit1, preset1_a, unit6, preset1_b, stripped, preset_mp3))











    def LongTask(self, progname, wrkdir, unit1, unit3, stripped, unit2):
        convert_file1 = progname + wrkdir + '\\' + unit1 + ' ' + unit3 + ' ' + stripped + unit2
        self.statusbar.SetStatusText("Converting: " + unit1 + "...")
        os.system(convert_file1)
        print convert_file1





    def LongTask2(self, progname, wrkdir, unit1, unit3, unit4, stripped, unit2):
        convert_file2 = progname + wrkdir + '\\' + unit1 + ' ' + unit3 + ' ' + unit4 + ' ' + stripped + unit2
        self.statusbar.SetStatusText("Converting: " + unit1 + "...")
        os.system(convert_file2)


    def LongTask3(self, progname, wrkdir, unit1, preset1_a, unit6, preset1_b, stripped, preset_mp3):
        convert_file3 = progname + wrkdir + '\\' + unit1 + ' ' + preset1_a + ' ' + unit6 + ' ' + preset1_b + stripped + preset_mp3
        self.statusbar.SetStatusText("Converting: " + unit1 + "...")
        os.system(convert_file3)

    def LongTask4(self, progdir, wrkdir, prog_dir, progdir3, f_string, s_string2, vid_format):
        #convert_file4 = progdir + wrkdir + '\\' + s_string + prog_dir + s_string2 + progdir3 + s_string.strip('mpegaviw24ofl.') + vid_format
        convert_file4 = progdir + f_string + prog_dir + s_string2 + progdir3 + f_string.strip('mpegaviw24ofl.') + vid_format
        self.statusbar.SetStatusText("Converting: " + f_string + "...")
        os.system(convert_file4)
        print convert_file4



    def LongTaskDone(self, result):
        r = result.get()
        if r:
            amsg = wx.MessageDialog(None, 'Aborted!', 'Media Converter', wx.ICON_INFORMATION)
            self.statusbar.SetStatusText("Convert Aborted ...")
            amsg.ShowModal()
            amsg.Destroy()
            self.LongTask.terminate()
        else:
            self.statusbar.SetStatusText("Done ...")
            emsg = wx.MessageDialog(None, 'Finished Converting!', 'Media Converter', wx.ICON_INFORMATION)
            emsg.ShowModal()
            emsg.Destroy()
            self.format_combo1.Enable()
            self.format_combo2.Enable()
            self.format_combo3.Enable()
            self.format_combo5.Enable()
            self.format_combo4.Disable()
            self.format_combo6.Disable()
            self.button.Enable()
            self.button2.Disable()
            self.shouldAbort = False
        """self.progress_bar.SetValue(0)
        self.progress_bar.Hide()"""



    def OnAbortButton(self, e):
        endprogram = 'c:\\Windows\\System32\\taskkill /IM cmd.exe'
        os.system(endprogram)
        self.format_combo1.Enable()
        self.format_combo2.Enable()
        self.format_combo3.Enable()
        self.format_combo5.Enable()
        self.button.Enable()




if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = dConvert()
    frame.SetSizeHints(500,310,500,310)
    frame.Show()
    app.MainLoop()
6
задан suffa 24 March 2014 в 14:44
поделиться