コード例 #1
0
    def setTag(self, tag, srcfile, coverpath=None):
        path = pathHelper.getDirName(srcfile)
        name = pathHelper.getFileNameWithoutExtension(srcfile)
        ext = pathHelper.getFileExtension(srcfile)
        oext = ext

        if 'm4a' in ext or 'mp4' in ext:
            oext = '.mp3'
        if 'mp3' not in oext:
            coverpath = None
        tmpfile = path + '/' + 'TMP' + name + oext

        try:
            data = AudioSegment.from_file(srcfile, format=ext[1:])
            check = data.export(tmpfile,
                                format=oext[1:],
                                tags=tag,
                                cover=coverpath)
            check.close()
        except Exception as e:
            pathHelper.remove(tmpfile)
            return

        if fileHelper.getFileSize(tmpfile) > 0:
            pathHelper.remove(srcfile)
            os.rename(tmpfile, path + '/' + name + oext)
        else:
            pathHelper.remove(tmpfile)
コード例 #2
0
 def setTrackMetadata(self, track_info, file_path, album_info, index):
     path = pathHelper.getDirName(file_path)
     name = pathHelper.getFileNameWithoutExtension(file_path)
     exte = pathHelper.getFileExtension(file_path)
     tmpfile = path + '/' + self.tmpfileFlag + name + exte
     try:
         tag = {
             'Artist': track_info['artist']['name'],
             'Album': track_info['album']['title'],
             'Title': track_info['title'],
             'CopyRight': track_info['copyright'],
             'Track': track_info['trackNumber']
         }
         if index is not None:
             tag['Track'] = str(index)
         if album_info is not None:
             tag['Date'] = album_info['releaseDate']
             tag['Year'] = album_info['releaseDate'].split('-')[0]
         # tmp file
         pathHelper.copyFile(file_path, tmpfile)
         # set metadata
         ext = os.path.splitext(tmpfile)[1][1:]
         data = AudioSegment.from_file(tmpfile, ext)
         check = data.export(tmpfile, format=ext, tags=tag)
         # check file size
         if fileHelper.getFileSize(tmpfile) > 0:
             pathHelper.remove(file_path)
             pathHelper.copyFile(tmpfile, file_path)
     except:
         pass
     if os.access(tmpfile, 0):
         pathHelper.remove(tmpfile)
コード例 #3
0
    def mergerByTsfiles(self, srcfilepaths, filepath, showshell=False):
        """
        #Func    :   合并ts文件             
        #Return  :   True/False         
        """
        filepath = os.path.abspath(filepath)
        exten = pathHelper.getFileExtension(filepath)
        tmppath = filepath.replace(exten, '.ts')
        tmppath2 = filepath.replace(exten, '2.ts')
        array = [
            srcfilepaths[i:i + 25] for i in range(0, len(srcfilepaths), 25)
        ]
        pathHelper.remove(tmppath)
        pathHelper.remove(tmppath2)

        for item in array:
            for index, file in enumerate(item):
                item[index] = '"' + file + '"'
            form = ' + '.join(item)
            if os.access(tmppath, 0):
                form = '"' + tmppath + '" + ' + form

            cmd = 'copy /b ' + form + ' "' + tmppath2 + '"'
            ret = self.__process(cmd, 3, showshell, tmppath2)
            if ret is False:
                break
            pathHelper.remove(tmppath)
            os.rename(tmppath2, tmppath)

        if ret is True:
            cmd = "ffmpeg -i \"" + tmppath + "\" -c copy \"" + filepath + "\""
            ret = self.__process(cmd, 3, showshell, filepath)
        pathHelper.remove(tmppath)
        pathHelper.remove(tmppath2)
        return ret
コード例 #4
0
 def __process(self, cmd, retrycount, showshell, filename, removeFile=True):
     stdoutFile = None
     fp = None
     while retrycount >= 0:
         retrycount -= 1
         try:
             if showshell:
                 if sys.version_info[0] > 2:
                     res = subprocess.call(cmd, timeout=self.mergerTimeout, shell=True)
                 else:
                     cmd = cmd.encode(sys.getfilesystemencoding())
                     res = subprocess.call(cmd, shell=True)
             else:
                 exten = pathHelper.getFileExtension(filename)
                 stdoutFile = filename.replace(exten, '-stdout.txt')
                 fp  = open(stdoutFile, 'w')
                 if sys.version_info[0] > 2:
                     res = subprocess.call(cmd, timeout=self.mergerTimeout, shell=True, stdout=fp, stderr=fp)
                 else:
                     res = subprocess.call(cmd, shell=True, stdout=fp, stderr=fp)
                 fp.close()
                 fp = None
                 pathHelper.remove(stdoutFile)
             if res == 0:
                 return True
         except:
             pass
         if fp:
             fp.close()
         pathHelper.remove(stdoutFile)
         if removeFile: 
             pathHelper.remove(filename)
     return False
コード例 #5
0
 def __process(self, cmd, retrycount, showshell, filename):
     stdoutFile = None
     while retrycount >= 0:
         retrycount -= 1
         try:
             if showshell:
                 res = subprocess.call(cmd,
                                       timeout=self.mergerTimeout,
                                       shell=True)
             else:
                 exten = pathHelper.getFileExtension(filename)
                 stdoutFile = filename.replace(exten, '-stdout.txt')
                 fp = open(stdoutFile, 'w')
                 res = subprocess.call(cmd,
                                       timeout=self.mergerTimeout,
                                       shell=True,
                                       stdout=fp,
                                       stderr=fp)
                 fp.close()
                 pathHelper.remove(stdoutFile)
             if res == 0:
                 return True
         except:
             pass
         pathHelper.remove(stdoutFile)
         pathHelper.remove(filename)
     return False
コード例 #6
0
ファイル: tagHelper.py プロジェクト: memoz/AIGPY
 def _savePic(self, coverPath):
     data = _getFileData(coverPath)
     if data is None:
         return
     if 'flac' in self._ext:
         pic = flac.Picture()
         pic.data = data
         if pathHelper.getFileExtension(coverPath) == '.jpg':
             pic.mime = u"image/jpeg"
         self._handle.clear_pictures()
         self._handle.add_picture(pic)
     if 'mp3' in self._ext:
         self._handle.tags.add(APIC(encoding=3, data=data))
     if 'mp4' in self._ext or 'm4a' in self._ext:
         pic = mp4.MP4Cover(data)
         self._handle.tags['covr'] = [pic]
コード例 #7
0
    def mergerByTs(self, srcDir, filepath, showshell=False):
        srcDir = os.path.abspath(srcDir)
        filepath = os.path.abspath(filepath)
        if os.path.exists(srcDir) is False:
            return False

        exten = pathHelper.getFileExtension(filepath)
        tmppath = filepath.replace(exten, '.ts')
        if systemHelper.isWindows():
            srcDir += '\\*.ts'
            cmd = 'copy /b "' + srcDir + '" "' + tmppath + '"'
        else:
            srcDir += '/*.ts'
            cmd = 'cat ' + srcDir + ' > "' + tmppath + '"'

        ret = self.__process(cmd, 3, showshell, tmppath)
        if ret is True:
            cmd = "ffmpeg -i \"" + tmppath + "\" -c copy \"" + filepath + "\""
            ret = self.__process(cmd, 3, showshell, filepath)
        pathHelper.remove(tmppath)
        return ret
コード例 #8
0
    def mergerByM3u8_Multithreading2(self, url, filepath, showprogress=False, showshell=False):
        try:
            # Get urllist
            urllist = self.__parseM3u8(url)
            if len(urllist) <= 0:
                return False

            sdir = pathHelper.getDirName(filepath)
            pathHelper.mkdirs(sdir)

            ext    = pathHelper.getFileExtension(filepath)
            tspath = filepath.replace(ext, '.ts')
            pathHelper.remove(tspath)
            if not netHelper.downloadFileByUrls(urllist, tspath, 30, True):
                return False
            if self.covertFile(tspath, filepath):
                pathHelper.remove(tspath)
                return True
            return False
        except:
            return False