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)
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)
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
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
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
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]
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
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