scdlbot.py 文件源码

python
阅读 26 收藏 0 点赞 0 评论 0

项目:scdlbot 作者: gpchelkin 项目源码 文件源码
def split_audio_file(self, file=""):
        file_root, file_ext = os.path.splitext(file)
        file_format = file_ext.replace(".", "").lower()
        if file_format not in ["mp3", "m4a", "mp4"]:
            raise FileNotSupportedError(file_format)
        file_size = os.path.getsize(file)
        if file_size > self.MAX_CONVERT_FILE_SIZE:
            raise FileTooLargeError(file_size)
        file_parts = []
        if file_size <= self.MAX_TG_FILE_SIZE:
            if file_format == "mp3":
                file_parts.append(file)
            else:
                logger.info("Converting: %s", file)
                try:
                    sound = AudioSegment.from_file(file, file_format)
                    file_converted = file.replace(file_ext, ".mp3")
                    sound.export(file_converted, format="mp3")
                    del sound
                    gc.collect()
                    file_parts.append(file_converted)
                except (OSError, MemoryError) as exc:
                    gc.collect()
                    raise FileNotConvertedError
        else:
            logger.info("Splitting: %s", file)
            try:
                id3 = mutagen.id3.ID3(file, translate=False)
            except:
                id3 = None
            parts_number = file_size // self.MAX_TG_FILE_SIZE + 1
            try:
                sound = AudioSegment.from_file(file, file_format)
                part_size = len(sound) / parts_number
                for i in range(parts_number):
                    file_part = file.replace(file_ext, ".part{}{}".format(str(i + 1), file_ext))
                    part = sound[part_size * i:part_size * (i + 1)]
                    part.export(file_part, format="mp3")
                    del part
                    gc.collect()
                    if id3:
                        try:
                            id3.save(file_part, v1=2, v2_version=4)
                        except:
                            pass
                    file_parts.append(file_part)
                # https://github.com/jiaaro/pydub/issues/135
                # https://github.com/jiaaro/pydub/issues/89#issuecomment-75245610
                del sound
                gc.collect()
            except (OSError, MemoryError) as exc:
                gc.collect()
                raise FileConvertedPartiallyError(file_parts)
        return file_parts
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号